update Was ist der Unterschied zwischen Autor und Committer in Git?




smartgit change author name (4)

Es sind nicht mehrere Autoren. Einer ist der Autor und ein anderer ist der Commiter.

Wenn du einen Klon machst, könntest du es deutlich sehen:

$ git cat-file -p 0a0b150668daa3c6f016
tree 91edcb411b7cd0708c1f5bb05621846146c9425a
parent 6b9ffe3653fe59f035b01ba1f46b5f2650be00ca
author Logan Kearsley <[email protected]> 1308937685 -0700
committer Felix Geisendo╠Иrfer <[email protected]> 1309117893 +0200

Slight but definite & consistent performance boost.

Ich bin gerade auf folgendes Commit auf GitHub gestoßen: https://github.com/felixge/node-formidable/commit/0a0b150668daa3c6f01626d2565b898e5da12392

Wie geht man damit um, dass mehrere Autoren dasselbe Commit haben?


Es sind nicht mehrere Autoren mit diesem Commit verbunden (noch ist es derzeit nicht möglich, einem einzelnen Commit mehrere Autoren zuzuweisen). In diesem Fall war gliese1337 der Autor , und Felixge war der Committer . Am wahrscheinlichsten ist dies passiert, weil gliese1337 eine Pull-Anfrage eingereicht hat, die von felixhe (dem Eigentümer des Repositoriums) akzeptiert und dann bestätigt wurde. Dieser Workflow ist auf GitHub ziemlich üblich. Dies ist auch in Fällen hilfreich, in denen ein Projektbetreuer per E-Mail einen Patch erhält, sodass der Autor des Patches selbst für das Patch noch eine Gutschrift erhält, auch wenn er keinen Commit-Zugriff auf das Projekt hat.

Ein paar verwandte Links:

Short Git Wiki Abschnitt zur Autorenattribution
Eine Feature-Anforderung für mehrere Autorenfunktionen im Git-Kern


Das sind nicht wirklich zwei Autoren - das ist ein Autor und ein Committer. Die zwei Felder haben unterschiedliche Bedeutungen. Der Autor ist derjenige, der den Inhalt erstellt hat, und der Committer ist derjenige, der es getan hat. Wenn du einen normalen Commit machst, bist du beides. (Und beide kommen mit einer zugehörigen E-Mail und einem Zeitstempel.)

Aber sie können sich auf verschiedene Arten unterscheiden:

  • git format-patch / git am - Mit diesem Paar können Sie Commits in Patches git format-patch die in der Regel per E-Mail gesendet werden und dann von jemand anderem übernommen werden. Du bleibst der Autor; die Person, die sie anwendet, ist der Täter. Das ist ziemlich genau das, was dort auf GitHub passiert ist.

  • git commit --amend , git rebase , git filter-branch - Dies sind alles Varianten zum History-Rewriting, angefangen vom Single-Commit bis zur Historie einer Verzweigung bis hin zum gesamten Verlauf. Sie können möglicherweise die Informationen des Committers ändern - insbesondere schreiben sie den Zeitstempel des Committers immer neu. Der ursprüngliche Autor bleibt an seinem Platz (in Standardbetriebsmodi), und wenn der Autor auch derjenige ist, der das Neuschreiben vornimmt, bleiben sein Name und seine E-Mail, aber der Zeitstempel ist natürlich anders.


Git Webinterface wie GitHub und GitLab

In solchen Systemen kann sich der Autor beim Zusammenführen eines Patches abhängig von den Repo-Einstellungen vom Committer unterscheiden oder nicht.

Da Git (Hub | Lab) sowohl die Upstream- als auch die Fork-Repositories auf demselben Computer enthält, kann es automatisch alles tun, was Sie auch lokal tun können:

  • Erstellen Sie ein Zusammenführungs-Commit.

    Erzeugt keinen Autor! = Committer.

    Hält den SHA oder das neue Commit intakt und erstellt ein neues Commit:

    * Merge commit (committer == author == project maintainer)
    |\
    | * Feature commit (committer == author == contributor)
    |/
    * Old master (random committer and author)
    

    Historisch gesehen war dies die erste verfügbare Methode auf GitHub.

    Vor Ort geschieht dies mit git merge --no-ff .

    Dies erzeugt zwei Commits pro Pull-Anforderung und hält eine Verzweigung in der Git-Historie.

  • Rebase oben auf master

    Obwohl das im Prinzip nicht zwingend ist und nicht standardmäßig per git rebase lokal git rebase , hackt GitHub auch die Commits, um den Committer == zu setzen, der die Merge-Taste gedrückt hat.

    Der Grund dafür ist, dass es dem Projektbetreuer Rechenschaft ablegt.

    Der Git Baum sieht jetzt so aus:

    * Feature commit (committer == maintainer, author == contributor)
    |
    * Old master (random committer and author)    
    

    das ist genau wie das der git apply email patches.

Auf GitHub derzeit:

  • Sie wählen die Methode beim Zusammenführen über das Dropdown auf der Zusammenführungsschaltfläche
  • Methoden können in den Repo-Einstellungen vom Eigentümer aktiviert oder deaktiviert werden

https://help.github.com/articles/about-merge-methods-on-github/







github