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!

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

Debería poder configurar esto con algo como:

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

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 git@example.com:/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.


¡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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.