Hospedar un Git Annex en un servidor sin git-annex instalado

9

Las máquinas A y B alojan un repositorio de anexo git común . Ambos tienen instalado el programa git-annex y edito / confirmo / etc. manualmente en ambas máquinas. A & B no están conectados a Internet al mismo tiempo, por lo que no se pueden sincronizar directamente.

El servidor C siempre está encendido y conectado (y es gratis y bastante seguro). Tiene instalado git, pero no tengo derechos de administrador, por lo que no puedo instalar git-annex.

Mi pregunta: ¿Puedo usar el Servidor C como un centro central para empujar y extraer actualizaciones de git-annex de A y B, sin tener que instalar git-annex y todas las dependencias de haskell ghc en C?

Intenté usar C con controles remotos especiales "directorio" o "rsync" , pero esto parece contener solo archivos, no el resto de lo que se necesita para actualizar A y B después de presionar / tirar.

Cualquier sugerencia sería muy apreciada!

Vincent
fuente

Respuestas:

6

Con el acceso git y rsync al mismo servidor, puede usar ese servidor para almacenar tanto el historial (a través del acceso git) como el almacén de clave-valor anexo (a través del acceso rsync). Estos también se pueden desacoplar y almacenar en cualquier número de servidores diferentes.

Parece que ya has leído todas las herramientas que necesitarás. Básicamente, terminará con 2 controles remotos separados, ambos apuntando a diferentes ubicaciones en el servidor-c. El primer control remoto (server-c) es un control remoto git regular para sincronizar su historial y cualquier cosa que se verifique directamente en el repositorio git. El segundo control remoto es un control remoto anexo especial.

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

Debería poder configurar esto con algo como:

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

Esto debería brindarle la funcionalidad básica que está buscando. El único inconveniente es que tiene 2 nombres remotos diferentes que realmente apuntan al mismo servidor. En particular, solo debe recordar usar el control remoto especial (server-c-rsync) cuando use los argumentos --to = o --from = de obtener, copiar y mover.

Es posible apuntar un solo control remoto a ambas ubicaciones, sin embargo, no estoy seguro de si esto es realmente compatible. Los siguientes comandos parecen crear 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

Para mí, esto resulta en un único control remoto en .git / config con un url = (para las operaciones normales de git) y un anexo-rsyncurl =. Sin embargo, no he probado esto más para asegurarme de que git annex ignore la url y use solo la entrada annex-rsyncurl cuando opere con archivos anexos.

Justin Geibel
fuente
¡Excelente! Haré algunas pruebas, pero esto debería acercarme bastante a una solución viable. Muchas gracias por tu tiempo y respuesta!
Vincent
Me alegro de poder ayudar. ¡Acabo de comenzar a usar git annex durante las vacaciones y hasta ahora estoy extremadamente feliz con él!
Justin Geibel
Creo que el último ejemplo debería funcionar. de hecho, creo que rsync los archivos en su lugar, incluso si es solo un repositorio git ...
anarcat