Ich versuche ein Commit wie zu machen
git commit --author="John Doe <[email protected]>" -m "<the usual commit message>"
Dabei ist John Doe ein Benutzer, in dessen Namen ich das Commit durchführen möchte.
Es scheint in Ordnung zu sein git log
. Wenn ich a mache gitk
, ist der Autorenname korrekt, aber der Committer-Name wird aus meinen globalen Git-Konfigurationseinstellungen ausgewählt (und ist daher auf meinen Namen / meine E-Mail-Adresse eingestellt).
Fragen
Was ist der Unterschied zwischen den beiden (Committer vs Autor)?
Sollte ich den Committer auch auf den anderen Benutzer einstellen?
Wenn ja, wie?
git
git-config
gitk
mu 無
quelle
quelle
Antworten:
Das Originalplakat fragt:
Der Autor ist die Person, die den Code ursprünglich geschrieben hat. Als Committer wird hingegen die Person angenommen, die den Code im Namen des ursprünglichen Autors festgeschrieben hat. Dies ist in Git wichtig, da Sie mit Git den Verlauf neu schreiben oder Patches für eine andere Person anwenden können. Das KOSTENLOSE Online Pro Git- Buch erklärt es folgendermaßen:
Das Originalplakat fragt:
Nein, wenn Sie ehrlich sein möchten, sollten Sie den Committer nicht auf den Autor einstellen, es sei denn, der Autor und der Committer sind tatsächlich dieselbe Person.
quelle
git config user
und danngit add
undgit commit
, dann würde git wissen, wer hinzugefügt und wer begangen hat, aber es würde immer noch nicht wissen, wer es geschrieben hat.Mailingliste +
git format-patch
+git apply
kann Autor generieren! = CommitterIn Projekten wie dem Linux-Kernel, in denen sich Patches befinden:
git format-patch
git send-email
git apply
odergit am
: Wie verwende ich git am, um Patches aus E-Mail-Nachrichten anzuwenden?Generieren eines einzelnen neuen Commits mit einem anderen Autor und Committer:
Siehe zum Beispiel diesen zufällig ausgewählten Patch und das entsprechende Commit:
Git-Webschnittstellen wie GitHub und GitLab können einen Autor generieren! = Committer
Da Git (Hub | Lab) sowohl das Upstream- als auch das Fork-Repository auf demselben Computer hält, können sie automatisch alles tun, was Sie auch lokal tun können, einschließlich:
Erstellen Sie ein Merge-Commit.
Erzeugt keinen Autor! = Committer.
Hält die SHA oder das neue Commit intakt und erstellt ein neues Commit:
In der Vergangenheit war dies die erste verfügbare Methode auf GitHub.
Vor Ort ist dies erledigt
git merge --no-ff
.Dies erzeugt zwei Commits pro Pull-Anforderung und behält einen Zweig in der Git-Historie.
Rebase auf
master
GitHub hackt auch die Commits, um Committer == zu setzen, wer auch immer die Merge-Taste gedrückt hat. Dies ist nicht obligatorisch und wird nicht einmal standardmäßig lokal von durchgeführt
git rebase
, sondern gibt dem Projektbetreuer Rechenschaft ab.Der Git-Baum sieht jetzt so aus:
Das ist genau wie bei den
git apply
E-Mail-Patches.Auf GitHub derzeit:
https://help.github.com/articles/about-merge-methods-on-github/
Wie setze ich den Committer eines neuen Commits?
Das Beste, was ich finden konnte, war die Verwendung der Umgebungsvariablen, um den Committer zu überschreiben:
Wie erhalte ich den Committer und das Commit-Datum eines bestimmten Commits?
Standardmäßig werden nur Autorendaten angezeigt
git log
.Um das Datum des Committers anzuzeigen, können Sie entweder:
Formatieren Sie das Protokoll speziell dafür:
wo
cn
undcd
stehen fürCommitter Name
undCommitter Date
Verwenden Sie das
fuller
vordefinierte Format:Siehe auch: So konfigurieren Sie 'git log' so, dass 'Festschreibungsdatum' angezeigt wird
Gehen Sie auf eine niedrige Ebene und zeigen Sie die gesamten Festschreibungsdaten an:
Wie lege ich das Committer-Datum eines neuen Commits fest?
git commit --date
Legt nur das Autorendatum fest: Für das Committer-Datum war das Beste, was ich finden konnte, die Umgebungsvariable:Siehe auch: Was ist der Unterschied zwischen Autor und Committer in Git?
Wie speichert Git Autor gegen Committer intern?
Siehe: Was ist das Dateiformat eines Git-Commit-Objekts?
Grundsätzlich ist das Commit eine Textdatei und enthält zwei durch Zeilen getrennte Felder:
Dies macht deutlich, dass beide zwei völlig unabhängige Dateneinträge im Festschreibungsobjekt sind.
quelle
GIT_COMMITTER_*
git auch bei Überschreibungen die Durchführung eines Commits verweigert, wenn Sie keinen Standard-Committer mit festgelegt habengit config
.GIT_{COMMITTER,AUTHOR}_EMAIL
@Ciro Santilli use 改造 中心 六四 事件 法轮功vorgeschlagen zu verwenden
Um zu vermeiden, dass Name und E-Mail wiederholt werden, können Sie sie wiederverwenden
Dadurch werden die Variablen zuerst in separaten Befehlen festgelegt und dann für den
git commit
Aufruf verwendet (beachten Sie die doppelten Klammern).quelle