Hébergement d'une annexe Git sur un serveur sans que git-annex soit installé

9

Les machines A et B hébergent un référentiel d' annexe git commun . Ils ont tous deux installé le programme git-annex et j'ai édité / validé / etc manuellement sur les deux machines. A & B ne sont pas connectés à Internet en même temps, ils ne peuvent donc pas être synchronisés directement.

Le serveur C est toujours allumé et connecté (et gratuit et assez sécurisé). Il a installé git, mais je n'ai pas de droits d'administrateur, donc je ne peux pas installer git-annex.

Ma question: puis-je utiliser le serveur C en tant que hub central pour pousser et extraire les mises à jour de git-annex à la fois de A et de B, sans avoir à installer git-annex et toutes les dépendances de haskell ghc sur C?

J'ai essayé d'utiliser C avec des télécommandes spéciales "répertoire" ou "rsync" , mais cela ne semble contenir que des fichiers, pas le reste de ce qui est nécessaire pour mettre à jour A et B après push / pull.

Tout indice serait très apprécié!

Vincent
la source

Réponses:

6

Avec l'accès git et rsync au même serveur, vous pouvez utiliser ce serveur pour stocker à la fois l'historique (via l'accès git) et le magasin de valeurs-clés de l'annexe (via l'accès rsync). Ceux-ci peuvent également être découplés et stockés sur un nombre quelconque de serveurs différents.

Il semble que vous ayez déjà lu tous les outils dont vous aurez besoin. Fondamentalement, vous vous retrouverez avec 2 télécommandes distinctes, toutes deux pointant vers des emplacements différents sur le serveur-c. La première télécommande (server-c) est une télécommande git standard pour synchroniser votre historique et tout ce qui est vérifié directement dans le dépôt git. La deuxième télécommande est une télécommande spéciale annexe.

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

Vous devriez pouvoir configurer cela avec quelque chose comme:

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

Cela devrait vous procurer les fonctionnalités de base que vous recherchez. Le seul inconvénient est que vous avez 2 noms distants différents qui pointent vraiment vers le même serveur. En particulier, vous devez juste vous rappeler d'utiliser la télécommande spéciale (server-c-rsync) lorsque vous utilisez les arguments --to = ou --from = de get, copy et move.

Il peut être possible de pointer une seule télécommande vers les deux emplacements, mais je ne sais pas si cela est réellement pris en charge. Les commandes suivantes semblent créer un .git / config sensible.

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

Pour moi, cela se traduit par une seule télécommande en .git / config avec à la fois un url = (pour les opérations git normales) et une annexe-rsyncurl =. Cependant, je n'ai pas testé cela plus avant pour garantir que git annex ignore l'url et utilise uniquement l'entrée annex-rsyncurl lors de l'utilisation avec des fichiers annexés.

Justin Geibel
la source
Génial! Je ferai quelques tests, mais cela devrait me rapprocher d'une solution viable. Merci beaucoup pour votre temps et votre réponse!
Vincent
Heureux d'avoir pu aider. Je viens de commencer à utiliser git annex moi-même pendant les vacances et jusqu'à présent, j'en suis extrêmement satisfait!
Justin Geibel
je pense que le dernier exemple devrait juste fonctionner. en fait, je pense que ce serait rsync les fichiers en place même si c'est juste un
dépôt