2009-12-07 30 views
10

Mantengo dos repositorios git diferentes que necesitan compartir algunos archivos, y me gustaría que los commits en un repositorio aparezcan en el otro. ¿Cuál es una buena manera de hacer eso para el mantenimiento continuo en cada repositorio?¿Cómo puedo sincronizar archivos en dos repositorios git diferentes (no clones) y mantener el historial?

He sido uno de los responsables del perlfaq (Github), y recientemente asumí el papel de mantener la documentación central de Perl, que también está en git.

Mucho antes de comenzar a mantener el perlfaq, vivía en un repositorio de control de fuente separado. Hace poco convertí eso a git. Periódicamente, uno de los perl5-porters sincronizaría los archivos compartidos en el repositorio de perlfaq y el repo de perl. Desde que cambiamos a git, hemos sido un poco perezosos al convertir las herramientas, y ahora soy el que hace eso. Por el momento, los dos repos se mantendrán separados.

Actualmente, para sincronizar la AYUDA para una nueva versión (mensual) de Perl, estoy casi da vergüenza decir que simplemente copio los perlfaq * .pod archivos en el repositorio perlfaq las cuales cubrirás en el repositorio Perl . Eso pierde historia, etc. Además, a veces alguien hace un cambio en esos archivos en el repo de perl y termino sobrescribiéndolo (sí, ¡marque git diff idiota!). Los archivos no tienen las mismas rutas en el repositorio, pero eso es algo que podría cambiar, creo.

Lo que me gustaría hacer, en el universo mágico de los arco iris y los ponies, es extraer los objetos del repositorio perlfaq y aplicarlos en el repositorio de perl, y viceversa, para que el historial y los identificadores de confirmación correspondan en cada.

  • parches creación de obras, pero también es mucho trabajo para su gestión
  • submódulos de Git parece que sólo funcionan para tirar en todo el repositorio externo
  • no he encontrado algo así como los archivos externos de SVN, pero que iba a funcionar en ambas direcciones de todos modos
  • me gustaría simplemente ir a buscar objetos de una y les cereza recoger en la otra

¿Qué es una buena manera de manejar esto?

+0

Posible duplicado de [Cómo mover archivos de un repositorio git a otro (no a un clon), preservando el historial] (http://stackoverflow.com/questions/1365541/how-to-move-files-from-one -git-repo-to-another-not-a-clone-preservation-history) – dr0i

+0

No es realmente un duplicado.Pregunto sobre la sincronización con el desarrollo continuo en dos repositorios diferentes en lugar de un movimiento de una sola vez. –

+0

Ok, pero como parece que no hay una respuesta simple a eso, ¿qué hay de escribir la respuesta en "duplicado" y usar un git hook para ejecutar ese script? – dr0i

Respuesta

1

La estrategia de fusión del subárbol, combinada con el script git subtree, puede ayudar aquí.
Funcionaría para empujar y tirar.
Todavía tiene algunos issue with merges, aunque Git1.7.0 lo arreglará con la opción '-Xsubtree', pero vale la pena investigarlo.

+0

Estos no son subárboles, por lo que parece que esto no funcionará. Los archivos seleccionados de un directorio en un repositorio aparecen en otro directorio en otro repositorio. Ese otro directorio tiene muchos archivos que no deberían pasar al primer repositorio. –

-2

Supongo que quiere la historia de perlfaq en perl repo. Me gustaría hacer esto (en un acuerdo de recompra Perl)

git remote add perlfaq git://perlfaq... # real uri 
git checkout perlfaq/master -b perlfaq 
git checkout master # or whatever 
git merge perlfaq 

contrariamente a la creencia popular de Git hace no tiene que tener una historia común para llevar a cabo la fusión. Sé que estaba fusionando 3 repo de esta manera en Regen2. Esto puede ser doloroso la primera vez. Pero después de eso, no debería ser demasiado doloroso. Desafortunadamente, solo puede fusionarse en un solo sentido, pero probablemente pueda seleccionar parches del perl repo en perlfaq si lo desea.

+1

No quiero fusionar dos repositorios. Quiero fusionar los archivos seleccionados (objetos) en un repositorio en otro. –

Cuestiones relacionadas