Hosten eines Git Annex auf einem Server ohne installiertes Git-Annex

Hosten eines Git Annex auf einem Server ohne installiertes Git-Annex

Die Maschinen A und B hosten eine gemeinsameGit-AnhangRepository. Beide haben dieGit-AnhangProgramm installiert und ich bearbeite/übertrage/usw. Sachen manuell auf beiden Maschinen. A und B sind nicht gleichzeitig mit dem Internet verbunden, also können sie nicht direkt miteinander synchronisiert werden.

Server C ist immer eingeschaltet und verbunden (und kostenlos und ziemlich sicher). Git ist 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 sowohl von A als auch von B zu pushen und abzurufen, ohne Git-Annex und die gesamten Haskell-GHC-Abhängigkeiten auf C installieren zu müssen?

Ich habe versucht, C mit „directory“ oder „rsync“ zu verwenden.spezielle Fernbedienungen, aber dies scheint nur Dateien zu enthalten, nicht den Rest dessen, was zum Aktualisieren von A und B nach Push/Pulls benötigt wird.

Jeder Hinweis wäre sehr willkommen!

Antwort1

Mit Git- und Rsync-Zugriff auf denselben Server können Sie diesen Server verwenden, um sowohl den Verlauf (über Git-Zugriff) als auch den Schlüssel-Wert-Speicher des Anhangs (über Rsync-Zugriff) zu speichern. Diese könnten auch entkoppelt und auf einer beliebigen Anzahl verschiedener Server gespeichert werden.

Es sieht so aus, als hätten Sie sich bereits über alle Tools informiert, die Sie benötigen. Im Grunde genommen haben Sie am Ende zwei separate Remotes, die beide auf unterschiedliche Standorte auf Server-C zeigen. Das erste Remote (Server-C) ist ein normales Git-Remote zum Synchronisieren Ihres Verlaufs und aller Dinge, die direkt in das Git-Repo eingecheckt werden. Das zweite Remote ist ein spezielles Annex-Remote.

[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 dies etwa wie folgt einrichten können:

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

Damit erhalten Sie die grundlegende Funktionalität, die Sie suchen. Der einzige Nachteil ist, dass Sie zwei verschiedene Remote-Namen haben, die tatsächlich auf denselben Server verweisen. Insbesondere müssen Sie nur daran denken, das spezielle Remote (server-c-rsync) zu verwenden, wenn Sie die Argumente --to= oder --from= von get, copy und move verwenden.

Es ist möglicherweise möglich, einen einzelnen Remote-Server 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-Datei 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 ergibt sich daraus ein einzelner Remote-Remote in .git/config mit sowohl einem url= (für die normalen Git-Operationen) als auch einem annex-rsyncurl=. Ich habe dies jedoch nicht weiter getestet, um sicherzustellen, dass git annex die URL ignoriert und nur den annex-rsyncurl-Eintrag verwendet, wenn mit angehängten Dateien gearbeitet wird.

verwandte Informationen