¿Cómo actualizar un clon de git --mirror?

144

He creado un repositorio git para reflejar un sitio en vivo (que es un repositorio git no descubierto):

git clone --mirror ssh://[email protected]/path/to/repo

Ahora, para mantener este clon espejo actualizado con todos los cambios desde su origen remoto, ¿qué comando o comandos debo usar?

Me gustaría mantener todo actualizado: confirmaciones, referencias, ganchos, ramas, etc.

¡Gracias!

J. Bruni
fuente

Respuestas:

213

Este es el comando que debe ejecutar en el espejo:

git remote update
ralphtheninja
fuente
@Magnus Skog: Genial. ¡Gracias! ¿Esto es todo? ¿Necesito otro comando, como git fetch? ¿O git remote updatesolo lo hará todo?
J. Bruni
11
También me gustaría saber cuál es la diferencia para git fetch.
Thorbjørn Ravn Andersen
1
@ Thorbjörn (tendrás que ver con un sueco ö :)): Git fetch solo actualiza tu repositorio con referencias remotas desde el control remoto. Este comando actualiza todo en el repositorio reflejado.
ralphtheninja
44
Aquí hay una buena respuesta que explica más: stackoverflow.com/questions/3959924/…
ralphtheninja
16
'git remote update --prune' hará todo esto, pero eliminará las ramas cuando se eliminen del repositorio original.
teeks99
8

En cuanto a commits, refs, ramas y " etcétera ", la respuesta de Magnus simplemente funciona ( git remote update).

Pero desafortunadamente no hay forma de clone/ espejo / update los ganchos , como quería ...

He encontrado este hilo muy interesante sobre clonar / reflejar los ganchos:

http://kerneltrap.org/mailarchive/git/2007/8/28/256180/thread

He aprendido:

  • Los ganchos no se consideran parte del contenido del repositorio.

  • Hay más datos, como la .git/descriptioncarpeta, que no se clonan, al igual que los ganchos.

  • Los ganchos predeterminados que aparecen en el hooksdirectorio provienen deTEMPLATE_DIR

  • Existe esta templatecaracterística interesante en git.

Por lo tanto, puedo ignorar esta "cosa de clonar los ganchos" o ir por una rsyncestrategia, dados los propósitos de mi espejo (copia de seguridad + fuente para otros clones, solo).

Bueno ... me olvidaré de la clonación de ganchos y me mantendré firme git remote update.

  • Sehe acaba de señalar que no solo los "ganchos" no son gestionados por el clone/ updateproceso, sino que también se esconden, se vuelven a armar, etc. Por lo tanto, para una copia de seguridad estricta, rsynco equivalente, realmente sería el camino a seguir. Como esto no es realmente necesario en mi caso (puedo permitirme no tener ganchos, escondites, etc.), como dije, me apegaré al remote update.

¡Gracias! Mejoré un poco mi propio "git-fu" ... :-)

J. Bruni
fuente
5

Ver aquí: ¿ Git no clona todas las ramas en clones posteriores?

Si realmente quieres esto tirando ramas en lugar de push --mirror, puedes echar un vistazo aquí:

"fetch --all" en un repositorio de git bare no sincroniza las ramas locales con las remotas

Esta respuesta proporciona pasos detallados sobre cómo lograr eso con relativa facilidad:

sehe
fuente
1
pushno es una opción para mí porque necesito hacerlo en el lado receptor (desde donde está el clon); pulltampoco es una opción porque un repositorio espejo es un repositorio desnudo (sin árbol de trabajo, por lo tanto, sin "extracción"), parece que de git remote updatehecho lo hace todo (mucho más fácil que la respuesta referenciada) ... De todos modos, ¡gracias! Ciertamente hay información valiosa en las preguntas / respuestas vinculadas.
J. Bruni
1
ok, me refería a tirar como en el lenguaje habitual. Tecnología push and pull. Casi no hay otra palabra, excepto la absurda 'obtener los datos de un control remoto activamente en el cliente' que no duplicaría una palabra que tenga significado para los sistemas git o DVCS :) El segundo enlace proporcionará los detalles que desea. Tenga en cuenta, que la 'actualización remota git' no , no , de hecho, mantener el status 'espejo' sin las operaciones adicionales mencionado no
sehe
1
hmm ... lo siento (HTH) - parece que un espejo "absoluto" se logra más fácilmente a través de un simple "rsync" de la carpeta de repositorio original ... no es lo que quería, pero ... acabo de hacer algunas pruebas ... y nada parece copiar los ganchos, lo que me interesa especialmente ...
J. Bruni
1
Para su información, los propósitos de este espejo son estos: 1) completar la copia de seguridad desde donde puedo restaurar si se pierden los datos en el servidor de repositorio original; 2) en algún lugar desde donde otros puedan clonar y obtener un repositorio local de trabajo, sin tener acceso al repositorio original de origen
J. Bruni
1
Si quieres ganchos y todo, la gitosis podría (no recordar bien) tener lo que necesitas, pero yo iría con rsynceso en ese caso. Además, supongo que te estás olvidando de los escondites (mira aquí ) y también obtienes información ...?
Sehe