subárboles Git
Git submodules es una forma común, ganando mucho terreno desde introdujo, con el fin de hacer frente a la situación en la que uno puede desear agregar un proyecto (repo) dentro de otro proyecto (repo), como las otras respuestas han descrito correctamente.
Sin embargo, podría argumentarse que la forma de los submódulos no es la única y ocasionalmente inadecuada, dependiendo de los flujos de trabajo establecidos, por varias razones que no voy a analizar y que se mencionan brevemente en varias páginas como this y this. El más importante es sin duda esto:
Cuando Git entra en modo de resolución de conflictos, que todavía no actualiza los punteros submódulo - lo que significa que cuando se comprometa la fusión después de la resolución de conflictos, se encuentra con el mismo problema. ..: si olvidó ejecutar la actualización del submódulo git, acaba de revertir cualquier commit de submódulo que la rama en la que se fusionó podría haber realizado.
Por supuesto, en un flujo de trabajo perfecto esto nunca sucedería.
Otra razón importante es que el popular PyCharm IDE (cuando esto está escrito, hay un muy old issue para eso) y posiblemente otros también no implementan completamente los submódulos de git y el codificador perderá entre otros la ingeniosa funcionalidad del IDE que muestra todas las líneas modificadas en el submódulo.
Por lo tanto, una forma alternativa de resolver este problema es usar subárboles. Tenga en cuenta que los subárboles y subtree merging no es exactamente lo mismo, pero esto es otra cuestión. El excelente Progit book en su segunda edición cubre brevemente este último, pero no una referencia única para el primero.
Así, en un ejemplo práctico, con el fin de hacer frente a la situación bajo interés, por no suponer un subproject
para ser consumido en un project
:
$ git remote add subproject_remote (url)
# subproject_remote is the new branch name and (url) where to get it from, it could be a path to a local git repo
$ git subtree add —-prefix=subproject/ subproject_remote master
# the prefix is the name of the directory to place the subproject
$ git commit -am "Added subproject"
# possibly commit this along with any changes
Si los cambios de subproyectos, a tirar de ellos en project
:
git subtree pull —prefix=subproject subproject_remote master
... o lo contrario (si se realizan cambios en el interior de la subproject
project
):
git subtree push —prefix=subproject subproject_remote new_branch
Un tutorial analítico pero bastante ruidoso en este link.
Esta funcionalidad también tiene algunos inconvenientes, por ejemplo, mucha gente considera que el flujo de trabajo es engorroso y más complicado, pero una vez más esto depende de los flujos de trabajo establecidos.
excelente respuesta gracias! no suponga que conoce un truco para instalarlo en un directorio secundario. debe estar en la aplicación django, que no es el directorio raíz ... – null
'git submodule add https://github.com/getyouridx/pychargify.git my-app/pychargify /' me da "my-app/pychargify/ya existe en el índice " – null
@ AdamGamble, probablemente ya tenga una carpeta' my-app/pychargify' en su repositorio, deberá eliminarla para agregar el submódulo. –