Ich und mein Team verwenden Feature-Zweige (mit Git). Ich frage mich, welche Strategie für die Codeüberprüfung am besten geeignet ist, bevor sie zum Master zusammengeführt wird.
- Ich checke einen neuen Zweig vom Master aus und nenne ihn fb_ # 1
- Ich lege ein paar Mal fest und möchte es dann wieder zum Master zusammenführen
- Vor dem Zusammenführen soll jemand eine Codeüberprüfung durchführen
Nun gibt es 2 Möglichkeiten:
1
- Ich füge master zu fb_ # 1 zusammen ( nicht fb_ # 1 zu master), um es so aktuell wie möglich zu machen
- Ein Teamkollege überprüft Änderungen zwischen dem Hauptkopf und dem Kopf von fb_ # 1
- Wenn fb_ # 1 in Ordnung ist, führen wir fb_ # 1 zum Master zusammen
- Vorteile: Kein veralteter Code in der Überprüfung
- Nachteile: wenn jemand anderes etwas zwischen "1" zusammenfügt und 2." Seine Änderungen werden in der Rezension angezeigt, obwohl sie zu einer anderen Rezension gehören.
2nd
- Ein Teamkollege überprüft Änderungen zwischen der Kasse (Git-Merge-Base-Master fb_ # 1) und dem Kopf fb_ # 1
- Vorteile: Wir sehen genau, was sich während der Arbeit am Feature-Zweig geändert hat
- Nachteile: In der Überprüfung wird möglicherweise veralteter Code angezeigt.
Welcher Weg ist Ihrer Meinung nach besser und warum ? Vielleicht gibt es einen anderen geeigneteren Ansatz?
quelle
git show HEAD
. Da dies der Merge Commit FM ist , werden beide Elternteile aufgelistet. Sie haben also den Hash von mm . Alternativ können Sie trivialer sehen die Eltern ingitk
oder andere git Browser3rd
Sie bauen den Zweig auf dem Master neu auf, um ihn auf den neuesten Stand zu bringen und die Änderungen getrennt zu halten.
Dies schafft eine neue Geschichte der Branche. Es handelt sich um neue Revisionen mit neuen IDs, die denselben Inhalt haben, jedoch vom neuesten Master abgeleitet werden und keine Verknüpfung zu den alten Revisionen herstellen. Die alten Revisionen sind in "reflog" weiterhin verfügbar, wenn Sie auf sie verweisen müssen, z. B. weil Sie einen Fehler bei der Konfliktlösung gefunden haben. Außerdem sind sie wertlos. Git schneidet das Reflog standardmäßig nach 3 Monaten ab und verwirft die alten Revisionen.
Sie verwenden die interaktive Basis (
git rebase -i
undgit commit --amend
), um die Änderungen neu zu ordnen, zu bearbeiten und zu bereinigen, sodass jede Änderung logisch abgeschlossen wird.Dadurch wird erneut eine neue Historie erstellt, diesmal mit dem zusätzlichen Vorteil, dass Sie die Änderungen so umstrukturieren können, dass sie bei der Überprüfung am sinnvollsten sind.
Vorteile:
Normalerweise bedeutet die zusätzliche Arbeit, dass Sie den Code zuerst gründlich selbst überprüfen und dies wird auch viele Probleme verursachen.
Dies ist, was Linux und Git tun. Und es ist nicht ungewöhnlich, dass in diesen Projekten Serien von 20 bis 25 Patches zur Überprüfung eingereicht und mehrmals umgeschrieben werden.
Eigentlich hat Linux es von Anfang an getan, als die Versionskontrolle der Wahl bei Tarballs und Patches lag. Als Linus viele Jahre später anfing, Git zu erstellen, war dies der Hauptgrund für die Implementierung des
rebase
Befehls und seiner interaktiven Variante. Auch deswegen hat Git einen eigenen Begriff von Autor und Committer . Der Autor ist derjenige, der die Revision zuerst erstellt hat und derjenige, der sie zuletzt berührt hat. Da sowohl unter Linux als auch unter Git die Patches weiterhin per E-Mail übermittelt werden, sind die beiden fast nie dieselbe Person.quelle
merge --no-ff
die eindeutig diesen Zweig auf Master zeigen werden anstelle der Funktion verschwindet nur in dem Rest der Commits--no-ff
hat es auf und ab. Ich persönlich finde es mehr Lärm als alles andere. YMMV.Es gibt tatsächlich eine dritte Möglichkeit - und höchstwahrscheinlich viele andere, da GIT eher eine Implementierung eines SCM-Frameworks als eine Implementierung einer SCM-Methodik ist. Diese dritte Möglichkeit basiert auf
rebase
.Der
rebase
GIT-Unterbefehl nimmt eine Reihe von Festschreibungen vor (normalerweise von Ihrem Verzweigungspunkt bis zur Spitze Ihres Zweigthemastopic
) und spielt sie an einer anderen Stelle ab (normalerweise an der Spitze Ihres Integrationszweigs, zmaster
. B. ). Derrebase
Unterbefehl erzeugt neue Commits, wodurch die Möglichkeit besteht, Commits in einer Form neu anzuordnen, die leichter zu überprüfen ist. Dies führt zu einer neuen Reihe von Festschreibungen, ähnlich der früherentopic
, die jedoch an der Spitze des Integrationszweigs verankert zu sein scheinen. Dieser neue Zweig wird weiterhintopic
von GIT aufgerufen , sodass der alte Verweis verworfen wird. Ich beschrifte informelltopic-0
den ursprünglichen Zustand Ihrer Niederlassungtopic-1
und so weiter die verschiedenen Umgestaltungen.Hier ist mein Vorschlag für Ihre
topic
Branche:(Optionaler Schritt) Sie legen Ihren Zweig interaktiv
topic
an seinem Verzweigungspunkt neu fest (siehe--fixup
Option fürcommit
und die-i
und--autosquash
Optionen fürrebase
), wodurch Sie die Möglichkeit haben, Ihre Commits auf eine Weise umzuschreiben, die leichter zu überprüfen ist. Dies führt zu einer Verzweigungtopic-1
.Sie bauen Ihren Zweig "Topic" am Anfang Ihres Integrationszweigs neu auf, ähneln einer Zusammenführung, verschmutzen jedoch den Verlauf nicht mit einer Zusammenführung, die lediglich ein Software-Engineering-Artefakt ist. Dies führt zu einer Verzweigung
topic-2
.Senden Sie es
topic-2
an einen Teamkollegen, der es gegen die Spitze von überprüftmaster
.Wenn
topic-2
es in Ordnung ist, dann füge es zum Master zusammen.HINWEIS Die Verzweigungen - wobei Verzweigung sich auf den Festschreibungsbaum bezieht - werden von GIT alle gleich aufgerufen, sodass am Ende des Prozesses nur die Verzweigung
topic-2
einen Namen in GIT hat.Vorteile:
Nachteile:
topic-0
, gibt es drei Zweige Artefaktetopic-0
,topic-1
undtopic-2
die erzeugt werden , in den Baum zu begehen. (Obwohl zu jeder Zeit nur einer von ihnen einen Namen in GIT hat.)In Ihrem ersten Szenario «wenn jemand etwas zwischen" 1 "zusammengeführt hat. und "2." bezieht sich auf die Zeitspanne zwischen der Erstellung des Verzweigungspunkts und dem Zeitpunkt, zu dem Sie sich für eine Zusammenführung entscheiden. In diesem Szenario «wenn jemand etwas zwischen" 1. " und "2." bezieht sich auf die Zeitspanne zwischen der Basiswiederherstellung und der Zusammenführung, die normalerweise sehr kurz ist. So können Sie in dem von mir
master
bereitgestellten Szenario den Zweig für die Zeit der Zusammenführung «sperren», ohne Ihren Arbeitsablauf wesentlich zu stören, während dies im ersten Szenario unpraktisch ist.Wenn Sie systematische Codeüberprüfungen durchführen, ist es wahrscheinlich eine gute Idee, die Commits in angemessener Weise neu anzuordnen (optionaler Schritt).
Das Verwalten der Artefakte zwischen Verzweigungen ist nur dann schwierig, wenn Sie sie für mehrere Repositorys freigeben.
quelle
topic-0
,topic-1
undtopic-2
Zweige. Sobald die Wiederherstellung abgeschlossen ist, ist die vorherige Version irrelevant. Also alles , wäre estopic@{1}
,topic@{2}
,topic@{yesterday}
,topic@{3.days.ago}
usw. Ihren Hintern zu speichern , falls Sie Ihnen Konfliktlösung in dem Fütterungsmaterial finden geschraubt.topic
. Weil branch in git nur der Name ist.topic
in GIT, es ist immer einer des Zweiges ist (ein Zweig wie in Baum begangen, nicht wie im GIT reference) I markierttopic-0
,topic-1
,topic-2
.