2012-07-16 11 views
7

Ich habe eine Remote-Git-Repository mit großen Geschichte und langsamen Verbindungskanal. Wo sind einige lokale Benutzer, und langsames Push/Pull nach großen Commits oder das Klonen von Grund auf für neue Benutzer sind jetzt große Probleme. Ich möchte einen lokalen Spiegel davon erstellen. Lokale Änderungen müssen für den lokalen Repo festgeschrieben und im Hintergrund mit der Remote synchronisiert werden. Ich verstehe, dass dieses Problem gefragt ist, aber ich habe noch keine Lösung gefunden (ich bin nicht Admin von Remote-Repo, ich versuche nur, lokale Arbeit damit zu vereinfachen).Git lokalen Spiegel

+0

Dieser vorherige Beitrag soll Ihnen helfen, eine Spiegelung eines Remote-Repo http://stackoverflow.com/questions/3959924/whats-the-difference-between-git-clone-mirror-and-git-clone-bare –

+1

zu erreichen Verpflichten sich nur Ihre lokalen Benutzer zum langsamen Remote-Repo oder sind andere Mitarbeiter an einem anderen Ort tätig? –

+0

@honk Ja. Lokale Benutzer, die 99% der Arbeit erledigen, benötigen Remote-Benutzer nur Lesezugriff (oder mit sehr seltenen Commits). Ich denke, dass die Geschwindigkeit der remote-lokalen Hintergrundsynchronisierung für Remote-Benutzer geeignet ist, denke ich, dass sie eine Verzögerung haben müssen, wenn die Synchronisierung noch nicht beendet ist. – exbluesbreaker

Antwort

3

Da Sie in den Kommentaren schreiben, dass die Leute hinter der langsamen Verbindung die meiste Arbeit erledigen würden, würde ich vorschlagen, dass Sie die langsame Gegenstelle als Spiegel Ihres lokalen Repos einrichten, gegen den Sie sich engagieren würden.

Zuerst mit einem nackten Klon des langsamen Fern macht auf einem lokalen Server

$ git clone --bare git://slow/repo.git 

Sie Menschen vor Ort sollten nun nur für diesen Klon begehen, nicht die langsamen Fernbedienung.

dann einen cron-Job oder etwas ähnliches drücken Änderungen in Ihrem lokalen Repo auf die langsame Seite nach oben mit

$ git push origin --mirror 

von --mirror verwenden Sie git sagen alle Zweige und Tags zu drücken.

+0

Danke! Ich teste es für meinen Test Github Repo und es funktioniert. Der vollständige Klon eines echten Remote-Repos dauert 20 Stunden oder länger, und ich wende diese Lösung in naher Zukunft an. – exbluesbreaker

+0

Ich habe festgestellt, dass diese Lösung alle Änderungen, die auf Remote-Repo ohne Zugriff durch lokale Spiegel vorgenommen werden, fallen lassen. Gibt es eine Möglichkeit, Änderungen zusammenzuführen? Commits zu Remote Repo sind selten, aber ich möchte solche Commits nicht verlieren. Z.B. Zum ersten Mal können einige lokale Entwickler aus Versehen die Übertragung zu remote Repo direkt fortsetzen. – exbluesbreaker

+0

@exbluesbreaker: Sie könnten den "- Spiegel" löschen, aber dann müssten Sie angeben, welchen Zweig Sie drücken möchten, z. 'git push origin master'. Dann würdest du wahrscheinlich auch 'tags' zu den Push-to-Push-Tags hinzufügen wollen. '--mirror' drückt alle lokalen Zweige und Tags, so dass dies automatisch geschieht (aber entfernte Änderungen überschrieben werden). –

1

sollten Sie in der Lage sein, flache Klone machen mit

git clone --depth=20 url-to-your-repo some-path 

Diese Sie mit den meisten der Geschichte nicht stören lassen sollte.