Diese Antwort gilt derzeit nur für die Verwendung von zwei Linux-Computern [oder funktioniert sie möglicherweise auch auf einem Mac? - auf einem Mac nicht getestet] (Synchronisierung von einem zum anderen), da ich dieses Synchronisierungsskript in bash geschrieben habe. Es ist jedoch nur ein Wrapper. git
Nehmen Sie es also und konvertieren Sie es in eine plattformübergreifende Python-Lösung oder etwas anderes, wenn Sie dies wünschen
Dies beantwortet die Frage des OP nicht direkt, aber es ist so nah, dass ich garantiere, dass es die Frage vieler anderer Leute beantworten wird, die auf dieser Seite landen (meine eingeschlossen, da ich zuerst hierher gekommen bin, bevor ich meine eigene Lösung geschrieben habe), also ich poste es trotzdem hier.
Ich will:
- Entwickeln Sie dann Code mit einer leistungsstarken IDE wie Eclipse auf einem leichten Linux-Computer
- Erstellen Sie diesen Code über ssh auf einem anderen, leistungsstärkeren Linux-Computer (über die Befehlszeile, NICHT innerhalb von Eclipse).
Nennen wir den ersten Computer, auf dem ich den Code "PC1" schreibe (Personal Computer 1), und den zweiten Computer, auf dem ich den Code "PC2" erstelle. Ich benötige ein Tool, um einfach von PC1 zu PC2 zu synchronisieren. Ich habe es versucht rsync
, aber es war wahnsinnig langsam für große Repos und nahm Tonnen von Bandbreite und Daten.
Also, wie mache ich das? Welchen Workflow soll ich verwenden? Wenn Sie auch diese Frage haben, finden Sie hier den Workflow, für den ich mich entschieden habe. Ich habe ein Bash-Skript geschrieben, um den Prozess git
zu automatisieren, indem Änderungen automatisch von PC1 auf PC2 über ein Remote-Repository wie Github übertragen werden. Bisher funktioniert es sehr gut und ich bin sehr zufrieden damit. Es ist weitaus weitaus schneller als rsync
, meiner Meinung nach vertrauenswürdiger, da jeder PC ein funktionierendes Git-Repo unterhält und für die gesamte Synchronisierung weitaus weniger Bandbreite benötigt, sodass es problemlos über einen Handy-Hotspot ausgeführt werden kann, ohne Tonnen Ihrer Daten zu verwenden.
Konfiguration:
Installieren Sie das Skript auf PC1 (bei dieser Lösung wird davon ausgegangen, dass sich ~ / bin in Ihrem $ PATH befindet):
git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
cd eRCaGuy_dotfiles/useful_scripts
mkdir -p ~/bin
ln -s "${PWD}/sync_git_repo_from_pc1_to_pc2.sh" ~/bin/sync_git_repo_from_pc1_to_pc2
cd ..
cp -i .sync_git_repo ~/.sync_git_repo
Bearbeiten Sie nun die oben kopierte Datei "~ / .sync_git_repo" und aktualisieren Sie die Parameter entsprechend Ihrem Fall. Hier sind die Parameter, die es enthält:
# The git repo root directory on PC2 where you are syncing your files TO; this dir must *already exist*
# and you must have *already `git clone`d* a copy of your git repo into it!
# - Do NOT use variables such as `$HOME`. Be explicit instead. This is because the variable expansion will
# happen on the local machine when what we need is the variable expansion from the remote machine. Being
# explicit instead just avoids this problem.
PC2_GIT_REPO_TARGET_DIR="/home/gabriel/dev/eRCaGuy_dotfiles" # explicitly type this out; don't use variables
PC2_SSH_USERNAME="my_username" # explicitly type this out; don't use variables
PC2_SSH_HOST="my_hostname" # explicitly type this out; don't use variables
Git klonen Sie Ihr Repo, das Sie auf PC1 und PC2 synchronisieren möchten.
- Stellen Sie sicher, dass alle SSH-Tasten so eingerichtet sind, dass Sie sowohl von PC1 als auch von PC2 aus auf das Remote-Repo drücken und ziehen können. Hier sind einige hilfreiche Links:
- https://help.github.com/de/github/authenticating-to-github/connecting-to-github-with-ssh
- https://help.github.com/de/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
- Stellen Sie sicher, dass alle SSH-Schlüssel von PC1 bis PC2 auf SSH eingestellt sind.
Gehen Sie nun cd
in ein beliebiges Verzeichnis innerhalb des Git-Repos auf PC1 und führen Sie Folgendes aus:
sync_git_repo_from_pc1_to_pc2
Das ist es! Ungefähr 30 Sekunden später wird alles auf magische Weise von PC1 zu PC2 synchronisiert, und es wird die ganze Zeit über eine Druckausgabe ausgegeben, um Ihnen mitzuteilen, was es tut und wo es es auf Ihrer Festplatte und auf welchem Computer tut. Es ist auch sicher, weil es nichts überschreibt oder löscht, was nicht festgeschrieben ist. Es sichert es stattdessen zuerst! Lesen Sie weiter unten, wie das funktioniert.
Hier ist der Prozess, den dieses Skript verwendet (dh: was es tatsächlich tut)
- Von PC1: Überprüft, ob nicht festgeschriebene Änderungen auf PC1 vorgenommen wurden. In diesem Fall werden sie zu einem temporären Commit für den aktuellen Zweig verpflichtet. Es drückt sie dann zwangsweise zu einem entfernten SYNC-Zweig. Dann hebt es das temporäre Commit auf, das es gerade für den lokalen Zweig ausgeführt hat, und setzt das lokale Git-Repo wieder auf den genauen Stand zurück, indem es alle Dateien bereitstellt, die zum Zeitpunkt des Aufrufs des Skripts zuvor bereitgestellt wurden. Als nächstes wird eine
rsync
Kopie des Skripts auf PC2 übertragen und PC2 wird ssh
angewiesen, das Skript mit einer speziellen Option auszuführen, um nur PC2-Aufgaben auszuführen.
- PC2 macht Folgendes: Es befindet
cd
sich im Repo und prüft, ob lokale, nicht festgeschriebene Änderungen vorhanden sind. In diesem Fall wird ein neuer Sicherungszweig erstellt, der vom aktuellen Zweig getrennt ist (Beispielname: my_branch_SYNC_BAK_20200220-0028hrs-15sec
<- Beachten Sie, dass dies JJJJMMTT-HHMMhrs - SSsec ist), und alle nicht festgeschriebenen Änderungen an diesem Zweig werden mit einer Festschreibungsnachricht wie DO BACKUP OF ALL festgeschrieben UNBEABSICHTIGTE ÄNDERUNGEN AN PC2 (ZIEL PC / BUILD MACHINE). Jetzt wird der SYNC-Zweig ausgecheckt und aus dem Remote-Repository abgerufen, sofern er nicht bereits auf dem lokalen Computer vorhanden ist. Anschließend werden die neuesten Änderungen im Remote-Repository abgerufen und ein Hard-Reset durchgeführt, um zu erzwingen, dass das lokale SYNC-Repository mit dem Remote-SYNC-Repository übereinstimmt. Man könnte dies einen "harten Zug" nennen. Es ist jedoch sicher, da wir bereits alle nicht festgeschriebenen Änderungen, die wir lokal auf PC2 vorgenommen haben, gesichert haben, sodass nichts verloren geht!
- Das ist es! Sie haben jetzt eine perfekte Kopie von PC1 nach PC2 erstellt, ohne dass Sie für saubere Arbeitsverzeichnisse sorgen müssen, da das Skript das gesamte automatische Festschreiben und alles für Sie erledigt hat! Es ist schnell und funktioniert sehr gut in riesigen Repositories. Jetzt haben Sie einen einfachen Mechanismus, mit dem Sie jede IDE Ihrer Wahl auf einem Computer verwenden können, während Sie auf einem anderen Computer bei Bedarf problemlos über einen WLAN-Hotspot Ihres Mobiltelefons bauen oder testen, selbst wenn das Repository Dutzende von Gigabyte umfasst und Sie Zeit haben und ressourcenbeschränkt.
Ressourcen:
- Das ganze Projekt: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
- Weitere Links und Referenzen finden Sie im Quellcode selbst in diesem Projekt.
- Wie mache ich einen "Hard Pull", wie ich es nenne: Wie erzwinge ich "Git Pull", um lokale Dateien zu überschreiben?
Verbunden:
- Git Repository Synchronisierung zwischen Computern, wenn Sie sich bewegen?