git fusiona diferentes repositorios?


79

He estado usando SVN para todos mis proyectos. A veces, el proyecto B se origina como una copia del proyecto A. Cuando el proyecto A tiene un cambio genérico, puedo usarlo svn merge Adentro del directorio B y fusionará esos cambios.

Ahora, si quisiera usar git. No me gusta tener todos mis proyectos en el mismo repositorio, ya que luego tengo que clonar todo y no puedo elegir solo un proyecto como en SVN. Pero teniendo un repositorio para cada proyecto, ¿cómo hago para hacer lo mismo que hice antes con SVN?

La pregunta es: ¿Cuál es la mejor manera de estructurarlo si quiero varios subproyectos que realmente se relacionen con un proyecto original y mantenerlos sincronizados? Y que también quiero poder verlos por separado


1
Probablemente sea mejor que eche un vistazo a git-submodule ( kernel.org/pub/software/scm/git/docs/git-submodule.html ).
Cascabel

@Jefromi pero los archivos de origen son básicamente del mismo historial, ¿esto significaría que tengo dos copias de los archivos? Creo que el submódulo es más para realizar un seguimiento de las bibliotecas externas que incluye como archivos separados (no fusionar).
Baloo

No importa, no vi que dijiste que B era una copia de A. Al leer "la pregunta es", donde dijiste "subproyectos ... relacionados con un proyecto original ... en sincronía" asumí que te referías a tomar fragmentos de ese proyecto original, pero manteniéndolos sincronizados en el metaproyecto.
Cascabel

Respuestas:


140

Si tiene dos proyectos, proj1y proj2y quiere fusionar cambios proj1en proj2, que lo haría así:

# in proj2:
git remote add proj1 path/to/proj1
git fetch proj1
git merge proj1/master # or whichever branch you want to merge

Creo que esto hace lo mismo que lo que estabas haciendo con SVN.


Pero, ¿fusionará el cambio # 2 en la pista que ya fusionamos con el cambio # 1 haciéndolo de esta manera? Tuve que volver a fusionar todos los cambios (y corregir los conflictos) para todos los cambios cada vez que se agregó un nuevo cambio si no recuerdo mal. Esto no sucedió al estilo SVN
baloo

Por supuesto, la combinación funciona como de costumbre. No es necesario "volver a fusionar todos los cambios". Esto no es más que la fusión habitual, la que usaría con un servidor distante.
Olivier Verdier

¿Qué pasa si no tengo un control remoto? Me gustaría hacer lo mismo (fusionar projA en projB) pero estoy trabajando solo localmente sin controles remotos.
L. Holanda

1
@LeoHolanda Los archivos locales cuentan como remotos en lo que respecta a git.
PyRulez

3
@LeoHolanda Tienes razón aquí. Tuve que denotar el repositorio local en formato de URL, como file: ///Users/abc/path/to/my/repo/.git
mcku
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.