Git-Push/Pull zwischen den lokalen Repositories der Teammitglieder
Lesezeit: 7 Minuten
Nehmen wir an, es gibt ein Team mit 4 Entwicklern. Wir haben auch ein zentrales Repository für unser Projekt. Entwickler pushen und pullen aus dem zentralen Repository. Hier(in Dezentral, aber zentral Abschnitt) heißt es, dass es möglich ist, lokale Repositories zwischen Teammitgliedern zu pushen/ziehen.
Jeder Entwickler zieht und schiebt zum Ursprung. Aber neben den zentralisierten Push-Pull-Beziehungen kann jeder Entwickler auch Änderungen von anderen Peers ziehen, um Unterteams zu bilden … Technisch bedeutet dies nichts anderes, als dass Alice eine Git-Fernbedienung namens bob definiert hat, die auf Bobs Repository zeigt, und vice umgekehrt
Nun stellt sich die Frage, wie man den entfernten Namen bob definiert, der auf Bobs Repository zeigt. Wenn es darauf ankommt, verwenden Entwickler möglicherweise unterschiedliche Betriebssysteme.
Ich habe das nie wirklich versucht, da es ein bisschen verworren erscheint, aber es könnte erreicht werden, indem man den Remote-Git-Zugriff auf jedem lokalen Computer problemlos einrichtet. (Erstellen Sie einen Git-Benutzer, fügen Sie autorisierte Schlüssel hinzu, erstellen Sie ein Fork-Repo usw.)
– Daniel Williams
16. August 2013 um 4:46 Uhr
Alles in diesem Artikel scheint mir ein Standard-Workflow zu sein. Ich sehe keinen Vorteil darin, dass Teammitglieder Änderungen von anderen Kollegen ziehen. Du könnte Richten Sie Git-Server auf allen Desktops ein, aber das ist ein großes Problem für keine wirkliche Verbesserung. Vielleicht solltest du den Autor twittern? Dem werde ich nachgehen.
– spritzen
16. August 2013 um 5:05 Uhr
Brent Bradburn
Wenn Sie ein Benutzerkonto auf dem Host einrichten und auf das Repo zugreifen, kann jemand anderes über SSH mit oder ohne Einrichtung einer benannten “Remote” pushen/abrufen.
git push user@host:/path/to/repo branch
Wenn Sie häufig Code freigeben, können Sie eine benannte Fernbedienung einrichten, um sich den Serverpfad zu merken:
git remote add remotename user@host:/path/to/repo
Wenn es in Ordnung ist, dass das Teilen eine enge Koordination (und wahrscheinlich sehr lockere Sicherheit) erfordert, können Sie eine kurzlebige starten git daemon auf dem “master” nach Bedarf: git-Äquivalent von ‘hg serve’? In diesem Fall gelten weiterhin die oben genannten Freigabebefehle, aber die user@host:/path wird ersetzt durch git://host/. Siehe auch Git-Daemon-Dokumentation.
Alternativ könnten Sie ein separates dediziertes Repository einrichten, das für die zwischenzeitliche Freigabe verwendet wird: Wie richte ich ein Staging-Repository in Git ein?
Das ist eigentlich viel einfacher als die anderen Vorschläge.
– cheeze
24. Mai 2018 um 13:38 Uhr
Es ist eine sehr häufige Sache wie Alice und Bob müssen gemeinsam an einigen Funktionen arbeiten. Inzwischen soll die Entwicklung auf unterschiedlichen Zweigen von unterschiedlichen Entwicklern durchgeführt werden.
Einfache Vorgehensweise wäre:
Erstellen Sie einen neuen Zweig sprint_1, Alice und Bob checkout zu sprint_1
Alle Änderungen in Bezug auf die Funktionalität sollten hier vorgenommen werden
Push- und Pull-Operationen sollten mit durchgeführt werden
git pull origin sprint_1 and git push origin sprint_1
Wenn die Änderungen abgeschlossen sind und sprint_1 einen stabilen Code hat, könnte er mit anderen Zweigen zusammengeführt werden. Wenn der Code auf sprint_1 einen langen Weg zurückgelegt hat, ist es ratsam, den Zweig neu zu gründen, anstatt zu fusionieren, um Konflikte oder Rosinenpickerei zu vermeiden.
darum bitte ich nicht. Ich weiß, dass sie an jedem Zweig arbeiten können, indem sie zu einem Remote-Repository pushen und von dort ziehen.
– nyzm
19. August 2013 um 3:01 Uhr
Es ist keine direkte Antwort auf die Frage, aber ich habe dafür gestimmt, weil es eigentlich viel einfacher zu verstehen und einzurichten ist. Wenn Sie sich also mit dem anderen Workflow nicht auskennen (oder Ihren Vorgesetzten nicht davon überzeugen können oder Ihre IT-Abteilung mit den Netzwerkeinstellungen Pulls zwischen Entwicklern erschwert), können Sie stattdessen dieses Setup verwenden. Würde nicht auf Tausende von Entwicklern skalieren, aber nicht schlecht.
– Platzhalter
1. Dezember 2015 um 0:52 Uhr
Sie scheinen zu wiederholen, was das OP bereits über die Verwendung von Git-Branches und Remotes in einem zentralisierten Modell weiß. OP möchte wissen, wie man in ein echtes dezentralisiertes Modell einsteigen kann, bei dem jeder Knoten, der das Repo hostet, eine Remote für jeden anderen Knoten ist. Wie @Wildcard erwähnt, ist die orthogonale Natur des zentralisierten Modells leicht zu verstehen, aber das macht dies nicht zu einer guten Antwort auf die ursprüngliche Frage.
– Josh Gust
16. August 2021 um 16:33 Uhr
Gerhard Rosciano
Ähnlich wie GIT Clone Repo über das lokale Dateisystem in Windows
Per Antwort von JFSebastian:
$ git clone --no-hardlinks /path/to/repo
Der obige Befehl verwendet die POSIX-Pfadnotation für das Verzeichnis mit Ihrem Git-Repository. Für Windows ist es (Verzeichnis C:/path/to/repo enthält .git-Verzeichnis):
Das Repository wird nach C:\some\dir\my_project geklont. Wenn Sie den Teil file:/// weglassen, ist die Option –local impliziert.
das ist ziemlich nah. was ist mit macosx- oder linux-benutzern im team?
– nyzm
7. September 2013 um 16:16 Uhr
@nyzm Ich weiß, mein Kommentar kommt etwas spät zum Spiel, aber Windows ist der seltsame Mann, Mac und Linux sind gleich. Aber wenn Sie git bash verwenden, um mit git unter Windows zu interagieren (ich glaube, das Bash-Terminal ist mit Git gepackt, aber es ist eine Weile her, seit ich Git unter Windows verwendet habe, also könnte ich mich falsch erinnern), dann ist die Funktionalität die unabhängig davon, welches Betriebssystem Sie verwenden
– StormeHawke
18. August 2014 um 13:46 Uhr
Wenn sich die beiden Repos einen Dateisystem-Namespace teilen, können Sie einfach die Dateisystempfade direkt verwenden. Andernfalls können die Entwickler problemlos lokale Git-Server ausführen, z. B. auf einem VPN, auf dem der Zugriff bereits praktikabel privat ist git daemon Der Befehl liefert problemlos Abrufe, ansonsten können Sie den ssh-Zugriff auf einem dedizierten Port einrichten, um mit etwas mehr Arbeit den gleichen Effekt zu erzielen.
Ich wollte etwas Ähnliches tun, in meinem Fall suchte ich nach einer einfachen Möglichkeit, ein Projekt auf einem eingebetteten System (unter Linux) zu synchronisieren. Früher habe ich einfach eine gemeinsame Internetverbindung eingerichtet und aus dem zentralen Repository gezogen. Aber ich fand es nicht einfach, so zu arbeiten, und manchmal ist meine Internetverbindung einfach schlecht.
Dann auf dem Host einfach ausführen git serve oder git hub aus dem Verzeichnis, in dem sich die Repositorys befinden, die Sie freigeben möchten. Nun kann auf dem Client ausgeführt werden git clone git://x.x.x.x/path/to/repo um auf das lokale Repository auf dem Host zuzugreifen!
Für Windows-Benutzer:
Verwenden Sie doppelte Anführungszeichen in den Befehlen, um die Aliase einzurichten
Stellen Sie sicher, dass Sie die Eingabeaufforderung „aufhängen“, damit sie keine Zeile ausgibt, indem Sie mit der rechten Maustaste auf die Titelleiste klicken und Bearbeiten->Markieren wählen. Andernfalls könnten Verbindungen zu Clients aufgrund eines Fehlers in Git unterbrochen werden (laut einem Kommentar im Blogbeitrag).
Josh Gust
TL;DR – Sie möchten die Schritte im Kapitel ausführen 4.4 für jede Maschine, die als Fernbedienung dient.
Wahres bekommen verteilter Arbeitsablauf ist nicht allzu schwierig, wenn Sie die Freiheit zwischen Ihrer Maschine und den Maschinen haben, mit denen Sie teilen möchten. Im Wesentlichen muss jede Maschine, die ein Repo bedient, als SSH-Git-Server fungieren.
Einige Antworten hier geben an, dass Sie einfach Benutzer zwischen den Computern hinzufügen und das Benutzerkennwort verwenden können, um SSH einzurichten. Kapitel 4.1 und 4.4 des Git-Buchs detailliert auch die Erstellung eines einzelnen Benutzers, der Zugriff auf Remote-Anfragen durch eine Liste von SSH-Schlüsseln in der gewährt ~/.ssh/authorized_keys Datei. Dies scheint ein netter konsolidierter Ansatz zum Verwalten des Zugriffs zu sein, der Ihren Kollegen gewährt wird, erfordert jedoch weiterhin das Verwalten von Benutzerschlüsseln in der Datei „authorized_keys“ für das Konsolidierungskonto. Etwas zu beachten, da dies “Ihre” Entwicklungsbox und kein richtiger “Server” ist.
Noch nie benutzt git daemon Ich kann nicht genau sagen, wie viel besser oder nicht es ist, aber es scheint eine praktikable Option zu sein, wenn Sie bereit sind, das zu verwenden git Protokoll, und haben Sie ein gutes Verständnis dafür, wie Sie es auf jeder Maschine ausführen, die ein Repository von einer sicheren Position in Ihrem Netzwerk aus bedienen soll. Es könnte hier auch hilfreich sein, darauf hinzuweisen, dass die Dokumentation Folgendes erwähnt, wenn auf Firewall-Einstellungen Bezug genommen wird:
Wenn Sie eine Firewall betreiben, müssen Sie an Port 9418 auf der Box, auf der Sie dies einrichten, auch ein Loch hineinschlagen
11371200cookie-checkGit-Push/Pull zwischen den lokalen Repositories der Teammitgliederyes
Ich habe das nie wirklich versucht, da es ein bisschen verworren erscheint, aber es könnte erreicht werden, indem man den Remote-Git-Zugriff auf jedem lokalen Computer problemlos einrichtet. (Erstellen Sie einen Git-Benutzer, fügen Sie autorisierte Schlüssel hinzu, erstellen Sie ein Fork-Repo usw.)
– Daniel Williams
16. August 2013 um 4:46 Uhr
Alles in diesem Artikel scheint mir ein Standard-Workflow zu sein. Ich sehe keinen Vorteil darin, dass Teammitglieder Änderungen von anderen Kollegen ziehen. Du könnte Richten Sie Git-Server auf allen Desktops ein, aber das ist ein großes Problem für keine wirkliche Verbesserung. Vielleicht solltest du den Autor twittern? Dem werde ich nachgehen.
– spritzen
16. August 2013 um 5:05 Uhr