Nehmen wir an, ich habe einen Desktop-PC und einen Laptop, und manchmal arbeite ich am Desktop und manchmal am Laptop.
Was ist der einfachste Weg, um ein Git-Repository hin und her zu verschieben?
Ich möchte, dass die Git-Repositorys identisch sind, damit ich dort weitermachen kann, wo ich am anderen Computer geblieben bin.
Ich möchte sicherstellen, dass ich auf beiden Computern die gleichen Zweige und Tags habe.
Danke Johan
Hinweis: Ich weiß, wie man das mit SubVersion macht, aber ich bin gespannt, wie das mit git funktionieren würde. Wenn es einfacher ist, kann ich einen dritten PC als klassischen Server verwenden, mit dem die beiden PCs synchronisiert werden können.
Hinweis: Auf beiden Computern wird Linux ausgeführt.
Update :
Probieren wir also die Idee von XANI mit einem Bare-Git-Repo auf einem Server und der Push-Befehlssyntax von KingCrunch aus. In diesem Beispiel gibt es zwei Clients und einen Server.
Erstellen wir also zuerst den Serverteil.
ssh user@server
mkdir -p ~/git_test/workspace
cd ~/git_test/workspace
git --bare init
Also versuche ich von einem der anderen Computer eine Kopie des Repos mit Klon zu bekommen:
git clone user@server:~/git_test/workspace/
Initialized empty Git repository in /home/user/git_test/repo1/workspace/.git/
warning: You appear to have cloned an empty repository.
Dann gehen Sie in dieses Repo und fügen Sie eine Datei hinzu:
cd workspace/
echo "test1" > testfile1.txt
git add testfile1.txt
git commit testfile1.txt -m "Added file testfile1.txt"
git push origin master
Jetzt wird der Server mit testfile1.txt aktualisiert.
Mal sehen, ob wir diese Datei vom anderen Computer bekommen können.
mkdir -p ~/git_test/repo2
cd ~/git_test/repo2
git clone user@server:~/git_test/workspace/
cd workspace/
git pull
Und jetzt können wir die Testdatei sehen.
An dieser Stelle können wir es mit etwas mehr Inhalt bearbeiten und den Server erneut aktualisieren.
echo "test2" >> testfile1.txt
git add testfile1.txt
git commit -m "Test2"
git push origin master
Dann kehren wir zum ersten Client zurück und machen einen Git-Pull, um die aktualisierte Datei zu sehen. Und jetzt kann ich mich zwischen den beiden Computern hin und her bewegen und einen dritten hinzufügen, wenn ich möchte.
quelle
Antworten:
Ich denke, es gibt mehrere Ansätze. Ich werde nur beschreiben, wie ich damit umgehe
Ich habe ein Netbook als 24/7-Server, der mehrere Git-Repositorys enthält. Von / nach dort drücke und ziehe ich Änderungen über SSH. Für den Zugriff von außerhalb benutze ich dyndns.org. Es funktioniert gut, insbesondere weil ich mehr als zwei Systeme habe, die Zugriff auf einige der Repositorys benötigen.
Update: Ein kleines Beispiel. Nehmen wir an, mein Netbook heißt "Netbook". Ich erstelle dort ein Repository
Auf meinem Desktop werde ich dann einen Klon davon erstellen. Vielleicht füge ich auch einige Dateien hinzu
Auf meinen tragbaren Geräten werde ich (zuerst) dasselbe tun, aber für den Fernzugriff (von außerhalb meines LAN) werde ich auch die externe Adresse hinzufügen.
So funktioniert git (/ git workflows). Sie können beliebig viele Remote-Repositorys hinzufügen. Es spielt keine Rolle, ob sich zwei oder mehr auf dieselben "physischen" Repositorys beziehen. Sie benötigen keinen eigenen lokalen "Server", Sie können jeden öffentlichen Server verwenden, auf den Sie SSH-Zugriff haben. Und natürlich brauchen Sie überhaupt keinen öffentlichen Server, wenn Sie keinen Zugriff von außen benötigen. Das nackte Repository kann sich auch auf dem Desktop-System befinden, und Sie können dann ein Arbeitskopie-Repository im lokalen Dateisystem erstellen.
Dies ist die Art und Weise, wie ich damit umgehe, und ich für mich, es funktioniert ganz gut (wenn nicht perfekt;))
Etwas zu lesen: http://progit.org/ Wirklich gutes Buch.-
quelle
Ich würde das Repo von einer Box zur anderen klonen und dann die beiden Repos so einrichten, dass ich nur
git fetch
von der anderen Box aus kann.Durch das Umbenennen der Fernbedienung von
origin
in den Namen der anderen Box werden die Fernbedienungszweige leichter lesbar.Beachten Sie, dass dies mit nicht bloßen Repositorys gut funktioniert , wenn Sie nur
git fetch
(und nichtgit push
) verwenden:quelle
Einfachster Weg: zentrales Repo erstellt mit
--bare
(also keine ausgecheckten Dateien, nur .git-Zeug) oder Github"Distributed" sieht folgendermaßen aus:
Konfiguration:
git remote add desktop ssh://user@desktop/home/user/repo/path
git remote add laptop ssh://user@laptop/home/user/repo/path
Synchronisieren:
git pull laptop/desktop
(Push funktioniert nicht sehr gut auf nicht nackten Repos, da Git ausgecheckte Dateien beim Pushing auf Remote Repo nicht ändert.)Oder machen Sie Repo auf Pendrive;)
quelle
user
? Für Github muss ich nur rsa-pub-Schlüssel hinzufügen. Ich habe versucht, rsa-pub für den Klonanforderungscomputer zu know_hosts hinzuzufügen, aber das hat nicht geholfen ...Wie wäre es einfach zu benutzen
rsync
?quelle
Könnten Sie nicht einfach ein Remote-Repository auf GitHub, BitBucket oder GitLab erstellen? (Die beiden letztgenannten Unternehmen bieten unbegrenzt kostenlose private Repositories an.) Wenn Sie den Arbeitstag beendet haben, können
git push
Sie Ihre Änderungen einfach auf das Remote-Repo übertragen. Wenn Sie nach Hause kommen, können Siegit pull
Ihre Änderungen einfach von der Arbeit auf Ihren Heimcomputer übertragen. Wenn Sie zu Hause fertig sind, tungit push
Sie dies und wenn Sie zur Arbeit zurückkehren, tun Sie es auchgit pull
.quelle
Szenario 1: Ich arbeite (bearbeite Code und Dateien) ausschließlich auf PC1, möchte aber eine doppelte Kopie der Dateien (z. B. um die gesamte Codebasis aufzubauen) auch auf PC2 haben.
Synchronisieren Sie von PC1 zu PC2 in <1 Minute über einen WLAN-Hotspot, während Sie <25 MB Daten verwenden:
Ich arbeite an einem schwachen Computer, mit dem ich unterwegs bin (einem Laptop), baue aber auf einem leistungsstärkeren Computer auf, der sich an anderer Stelle befindet. Ich verwende git ständig, um mithilfe eines Skripts von meinem Laptop auf den anderen Computer zu synchronisieren. Ich tippe einfach diesen Befehl, um ihn auszuführen:
Das ist es! Normalerweise dauert es etwa 25 MB Daten und ~ 30 Sekunden bis 1 Minute, selbst wenn Sie einen WLAN-Hotspot für Mobiltelefone verwenden und an einem Repo mit einer Größe von Dutzenden von Gigabyte arbeiten . Ich bin in PC2 eingebunden, also
git log -1
überprüfe ich auf PC2, ob die Synchronisierung funktioniert hat, und führe dann den Build-Befehl aus. Funktioniert perfekt. Versuch es einmal. Siehe die Links unten für Details.Hinweis: Das geklonte Repo auf PC2 befindet sich in einem Git-Zweig mit dem Namen
somename_SYNC
. Ändern Sie das Skript entsprechend, wenn Sie möchten, dass es denselben Zweignamen hat, anstatt immer einen "SYNC-Zweig" zu verwenden. Es ist möglich, das Skript zu ändern, um auf Wunsch einen Effekt zu erzielen, der eher dem in Szenario 2 unten ähnelt. Dennoch 2 Szenario tun manuell ist nicht schwer, so dass Sie nur Szenario zu tun , 2 manuell wollen könnte , um fortzufahren. In Szenario 1 ist das automatisierte Skript am vorteilhaftesten und zeitsparendsten, da es einen einfachen und schnellen Workflow zum Ändern, Synchronisieren und Erstellen ermöglicht, bei dem "Ändern" auf PC1 stattfindet, "Synchronisieren" von PC1 ausgeführt wird, sich aber auch auswirkt PC2 und "Build" findet auf PC2 statt.Links:
Arbeiten Sie mit Eclipse über SSH an einem Remote-Projekt
https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/sync_git_repo_from_pc1_to_pc2.sh
Szenario 2: Ich arbeite (Code und Dateien bearbeiten) auf mehreren Computern und möchte in der Lage sein, dasselbe Code-Repository von jedem Computer der Welt aus zu bearbeiten:
Gehen Sie zu https://github.com und erstellen Sie ein Konto und richten Sie optional (empfohlen) SSH-Schlüssel ein .
Verwenden Sie nun die Weboberfläche, um ein neues Repository zu erstellen.
Suchen Sie die neue Klon-URL des Repositorys ssh oder https. Beispiel: [email protected]: ElectricRCAircraftGuy / eRCaGuy_dotfiles.git oder https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git .
Klonen Sie das Projekt auf PC1. Ex:
Wiederholen Sie genau diesen Klonbefehl auf PC2.
Nehmen Sie jetzt auf PC1 einige Änderungen vor, übernehmen Sie sie und übertragen Sie sie in Ihr "Remote" -Repository auf github:
Ziehen Sie jetzt auf PC2 Ihre Änderungen ein:
Jetzt können Sie Dateien auf PC2 bearbeiten, festschreiben und mit den nur 2 oben gezeigten Befehlen an github senden. Anschließend können Sie von PC1 aus
git pull
diese Änderungen ausführen , um diese Änderungen von PC2 zu übernehmen.Führen Sie diesen Vorgang nach Bedarf durch, indem Sie an PC1 ODER PC2 arbeiten, die Dateien problemlos freigeben und Ihre Arbeit auf die beiden Computer aufteilen. Denken Sie daran, dass alle Ihre Änderungen auf einem PC festgeschrieben und auf Github übertragen werden müssen, bevor Sie sie auschecken (ziehen) und auf dem anderen PC weiterarbeiten können.
Wenn Sie jemals in eine Situation geraten, in der Dateien zwischen den beiden PCs etwas nicht synchron sind, müssen Sie möglicherweise einige zusätzliche Zweige verwenden, Zusammenführungen durchführen, Konflikte lösen usw. Dann wird es der Arbeit ähnlicher mit einem kleinen Team, in dem Sie alle am selben Repo arbeiten. Google ist dein Freund. Git ist sehr, sehr mächtig und verfügt über einen Befehl, eine Reihe von Befehlen oder einen Workflow für nahezu alles.
quelle
Nun, Sie können (über Git) auf den Server schieben und ziehen, den Sie möglicherweise einrichten könnten. Oder Sie können Ihre Repos bei GitHub speichern und als Synchronisierungsbrücke verwenden.
quelle
Sie können das Repository auf jedem Ihrer Computer erstellen, wahrscheinlich auf dem Desktop, und es sowohl vom Laptop als auch von ihm aus per Push / Pull aufrufen.
quelle