Ich habe git für meinen eigenen Gebrauch eingerichtet, damit ich von überall auf ein Projekt zugreifen und die Versionssicherheit gewährleisten kann, wenn ich hier an Teil X und hier an Teil Y arbeite, und bei Bedarf zusammenführen kann.
Allerdings hat nur eine meiner Entwicklungsmaschinen eine statische IP. Mein Gehirn steckt im CVS-Modus fest, also habe ich versucht, git so einzurichten, dass dieser Computer der "zentrale" Server ist, von dem alle anderen abrufen.
Diese Art von Arbeiten. Ich habe eine Reihe von AC-Maschinen, die einen Git-Pull vom 'Master' M ausführen. Sie machen Git-Pushs, um die Daten zurückzusenden.
Das Problem kommt, wenn ich am Master entwickle. Erstens kann ich nicht herausfinden, wie ich das zentrale Repo dazu bringen kann, die neueste Version bereitzustellen, ohne dies zu tun
git reset --hard HEAD
das scheint ein bisschen übertrieben. Und wenn ich vor dem Zurücksetzen auf dem zentralen Computer entwickle, bin ich mir nicht sicher, wie ich es mit Änderungen zusammenführen soll, die bereits vorgezogen wurden.
Etwas an meinem mentalen Modell ist weit weg. Hilfe?
Antworten:
Sie möchten, dass Ihr zentrales Repository leer ist. Angenommen, die Maschine, auf der sie lebt, heißt
static
: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:
Selbst wenn Sie aktiv sind
static
, arbeiten Sie in einem Klon: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:
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
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:
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 ähnlichsvn update
, aber flexibler und leistungsfähiger.)Nun, um es in Ihren zentralen Master zu bekommen:
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 .quelle
git init --bare
keine anderen Argumente. Wenn festgelegt, wird entweder das aktuelle Arbeitsverzeichnis oder die Umgebungseinstellung GIT_DIR verwendet. Ich glaube, Sie brauchen Git 1.6.5.x, damit es ein Verzeichnisargument akzeptiert.Wenn Sie einen zentralen Server mit einem zentralen Git-Repository haben, sollte dieses
bare
Repository ein Repository sein. In nackten Repositorys sind keine Arbeitskopien der Dateien enthalten. Wenn Sie also auf diesem zentralen Computer arbeiten, arbeiten Sie nicht direkt mit dem zentralen Repository, sondern mit einem lokalen Klon.quelle
Diese Antwort ähnelt der Antwort von gbacon , geht jedoch davon aus, dass Sie bereits über ein lokales Repo-Setup verfügen und einen Remote-Master erstellen möchten, der als zentrales Repo behandelt wird. Es werden nur Details aus einem anderen Ansatz hinzugefügt.
Ich verwende git, um meine dot-config-Dateien zu speichern. Ich drücke und ziehe von dem, was ich als "zentrales Repo" betrachte. Es ist sehr praktisch, alle meine Punktedateien über mehrere Computer zurückzusetzen.
Dadurch wurde ein leeres Repo auf der Repo-Site erstellt.
Wenn ich bereits ein lokales Repo vor Ort habe, kann ich es an den Remote-Standort senden.
chdir in das lokale Verzeichnis.
Fügen Sie das Remote-Repo als Ursprung hinzu, sodass Push / Pull auf dieses Repo einwirkt.
Schieben Sie meinen Master zum Ursprung (wie zuvor über die Git-Fernbedienung beschriftet). Jetzt wird dieses Remote-Repo als mein "zentrales Repo" behandelt. Alle meine Git Push / Pull werden mit dem Ursprung interagieren.
Wenn ich zu einem anderen Host gehe, kann ich das Repo einfach per Klon an einen neuen Ort ziehen.
Wenn ich die Entwicklung auf dem Remote-Server durchführen möchte, klone ich zuerst und drücke / ziehe dann zurück in das nackte Repo.
Sie müssen wahrscheinlich Ihre Einstellungen vornehmen,
git config --add branch.master.remote origin
umgit pull
sich nicht darüber zu beschweren, dass Sie nicht spezifisch genug sind. Die andere Alternative besteht darin, Ihren Hauptzweig auf--track
den Remote-Ursprung einzustellen . Nützlich, wenn Sie mehrere Zweige haben.quelle
Ich habe heute nur das gleiche Problem untersucht. Dieser Blog- Beitrag hat viele Diskussionen zu diesem Thema, aber die Mehrheit ist der Meinung, das zu tun, was Manni gesagt hat. In einem Kommentar zu dem Beitrag von David French finden Sie einige andere Möglichkeiten, einschließlich der Vorgehensweise, wenn Sie versehentlich in ein Repository wechseln, in dem keine nicht festgeschriebene Arbeit im Index oder im Arbeitsbaum vorhanden ist. "git reset –soft HEAD ^" setzt die gedrückte Änderung zurück, ohne Ihre Arbeit zu stören.
quelle