Mit Git auf mehreren Computern arbeiten

15

Das hört sich vielleicht etwas seltsam an, aber ich frage mich, wie ich mit Git von mehreren Computern aus arbeiten kann, die auf irgendeine Weise miteinander vernetzt sind. Es sieht für mich so aus, als hätte ich zwei Möglichkeiten und ich sehe Vorteile auf beiden Seiten:

  • Verwenden Sie git selbst zum Teilen, jede Maschine hat ihr eigenes Repo und Sie müssen zwischen ihnen holen.
    • Sie können auf beiden Computern arbeiten, auch wenn der andere offline ist. Das alleine ist ziemlich groß, denke ich.
  • Verwenden Sie ein Repo, das über das Netzwerk von mehreren Computern gemeinsam genutzt wird.
    • Sie müssen nicht jedes Mal, wenn Sie die Maschine wechseln, Git-Pulls durchführen, da Ihr Code immer auf dem neuesten Stand ist.
    • Machen Sie sich keine Sorgen, dass Sie vergessen haben, Code von Ihrem anderen Nicht-Hosting-Computer zu übertragen, der jetzt nicht mehr erreichbar ist, da Sie auf diesem Computer einen Dateifreigabevorgang ausgeführt haben.

Meine Intuition besagt, dass sich im Allgemeinen jeder für die erste Option entscheidet. Ich sehe jedoch den Nachteil, dass Sie möglicherweise nicht immer auf den Code Ihrer anderen Computer zugreifen können, und ich möchte mit Sicherheit nicht alle meine WIP-Zweige am Ende eines jeden Tages auf Github verschieben. Ich möchte auch nicht ständig meine Computer eingeschaltet lassen müssen, damit ich sie direkt abrufen kann. Ein kleiner Punkt ist schließlich, dass alle git-Befehle, um mehrere Zweige auf dem neuesten Stand zu halten, mühsam werden können.

Gibt es einen dritten Griff in dieser Situation? Möglicherweise stehen Tools von Drittanbietern zur Verfügung, die diesen Vorgang erleichtern. Was schlagen Sie vor, wenn Sie sich regelmäßig mit dieser Situation auseinandersetzen?

Tesserex
quelle
git ist ein dezentrales Versionierungswerkzeug und git erstellt beim Klonen immer eine lokale Kopie Ihres Repos. Das Konzept eines "zentralisierten" oder "eindeutigen" Repositorys gibt es in der Welt von git global einfach nicht.
user827992
2
@ user827992 Ich bin mir dieser Tatsache zu 100% bewusst. Ich glaube nicht, dass ich etwas zur Zentralisierung vorgeschlagen hätte. Das einzige, worauf ich mich bezog, ist, wenn Sie ein Fileshare verwenden, ein Rechner der Host in dem Sinne, dass er die Dateien physisch speichert. Das ist ein ganz anderes Konzept als dvcs.
Tesserex
Dieser Thread stackoverflow.com/questions/1550378/… enthält einige gute Gedanken. Das Festschreiben, Drücken, Ziehen, Zurücksetzen und Löschen der Filiale ist eine davon (möglicherweise automatisiert)
phil294

Antworten:

14

Ich beschäftige mich täglich mit Ihren beiden Lösungsvorschlägen. Es gibt zwei Schlüsselkonzepte, um sie gut zu handhaben.

  1. Verwenden Sie Zweigstellen. Ich glaube, dass die Produktionsgeschichte makellos sein sollte. Infolgedessen verbringe ich viel Zeit damit, productiondie Historie meiner Filiale logisch, replizierbar und debuggbar zu machen. Wenn Sie jedoch mehrere Computer verwenden, müssen Sie gelegentlich laufende Arbeiten ausführen. Verwenden Sie einen Zweig. Sie können pullund pushdiese Verzweigung von beiden Computern mit geringem Aufwand ausführen und wenn es bereit ist, sie zusammenzuführen masteroder neu zu production strukturieren, um einen wartbareren Verlauf zu erstellen.
  2. Die Verwendung eines über ein Netzwerk freigegebenen Repos ist in Ordnung, sofern Sie es nicht auch für andere Benutzer freigeben. Wir verwenden ein gemeinsam genutztes Repository für Skripte mit dem kreativen Namen scriptsRepository. Anfangs schien es eine gute Idee zu sein, da sich das Repo nicht oft ändert, aber im Laufe der Zeit ist es ein ziemlicher Albtraum geworden. Es ist einfach, die Arbeit eines anderen zu überschreiben, und Sie verbringen am Ende so viel Zeit mit der Kontrolle des Luftverkehrs, wer das Repository bereitstellt, wie Sie damit arbeiten.

Die beste Lösung besteht darin, auf jedem Computer ein lokales Repository zu führen und Zweigstellen zwischen ihnen über eine Remote-Verbindung auszutauschen. Übernehmen Sie die laufenden Arbeiten so oft Sie möchten in diese Zweige. Solange Sie bereit sind, rebaseeine verständlichere Geschichte zu führen, ist dies in der Praxis recht effektiv.

Wenn Sie den ganzen Tag über an mehr als einem Zweig arbeiten, aber nicht jeden Zweig einzeln an die Fernbedienung übertragen möchten, git push <remote>werden standardmäßig alle übereinstimmenden Zweige an übertragen <remote>. Diese Standardeinstellung wird in einer späteren Version von git geändert, kann jedoch durch Festlegen push.defaultin einer Konfigurationsdatei oder durch Festlegen der Übereinstimmung außer Kraft gesetzt werden refspec:

git push <remote> :
Christopher
quelle
3

Wenn nicht alle Maschinen ständig in Betrieb sind, gibt es kein Patentrezept: Bevor Sie die Maschine ausschalten, müssen Sie die Änderungen an einen anderen Ort verschieben. Ich drücke auf einen privaten Server, aber es könnte genauso gut eine Dropbox oder ein USB-Schlüssel sein, den Sie überall dabei haben.

Ja, das Verschieben mehrerer Zweige an einen zentralen Ort kann mühsam werden, aber das sollte nicht zu schwierig zu programmieren sein. Dafür verwende ich ein push.shSkript, das ich jedes Mal ausführe, wenn ich mit der Arbeit an einer Maschine fertig bin.

janos
quelle
2

Ich bin dazu aus einer etwas anderen Richtung gekommen (und ich verwende Quecksilber, aber philosophisch ist es dasselbe). Das ist nicht meine Idee, ich benutze es einfach und es funktioniert für meine persönlichen Sachen.

Ich habe einen Klon meiner Repositorys in einem SkyDrive-Ordner erstellt (es kann sich auch um eine Dropbox oder ein anderes Magic Sync-Tool Ihrer Wahl handeln). Anschließend habe ich die Instanzen auf meinen beiden Computern so konfiguriert, dass sie beim Festschreiben automatisch auf das SkyDrive-Repository übertragen werden.

Wenn ich die Box wechsle, ist es nur eine Frage des Ziehens und Aktualisierens - theoretisch arbeiten Sie immer linear, obwohl es sich um mehrere Repositorys handelt.

Der Schlüssel dabei ist, dass das SkyDrive-Repo hauptsächlich existiert, um sicherzustellen, dass ich auf beiden Computern Zugriff auf mehr oder weniger die neueste Version des Codes habe - obwohl dies auch für mehr funktionieren würde - und um ein Repo bereitzustellen zusätzliches Backup. Alles, was "erledigt" ist, wird in den Brennofen geschoben (wenn ich git verwende und die Art und Weise, wie das Spiel gespielt wird, richtig verstehe, ist dies der Punkt, an dem ich einen Rebase mache).

Was ich wirklich nicht tun möchte, ist, von einem freigegebenen Ordner zu starten. Wenn Sie ein DVCS verwenden, können Sie auch den Vorteil genießen.

Murph
quelle
0

Die erste Ihrer beiden Alternativen ist die Antwort. Dies wird durch das "D" in "DVCS" impliziert. Jeder Benutzer hat eine eigene lokale Instanz des Repositorys, und die Repositorys kommunizieren auf verwaltbare Weise untereinander.

Sie könnten Ihre zweite Alternative machen, aber das Problem ist, dass es nur ein Repository-Arbeitsverzeichnis gibt. Der Arbeitsbaum kann sich also immer nur in einem Zustand befinden - es arbeitet kein Joe an einem Zweig und Jane an einem anderen. So können Entwickler die Änderungen des anderen überschreiben und die Arbeit des anderen durcheinander bringen. Es ist so, als hätte man überhaupt keine Versionskontrolle!

Es gibt einen Mittelweg mit dem Namen "Bare Repository" auf einem Netzlaufwerk und dem Ein- und Auschecken einzelner Benutzer. Dies trennt Ihre WIP-Arbeit (die Sie ja lokal aufbewahren) von der Arbeit, die Sie veröffentlichen, bis zum Repository. Es ist nicht "Speichern" - es ist "Veröffentlichen". Die Arbeit, die Ihre Kollegen sehen und verwenden sollen.

Dan Ray
quelle