9 votes

Héberger une annexe Git sur un serveur sans git-annex installé

Les machines A et B hébergent un serveur commun annexe git le dépôt. Ils ont tous deux le git-annex installé et j'édite manuellement/commit/etc sur les deux machines. A et B ne sont pas connectés à l'internet en même temps, donc ils ne peuvent pas être synchronisés ensemble directement.

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

Ma question : Puis-je utiliser le serveur C comme un hub central pour pousser et tirer les mises à jour de git-annex depuis A et B, sans avoir à installer git-annex et toutes les dépendances de haskell ghc sur C ?

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

Tout conseil serait très apprécié !

6voto

Justin Geibel Points 76

Avec un 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 annexe clé-valeur (via l'accès rsync). Ces deux éléments peuvent également être découplés et stockés sur un nombre quelconque de serveurs différents.

On dirait que vous vous êtes déjà renseigné sur tous les outils dont vous aurez besoin. En gros, vous allez vous retrouver avec 2 remote distincts, pointant tous deux vers des emplacements différents sur server-c. La première télécommande (server-c) est une télécommande git normale pour synchroniser votre historique et tout ce qui est vérifié directement dans le repo git. La deuxième télécommande est une télécommande spéciale annexe.

[remote "server-c"]
    url = git@example.com:/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 être en mesure de configurer cela avec quelque chose du genre :

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

Cela devrait vous permettre d'obtenir la fonctionnalité de base que vous recherchez. Le seul inconvénient est que vous avez 2 noms distants différents qui pointent réellement vers le même serveur. En particulier, vous devez 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 est peut-être possible de faire pointer une seule télécommande vers les deux sites, mais je ne suis pas sûr que cela soit réellement pris en charge. Les commandes suivantes semblent créer un .git/config raisonnable.

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

Pour moi, cela se traduit par un seul remote dans .git/config avec à la fois un url= (pour les opérations normales de git) et un annex-rsyncurl=. Cependant, je n'ai pas testé cela plus avant pour m'assurer que git annex ignore l'url et utilise uniquement l'entrée annex-rsyncurl lors de l'utilisation de fichiers annexés.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X