Git Repository Synchronisierung zwischen Computern, wenn Sie sich bewegen?

88

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.

Johan
quelle
Synchronisierungsskript zur Automatisierung der schnellen und kostengünstigen Synchronisierung von git von PC1 zu PC2, selbst über einen WLAN-Hotspot für Mobiltelefone (in diesem Anwendungsfall hunderte Male schneller als rsync!): Stackoverflow.com/questions / 4948190 /…
Gabriel Staples

Antworten:

27

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

$ ssh [email protected]
$ cd ~/git
$ mkdir newThing
$ cd newThing
$ git init --bare

Auf meinem Desktop werde ich dann einen Klon davon erstellen. Vielleicht füge ich auch einige Dateien hinzu

$ git clone [email protected]:/home/username/git/newThing
$ git add .
$ git commit -m "Initial"
$ git push origin master

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.

$ git clone [email protected]:/home/username/git/newThing
$ git remote add externalName [email protected]:/home/username/git/newThing
$ git pull externalName master

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.

$ mkdir myRepo; cd myRepo
$ git init --bare
$ cd /path/to/myProject
$ git remote add origin /path/to/myRepo
$ git add .; git commit -m "Initial"; git push origin master

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.-

KingCrunch
quelle
Wie würde das aussehen, wenn Sie verschiedene Wege in das Repo einschlagen? Möchten Sie Ihre Antwort anhand eines Beispiels verdeutlichen?
Johan
Vielen Dank, diese Beispiele haben viel geklärt :)
Johan
6

Ich würde das Repo von einer Box zur anderen klonen und dann die beiden Repos so einrichten, dass ich nur git fetchvon der anderen Box aus kann.

Durch das Umbenennen der Fernbedienung von originin 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 nicht git push) verwenden:

[user@foo repo]$ git fetch -v bar

[user@bar repo]$ git fetch -v foo
ndim
quelle
5

Einfachster Weg: zentrales Repo erstellt mit --bare(also keine ausgecheckten Dateien, nur .git-Zeug) oder Github

"Distributed" sieht folgendermaßen aus:

Konfiguration:

  1. Auf dem Laptop: git remote add desktop ssh://user@desktop/home/user/repo/path
  2. Auf dem Desktop: 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;)

XANi
quelle
Ich habe versucht, ein --bare Repo zu verwenden, aber ich kann nicht den gesamten Workflow richtig ausführen.
Johan
Ich fange gerade mit git an und gehe von lokalem git zu github und zurück, was ich bisher tun kann, aber die Computer-zu-Computer-Methode kann ich nicht zum Laufen bringen. Dumme Frage - für welche Anmeldeinformationen verwende ich 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 ...
Dave
Dies ist für mich die einfachste Möglichkeit, zwischen zwei lokalen Computern zu synchronisieren, ohne ständig auf einen Remote-Server zuzugreifen.
Johnzachary
1

Wie wäre es einfach zu benutzen rsync?

seriyPS
quelle
3
Ich habe rsync jahrelang verwendet, um drei Server synchron zu halten. Es funktioniert, aber rsync bietet Ihnen keine Möglichkeit, Änderungen zurückzusetzen, sobald die Synchronisierung abgeschlossen ist. Ich habe auf diese Weise auch so viele Dateien verloren, weil ich die Trockenlaufausgabe nicht nah genug gelesen habe und rsync so eingestellt war, dass Dateien gelöscht wurden, die nicht auf dem Master vorhanden waren. Ich bin seitdem zu Git gewechselt und finde es viel sicherer, wichtige Verzeichnisse synchron zu halten.
Cloudkiller
1

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 pushSie Ihre Änderungen einfach auf das Remote-Repo übertragen. Wenn Sie nach Hause kommen, können Sie git pullIhre Änderungen einfach von der Arbeit auf Ihren Heimcomputer übertragen. Wenn Sie zu Hause fertig sind, tun git pushSie dies und wenn Sie zur Arbeit zurückkehren, tun Sie es auch git pull.

Student
quelle
1

Was ist der einfachste Weg, um ein Git-Repository hin und her zu verschieben [zwischen 2 Computern]?

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:

sync_git_repo_from_pc1_to_pc2

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:

  1. Vollständige Anweisungen zur Einrichtung und Installation finden Sie hier:
    Arbeiten Sie mit Eclipse über SSH an einem Remote-Projekt
  2. Readme, Dokumentation und Repo hier: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/README_git-sync_repo_from_pc1_to_pc2.md .
  3. Das genaue fragliche Skript finden Sie hier:
    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:

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.

  1. Gehen Sie zu https://github.com und erstellen Sie ein Konto und richten Sie optional (empfohlen) SSH-Schlüssel ein .

  2. Verwenden Sie nun die Weboberfläche, um ein neues Repository zu erstellen.

    1. Ab dem Jahr 2020 oder früher erlaubt GitHub auch kostenlose private Repositories , sodass dies auch für private Closed-Source-Projekte gut funktioniert.
  3. 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 .

  4. Klonen Sie das Projekt auf PC1. Ex:

     git@github.com:ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
     cd eRCaGuy_dotfiles
  5. Wiederholen Sie genau diesen Klonbefehl auf PC2.

  6. Nehmen Sie jetzt auf PC1 einige Änderungen vor, übernehmen Sie sie und übertragen Sie sie in Ihr "Remote" -Repository auf github:

     # edit some files, then do the following
     git add -A  # stage ("add") all changed files to be committed 
     git commit  # commit them
     git push    # push them to your remote github repo
  7. Ziehen Sie jetzt auf PC2 Ihre Änderungen ein:

     # pull all changes from github (which includes the changes
     # you just pushed from PC1) to PC2
     git pull  
  8. 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 pulldiese Änderungen ausführen , um diese Änderungen von PC2 zu übernehmen.

  9. 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.

  10. 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.

Gabriel Staples
quelle
0

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.

Mipadi
quelle
0

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.

Kerhong
quelle