¿Es suficiente "git push –mirror" para hacer una copy de security de mi repository?

Soy un desarrollador solo, trabajando en un repository local de Git. Para las copys de security, quiero enviar una copy exacta de ese repository a otro server.

¿Es suficiente hacer esto?

git push --mirror 

Lo estoy preguntando porque a veces puedo ejecutar este command dos o tres veces antes de que Git me diga "Todo al día", así que aparentemente no es un espejo exacto. Parece estar volviendo a presionar rastrear twigs …?

 $ git push --mirror Counting objects: 42, done. Delta compression using up to 8 threads. Compressing objects: 100% (30/30), done. Writing objects: 100% (30/30), 5.09 KiB, done. Total 30 (delta 17), reused 0 (delta 0) To ssh://my/repo/url c094a10..0eedc92 mybranch -> mybranch $ git push --mirror Total 0 (delta 0), reused 0 (delta 0) To ssh://my/repo/url c094a10..0eedc92 origin/mybranch -> origin/mybranch $ git push --mirror Everything up-to-date 

¿Qué está pasando y esta es una buena estrategia?

Editar: no me gusta usar algo como git bundle o files .tar.bz2 , porque me gustaría que la copy de security sea una copy de trabajo accesible. Como mi server de respaldo está conectado a la networking y siempre encendido, esta es una buena forma de acceder al repository cuando estoy de viaje.

Yo diría que esta es una estrategia perfectamente aceptable para hacer una copy de security de su repository. Debería realizar un push a su control remoto de origen para cada reference en el repository. Haciéndolo un "espejo" completo de su repository local.

EDITAR: Acabo de ver su descripción actualizada en la pregunta. Parece que git está presionando tu control remoto hacia el control remoto junto con todo lo demás. Una vez que el empuje haya finalizado, la reference remota se actualizará para reflejar que acaba de empujar hacia ella. Esto ahora estará desactualizado con el repository remoto, por lo que es necesario realizar un nuevo impulso. Si esto no te satisface Puede eliminar esta reference remota con

git push: origen / mybranch

y luego usa

git push –todo

restring que esto no empujará ninguna nueva twig que crees.

La razón por la que ves algo empujado por segunda vez es que --mirror empuja un poco más de lo que esperas. Además de tus sucursales locales, también empuja tus twigs remotas, porque el espejo lo implica todo . Entonces, cuando presionas normalmente (o con --mirror ), mybranch es empujado y origin/mybranch se actualiza para reflejar el nuevo estado en el origen. Cuando presionas con --mirror , origin/mybranch también se presiona.

Esto resulta en la extrañeza que ves, y también en una peor extrañeza cuando sacas de ese control remoto; obtendrías twigs con el nombre origin/origin/mybranch etc. Por lo tanto, generalmente es mejor usar --mirror para copys de una vez, y solo usar push normal (tal vez con --all ) para usos normales.

Para presionar siempre todas las twigs y tags, puede actualizar .git/config manera:

 [remote "origin"] url = ... fetch = ... push = +refs/heads/* push = +refs/tags/* 

Eso hará un empuje normal similar a un espejo, excepto que no eliminará las twigs que no existen en la fuente o para las actualizaciones que no avanzan rápidamente.

Desafortunadamente, no obtienes una copy exacta con push. Pierdes tu alijo .

Usualmente uso git push --all . Solo uso –mirror cuando necesito empujar twigs recién creadas o eliminé algunas twigs y no quiero nombrarlas una por una. De lo contrario, la push --all funciona normalmente cuando lo necesito.

Lo que hago es:

Configure el repository: git clone --mirror user@server:/url-to-repo.git

Luego, cuando desee actualizar la copy de security: git remote update desde la location del clon.

Esto respalda todas las twigs, incluidas las nuevas que se agregan más tarde, aunque vale la pena señalar que las twigs que se eliminan no se eliminan del clon (lo que para una copy de security puede ser una buena opción).

De http://www.garron.me/en/bits/backup-git-bare-repo.html

¿Por qué no comprimir una copy de la carpeta .git y enviarla a otro server?

Con el mismo espíritu que la respuesta de Amber , podrías:

  • presionar a una copy de security local creada con git bundle
  • copie ese file único a su server remoto.