rsync

2009-09-09 11 views
20

Esta pregunta probablemente se basa en mi falta de comprensión del papel de .gits y repositorios Git, pero en general:rsync

¿Puedo rsync un directorio con el contenido que he creado con git init entre máquinas ?

Tengo un repositorio en mi computadora portátil, y la única manera de alejarlo de allí es scp/rsync a un host remoto, desde donde puedo descargarlo nuevamente. ¿Podría sincronizar la estructura de directorios completa entre estos hosts?

Respuesta

8

Sí, eso es posible. IIRC, git usa un enfoque relativo. Por lo tanto, es seguro sincronizarlo con otra computadora.

+1

Es posible (con la salvedad de que los controles remotos basados ​​en el sistema de archivos y las alternativas podrían no funcionar) si no realiza ningún trabajo en el repositorio durante rsync. –

1

Sí, rsync ing la dir .git es posible y dará lugar a un clon completo del repositorio.

4

Sí, puede, pero debe hacerlo con un repositorio vacío, como se ilustra en this thread.

$ git clone --bare ./projet projet.git 
$ rsync -a --stats --delete ./projet.git/ votre.serveur:~/projets/projet.git/ 

Nota: 6+ años más tarde, Git 2.8 (marzo de 2016) será oficialmente Desaprobar y eliminar por completo el protocolo rsync git!

Ver commit 0d0bac6 (30 de enero de 2016) por Jeff King (peff).
(Fusionado por Junio C Hamano -- gitster -- en commit 9f03176 17 Feb 2016)

Resulta "git clone" sobre rsync transporte se ha roto cuando el repositorio de código fuente ha incluido referencias durante mucho tiempo, y nadie se dio cuenta ni se quejó de eso.

Commit 0d0bac6 de Jeff King (peff) tiene todos los detalles.

+2

El repositorio simple solo es necesario cuando desea ingresar a ese repositorio. Poco si solo copia el repositorio cada vez, puede hacerlo con un repositorio completo. – Ikke

+2

También puede usar rsync para el repositorio completo. No hay nada especial sobre el repositorio vacío si usa rsync. –

+0

@Ikke: es cierto, suelo hacer ese tipo de operaciones con la intención de presionarlo. – VonC

6

Puede rsync sin ningún problema, pero si tiene algunos controles remotos declarados con nombres de host que son locales para la máquina (es decir, almacenados en/etc/hosts solamente), entonces obviamente no funcionarán.

Sin embargo, ¿hay algún motivo por el que no utilice git para sincronizar el contenido?

+0

Estaba pensando que, dado que mi servidor remoto no tiene git, no pude presionarlo – svrist

+1

Es cierto, si quiere usar push a través de SSH, también debe tener git en el servidor (pero puede tenerlo instalado localmente y usarlo). '--receive-pack' option a' git-push', y una opción similar para fetch/pull/clone). Si desea enviar a través de HTTP, necesita tener solo un servidor web con WebDAV, configurado para permitir el acceso de inserción por usted (no se requiere git en el servidor). –

27

Hay algunas posibilidades:

  • Puede simplemente rsync la .git repositorio (o incluso todo el repositorio junto con el directorio de trabajo), siempre y cuando usted no tiene ninguna actividad en el repositorio durante rsync ing (mismo descargo de responsabilidad que para usar el protocolo rsync://).

  • Puede clonar o ir a buscar usando obsoletarsync protocolo (donde repositorio de URL/ubicación se ve así: "rsync://host.xz/path/to/repo.git/"). Tenga en cuenta que este protocolo está en desuso, porque si hay alguna actividad en el repositorio, puede obtener una clonación corrupta (o recuperación).

    Además, como he oído, no funcionó correctamente en presencia de áridos refs desde 2007, y nadie lo notó hasta hace poco. Desaparecerá (desapareció) en Git 2.8.

  • O puede crear git bundle, rsync o scp en otra máquina, y luego clonar o ir a buscar a partir paquete.

+1

Como observo [en mi respuesta a continuación] (http://stackoverflow.com/a/1398041/6309), el protocolo git 'rsync: //' * finalmente * desaparecerá solo en git 2.8 (marzo de 2016, 10+ después comenzando a ser declarado como "obsoleto"!) – VonC

0

El uso de rsync para .git copia de seguridad es posible, pero con una pega (al menos para mí) No se puede actualizar. La próxima vez que intente volver a sincronizarlo, obtendrá un cambio de nombre de objeto masivo ... y no podrá eliminar esos ... Si no estoy familiarizado con el sistema rsync o linux, elimino la copia de seguridad de .git antes de sincronizarlo.

que es:

> chmod -R 777 /path/of/your/backup/.git 
> rm -fr /path/of/your/backup/.git 
> rsync /path/of/your/origin/.git /path/of/your/backup/.git 

lo sé, esto es muy exigente y estúpida .. Por favor, hágamelo saber es que hay una mejor manera de hacer esto ..