Gibt es eine Möglichkeit, das Host-Git-Repository so einzurichten, dass git pull
es --rebase
standardmäßig von seinen (lokalen) Klonen verwendet wird? Durch die Suche nach Stack Overflow habe ich davon erfahren branch.autosetuprebase
, aber es muss pro Klon individuell konfiguriert werden.
Mein Projektablauf ist so eingerichtet, dass wir pull
den develop
Zweig haben, bevor wir merge
einen Feature-Zweig dazu erstellen. Dies wird pull
fast immer verwendet --rebase
, daher versuche ich herauszufinden, ob dies die Standardeinstellung sein kann.
Antworten:
Es gibt jetzt 3 verschiedene Konfigurationsebenen für das Standard-Pull-Verhalten. Von den allgemeinsten bis zu den feinkörnigsten sind sie:
1.
pull.rebase
Wenn Sie dies auf setzen,
true
bedeutet dies immer, dass diesgit pull
immer gleichbedeutend istgit pull --rebase
(esbranch.<branchname>.rebase
sei denn, dies ist ausdrücklich festgelegtfalse
). Dies kann auch pro Repository oder global festgelegt werden.2.
branch.autosetuprebase
Wenn Sie dies auf setzen
always
, wird bei jeder Erstellung eines Tracking-Zweigs ein Konfigurationseintrag wie der folgende erstellt. Für feinkörnige Kontrolle, dies kann auch eingestellt werdennever
,local
oderremote
und kann pro Repository oder global festgelegt werden. Siehegit config --help
für weitere Details.3.
branch.<branchname>.rebase
Wenn Sie dies auf setzen,
true
bedeutet dies, dass dieser bestimmte Zweig immer durch erneutes Basieren aus seinem Upstream gezogen wird, sofern dies nichtgit pull --no-rebase
explizit verwendet wird.Fazit
Während Sie das Standardverhalten nicht für alle zukünftigen Klone eines Repositorys ändern können, können Sie das Standardverhalten für alle (vorhandenen und zukünftigen) Repositorys des aktuellen Benutzers über ändern
git config --global pull.rebase true
.quelle
~/.gitconfig
, was bedeutet, dass jeder Entwickler, der das Host-Repository klont, den Befehl ausführen muss. Sie beschweren sich nicht über Ihre Lösung. Es ist gut, ich möchte nur bestätigen, dass ich Ihren Punkt richtig verstanden habe.Wie wäre es mit
Dies wird git anweisen, immer mit Rebase zu ziehen.
quelle
--bool
, es ist unnötigDie Antwort ist nein.
Es gibt keine Möglichkeit, ein Remote-Repository so einzurichten, dass jeder, der es klont, das Standardverhalten von
git pull
geändert hat.Sie können jedoch einen serverseitigen Hook einrichten, der überprüft, ob niemand Merge-Commits überträgt (so etwas vielleicht).
Es gibt auch einige Konfigurationsoptionen, an denen Sie interessiert sein könnten. Alle Entwickler, die aus dem Remote-Repository klonen, müssen diese manuell festlegen.
1. Option
branch.<name>.rebase
Sie können einen lokalen Zweig so konfigurieren, dass er immer so verwendet
--rebase
wird und<name>
durch einen Zweignamen ersetzt wird:Nachdem Sie dies ausgeführt haben
master
, sah dermaster
Abschnitt in folgendermaßen.git/config
aus:2. Option
branch.autosetuprebase
Das Ausführen dieses vorherigen Konfigurationsbefehls für jeden Git-Zweig kann problematisch sein. Sie können Git also so konfigurieren, dass er automatisch für jeden neuen Zweig eingerichtet wird:
(Sie können auch angeben
never
,remote
undlocal
, sieheman git-config
für Details.)Ohne diese
--global
Option wird die Konfiguration in gespeichert.git/config
und nur das aktuelle Repository ist betroffen. Mit--global
wird die Konfiguration in gespeichert~/.gitconfig
und jedes nicht konfigurierte Repository ist betroffen.Diese Option wirkt sich nicht auf bereits vorhandene Zweige aus.
3. Option
pull.rebase
(Sie können ihm auch die
--global
Option geben.)Wenn diese Option wahr
git pull
ist, entspricht das Ausführen demgit pull --rebase
, es sei denn, esbranch.<name>.rebase
wurde festgelegtfalse
.quelle
Dies macht die
--rebase
Option zur Standardeinstellung, wenn einegit pull
für einen bestimmten Zweig ausgegeben wird.@Flimm, ich musste hinzufügen
true
, damit deine erste Option funktioniert.Die richtige Syntax lautet also:
So führen Sie diesen Befehl auf dem
develop
Zweig aus:Und jetzt sieht der
develop
Abschnitt in so.git/config
aus:quelle
Derzeit gibt es keine Möglichkeit, die Standardrichtlinie für ein Repository festzulegen.
Wenn Sie es selbst wollen und mindestens Git 1.7.9 verwenden, können Sie die
pull.rebase
Konfiguration global wie folgt festlegen :Aber Sie müssen auf jeder Maschine tun. Eine Option könnte darin bestehen, die Standard-Home-Vorlage / das Standard-Skelett des Benutzers mit dieser Option zu konfigurieren. Benutzer können diese Option jedoch ändern.
Wenn Sie keine Zusammenführungen wünschen, können Sie einen serverseitigen Hook definieren, um Pushs mit Zusammenführungen abzulehnen.
Als Referenz dient die Quelldokumentation für pull.rebase:
quelle