Sie möchten, dass Ihr zentrales Repository leer ist. Angenommen, die Maschine, auf der sie lebt, heißt static
:
$ ssh static git init --bare /git/myproject.git
Dieses bloße Repository ist ein zentraler Treffpunkt: Es dient zum Drücken und Abrufen, nicht zum Entwickeln.
Führen Sie Ihre Entwicklung auf Klonen des zentralen Repositorys durch:
$ cd ~/src
$ git clone static:/git/myproject.git
Selbst wenn Sie aktiv sind static
, arbeiten Sie in einem Klon:
$ git clone /git/myproject.git
Obwohl Sie der einzige sind, der an diesem Repository arbeitet, gewöhnen Sie sich an, an dem zu arbeiten, was in der Git-Dokumentation als Themenzweige bezeichnet wird . Ein unmittelbarer Vorteil davon ist, dass ein sauberer Master erhalten bleibt, dh Sie können jederzeit von Ihrem zentralen Master-Zweig in den Master Ihres aktuellen lokalen Repositorys ziehen, ohne ihn zusammenzuführen.
Beispielsweise:
$ git checkout -b fix-bug-in-foo
$ hack
$ git add file.c file.h
$ git commit -m "Fix ..."
Das scheint keine große Sache zu sein, aber es gibt Ihnen die Freiheit, das auf diesem Zweig dargestellte Projekt in einem teilweise gekochten Zustand zu belassen, oder wenn sich Ihre coole Idee als Flop herausstellt, können Sie diesen Zweig einfach ohne wegwerfen Brechen Sie alles andere in Ihrem Projekt, das bereits in anderen Branchen funktioniert. Unendliche freie Mulligans!
Vielleicht gehst du an diesem Abend nach Hause und hast eine neue Funktion hinzugefügt. Am nächsten Morgen du
$ git checkout master
$ git pull
um Ihren lokalen Master zu aktualisieren, um zu reflektieren, was sich im zentralen Repository befindet.
Angenommen, Sie haben den Foo-Fehler behoben und sind bereit, ihn in Ihren Hauptzweig aufzunehmen. Zuerst möchten Sie es in die Änderungen von gestern Abend integrieren:
$ git checkout fix-bug-in-foo
$ git rebase master
Der rebase
Befehl lässt Ihr Repository so aussehen, als hätten Sie den Foo-Fehler zusätzlich zu der neuen Funktion von gestern Abend behoben. (Das ist ähnlich svn update
, aber flexibler und leistungsfähiger.)
Nun, um es in Ihren zentralen Master zu bekommen:
$ git checkout master
$ git merge fix-bug-in-foo
$ git push origin master
Wir haben den Meister als etwas Besonderes behandelt, aber das ist nur konventionell. Sie können die Arbeit an verschiedenen Zweigen verschiedener Repositorys über das Git-Repository static
genauso einfach teilen .