Tenemos una configuración de dos niveles.¿Mantiene automáticamente un repositorio secundario en sincronización con un repositorio primario?
Tenemos un repositorio principal (llamado 'primario' a continuación).
Y un depósito secundario (denominado 'secundario' más adelante) que se ha creado de esta manera:
$ git clone --bare --shared $REPO_A/primary secondary.git
Las personas que trabajan en el repositorio de Secundaria Ver las ramas que se originan del repositorio principal como de sólo lectura, pero basan su propia ramas de estas ramas.
Queremos sincronizar el repositorio secundario con el repositorio principal una vez al día.
I.e. queremos que las confirmaciones y las nuevas ramas que se enviaron a la primaria se vuelvan visibles para las personas que trabajan en el repositorio secundario (la próxima vez que hagan una extracción).
No queremos que esto sea simétrico, es decir, la actividad contra el repositorio secundario no será visible para aquellos que trabajan desde el repositorio principal.
Idealmente me gustaría ejecutar un trabajo cron que se ejecute en la máquina con el repositorio secundario desnudo que de alguna manera obtiene datos nuevos del primario y los incluye automáticamente en el secundario.
Esperaba que pudiera haber una manera simple de hacer esto (y espero que alguien aquí me diga que sí).
Si tuviera que escribir un script para hacerlo, lo haría:
crear un clon fresca de la secundaria.
$ git clone $REPO_B/secondary $ cd secondary
Obtén todas las sucursales.
$ git branch -r | sed 's?.*origin/??'
Obtener todas las ramas en el repositorio primario.
$ git ls-remote --heads $REPO_A/primary | sed 's?.*refs/heads/??'
Para cada rama primaria para los que no tiene ya una rama secundaria correspondiente:
$ git fetch $REPO_A/primary $BRANCHNAME:$BRANCHNAME $ git push origin $BRANCHNAME:refs/heads/$BRANCHNAME
Para cada rama primaria para la que ya tengo una rama secundaria correspondiente:
$ git checkout -b $BRANCHNAME --track origin/$BRANCHNAME $ git pull $REPO_A/primary $BRANCHNAME $ git push
Como soy nuevo en git no me sorprendería si no he podido o considerar ciertos problemas fundamentales?
Y como he dicho, espero que haya una forma más sencilla de hacerlo, es decir, alguien dice "oh, no hagas todo eso, solo hazlo ...".
Esto parece lo que quiero. Gracias por los enlaces - de estos llegué a: ' $ cd secondary.git ; git --bare fetch origin '+ refs/heads/*: refs/heads/*' ' Como un hacker veterano de UNIX, siempre me gusta realmente entender en qué estoy. Sin embargo, la mayoría de la documentación de Git parece ser realmente se presentan simples casos de Alice y Bob, y cualquier cosa más compleja es el estilo del libro de cocina. ¿Puede recomendar un buen libro en profundidad o documentación web para Git? –
@George: sí: http://www.newartisans.com/2008/04/ git-from-th e-bottom-up.html, aunque http://stackoverflow.com/questions/315911/git-for-beginners-the-definitive-practical-guide ofrece muchos otros enlaces interesantes. http://tom.preston-werner.com/2009/05/19/the-git-parable.html también es bueno. – VonC
También tenga en cuenta que esas especificaciones de referencia están en su configuración de git, por lo que con 'fetch = + refs/*: refs/*', solo tiene que escribir 'git fetch' – Dustin