Mailingliste + git format-patch
+ git apply
kann Autor generieren! = Committer
In Projekten wie dem Linux-Kernel, in denen sich Patches befinden:
Generieren eines einzelnen neuen Commits mit einem anderen Autor und Committer:
- Der Autor hat den Patch geschrieben
- Der Committer ist, wer ein Projektbetreuer ist und wer den Patch zusammengeführt hat
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:
* Merge commit (committer == author == project maintainer)
|\
| * Feature commit (committer == author == contributor)
|/
* Old master (random committer and author)
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:
* Feature commit (committer == maintainer, author == contributor)
|
* Old master (random committer and author)
Das ist genau wie bei den git apply
E-Mail-Patches.
Auf GitHub derzeit:
- Sie wählen die Methode beim Zusammenführen über das Dropdown-Menü auf der Schaltfläche Zusammenführen
- Methoden können in den Repo-Einstellungen vom Eigentümer aktiviert oder deaktiviert werden
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:
GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'
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:
git log --pretty='%cn %cd' -n1 HEAD
wo cn
und cd
stehen für Committer Name
undCommitter Date
Verwenden Sie das fuller
vordefinierte Format:
git log --format=fuller
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:
git cat-file -p HEAD
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:
GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000'
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:
author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}
Dies macht deutlich, dass beide zwei völlig unabhängige Dateneinträge im Festschreibungsobjekt sind.