practices - git remove tag
Anidados repositorios git? (6)
¿Puedo anidar repositorios git? Yo tengo:
/project_root/
/project_root/my_project
/project_root/third_party_git_repository_used_by_my_project
¿Tiene sentido iniciar / agregar / project_root para facilitar la administración de todo a nivel local o tengo que administrar my_project y el de terceros por separado?
Coloque sus bibliotecas de terceros en un repositorio separado y use submódulos para asociarlos con el proyecto principal. Aquí hay un recorrido:
http://git-scm.com/book/en/Git-Tools-Submodules
A la hora de decidir cómo segmentar un repos, solía decidir en función de la frecuencia con que los modificaría. Si se trata de una biblioteca de un tercero y solo los cambios que realiza están actualizando a una versión más nueva, entonces definitivamente debe separarla del proyecto principal.
Es posible que esté buscando la característica Git llamada submodules . Esta característica lo ayuda a administrar repositorios dependientes que están anidados dentro de su repositorio principal.
Solo para completar:
Hay otra solución, recomendaría: fusión de subárboles .
A diferencia de los submódulos, es más fácil de mantener. Usted crearía cada repositorio de la manera normal. Mientras esté en su repositorio principal, desea fusionar el maestro (o cualquier otra rama) de otro repositorio en un directorio de su directorio principal.
$ git remote add -f OtherRepository /path/to/that/repo
$ git merge -s ours --no-commit OtherRepository/master
$ git read-tree --prefix=AnyDirectoryToPutItIn/ -u OtherRepository/master
$ git commit -m "Merge OtherRepository project as our subdirectory"`
Luego, para extraer el otro repositorio en su directorio (para actualizarlo), use la estrategia de fusión de subárboles:
$ git pull -s subtree OtherRepository master
Estoy usando este método desde hace años, funciona :-)
Se puede encontrar más información acerca de esta forma, incluida la comparación con los módulos secundarios en este documento git howto .
Usted podría agregar
/project_root/third_party_git_repository_used_by_my_project
a
/project_root/.gitignore
eso debería evitar que el repositorio anidado se incluya en el repositorio padre, y puede trabajar con ellos de forma independiente.
Pero: si un usuario ejecuta git clean -dfx en el repositorio principal, eliminará el repositorio anidado ignorado. Otra forma es enlazar simbólicamente la carpeta e ignorar el enlace simbólico. Si luego ejecuta git clean, el enlace simbólico se elimina, pero el repositorio "anidado" permanecerá intacto, ya que realmente reside en otro lugar.
Yo usaría un repositorio por proyecto. De esta forma, la historia se vuelve más fácil de navegar.
También verificaría la versión de la biblioteca de terceros que estoy usando, en el repositorio del proyecto que la usa.
git-subtree te ayudará a trabajar con múltiples proyectos en un solo árbol y mantener un historial separable para ellos.