Hosten eines Git-Anhangs auf einem Server ohne installierten Git-Anhang

9

Die Maschinen A und B beherbergen ein gemeinsames Git-Annex- Repository. Beide haben das git-annex- Programm installiert und ich bearbeite / commit / etc-Sachen manuell auf beiden Rechnern. A & B sind nicht gleichzeitig mit dem Internet verbunden, sodass sie nicht direkt miteinander synchronisiert werden können.

Server C ist immer eingeschaltet und verbunden (und kostenlos und ziemlich sicher). Es hat Git installiert, aber ich habe keine Administratorrechte, daher kann ich Git-Annex nicht installieren.

Meine Frage: Kann ich Server C als zentralen Hub verwenden, um Git-Annex-Updates von A und B zu pushen und abzurufen, ohne Git-Annex und die gesamten Hashkell-Ghc-Abhängigkeiten von C installieren zu müssen?

Ich habe versucht, C mit speziellen Fernbedienungen "Verzeichnis" oder "Rsync" zu verwenden , aber dies scheint nur Dateien zu enthalten, nicht den Rest dessen, was zum Aktualisieren von A und B nach Push / Pull erforderlich ist.

Jeder Hinweis wäre sehr dankbar!

Vincent
quelle

Antworten:

6

Mit git- und rsync-Zugriff auf denselben Server können Sie auf diesem Server sowohl den Verlauf (über den git-Zugriff) als auch den Anhang-Schlüsselwertspeicher (über den rsync-Zugriff) speichern. Diese können auch entkoppelt und auf einer beliebigen Anzahl verschiedener Server gespeichert werden.

Sie haben anscheinend bereits alle benötigten Tools gelesen. Grundsätzlich erhalten Sie zwei separate Fernbedienungen, die beide auf unterschiedliche Speicherorte auf Server-c verweisen. Die erste Fernbedienung (Server-c) ist eine normale Git-Fernbedienung zum Synchronisieren Ihres Verlaufs und aller Elemente, die direkt in das Git-Repo eingecheckt werden. Die zweite Fernbedienung ist eine spezielle Fernbedienung im Anhang.

[remote "server-c"]
    url = [email protected]:/path/to/repo.git
    fetch = +refs/heads/*:refs/remotes/server-c/*
[remote "server-c-rsync"]
    annex-rsyncurl = example.com:/home/user/annex-rsync
    annex-uuid = ...

Sie sollten in der Lage sein, dies wie folgt einzurichten:

git remote add server-c [email protected]:/path/to/repo.git
git annex initremote server-c-rsync type=rsync rsyncurl=example.com:/home/user/annex-rsync encryption=none

Dies sollte Ihnen die grundlegende Funktionalität bieten, die Sie suchen. Der einzige Nachteil ist, dass Sie zwei verschiedene Remote-Namen haben, die wirklich auf denselben Server verweisen. Insbesondere müssen Sie nur daran denken, die spezielle Fernbedienung (server-c-rsync) zu verwenden, wenn Sie die Argumente --to = oder --from = für get, copy und move verwenden.

Es ist möglicherweise möglich, eine einzelne Fernbedienung auf beide Standorte zu richten. Ich bin mir jedoch nicht sicher, ob dies tatsächlich unterstützt wird. Die folgenden Befehle scheinen eine sinnvolle .git / config zu erstellen.

git init
git annex init "test"
git remote add server-c [email protected]:/path/to/repo.git
git annex initremote server-c type=rsync rsyncurl=example.com:/rsync/user encryption=none

Für mich führt dies zu einer einzelnen Fernbedienung in .git / config mit einer URL = (für die normalen Git-Operationen) und einem Anhang-rsyncurl =. Ich habe dies jedoch nicht weiter getestet, um sicherzustellen, dass der Git-Anhang die URL ignoriert und nur den Eintrag annex-rsyncurl verwendet, wenn mit angehängten Dateien gearbeitet wird.

Justin Geibel
quelle
Großartig! Ich werde einige Tests durchführen, aber dies sollte mich einer praktikablen Lösung ziemlich nahe bringen. Vielen Dank für Ihre Zeit und Antwort!
Vincent
Froh, dass ich helfen konnte. Ich habe gerade in der Ferienpause angefangen, Git Annex selbst zu benutzen und bin bisher sehr zufrieden damit!
Justin Geibel
Ich denke, das letzte Beispiel sollte einfach funktionieren. in der Tat, ich denke, es würde rsync Dateien an Ort und Stelle, selbst wenn es nur ein nacktes Git Repo ist ...
Anarcat