2012-05-04 17 views
30

Me encantan los submódulos de git. Además, odio los submódulos de git. Lo que me encanta de ellos es cómo te permite dividir las dependencias de manera limpia, etc. Me da el punto de hacer que apunten a un compromiso específico en un repositorio, lo hago. Pero en mi caso, estoy construyendo una biblioteca que se utilizará en otro proyecto, por lo que quiero mantenerlo en ese repositorio independiente.Los submódulos de Force Git siempre se mantienen actualizados

Sin embargo, la molestia se produce cuando estoy trabajando a diario en esta biblioteca y constantemente tengo que volver a la aplicación usando mi biblioteca para confirmar la actualización del puntero.

Entonces, ¿es posible tener un submódulo de git siempre en la cabeza del repositorio al que apunta mientras estoy constantemente actualizando y agregando a esta biblioteca?

+0

¿Esto ayuda? http://stackoverflow.com/questions/1777854/git-submodules-specify-a-branch-tag –

Respuesta

18

No, y esto es por diseño. Si hubiera una manera de apuntar un submódulo al "encabezado actual" de otro repositorio, entonces sería imposible recuperar una versión histórica (como una versión etiquetada) del repositorio principal. No sabría qué versión del submódulo verificar.

Dicho esto, puede que le interese el script git subtree. Esto ofrece una forma diferente de trabajar con submódulos que pueden ser más compatibles con su flujo de trabajo. Me acabo de acordar de esto por el reciente post on HN.

+2

sí, entiendo eso, lo que estoy diciendo es que quiero que mi repositorio padre actualice automáticamente el puntero del submódulo cada vez que lo haga hay cambios comprometidos localmente en el submódulo. Si tengo el proyecto A que tiene el submódulo X, cuando entro en el submódulo X mientras trabajo en el proyecto A, constantemente tengo que hacer 2 commits, uno en el submódulo y luego nuevamente en el padre. No es un gran problema si estás trabajando en un submódulo que no cambia mucho, pero cuando constantemente tienes que ir y venir, se vuelve realmente molesto ...Parece que debería ser capaz de hacer que mi repositorio local simplemente realice la traducción – Ben

+1

: dile a mi repositorio local que me confirme automáticamente la actualización del puntero del submódulo cuando confirme los cambios en el submódulo ... – Ben

+2

Supongo que podrías escribir un script que utiliza al comprometerse con el submódulo, que automáticamente haría una confirmación correspondiente en el módulo principal. O bien, podría escribir una secuencia de comandos que ejecute en el directorio de trabajo del módulo principal, que realice automáticamente confirmaciones para los submódulos que se hayan actualizado desde la última confirmación del proyecto principal. –

0

¿Por qué no haces cambios dentro del directorio del submódulo, que a su vez es un repositorio git? De esta manera, su aplicación siempre tendrá una biblioteca actualizada.

Advertencias:

  1. usted todavía tiene que confirmar el cambio submódulo dentro de tu repositorio de aplicaciones para poner el cambio en el control de versiones (para la aplicación).

  2. Si hay más aplicaciones que una que usan esta biblioteca, entonces esto no va a funcionar, ya que solo una aplicación estará actualizada en un momento dado.

24

Como menciono en "git submodule tracking latest", ya que se puede Git 1.8.2 (marzo de 2013) hacer un seguimiento del submódulo jefe de la rama:

git submodule add -b <branch> <repository> [<path>] 

Un SHA1 submódulo todavía se registra en el repo padres como un gitlink (special entry in the index)

Sin embargo, un git submodule update --remote actualizará que la entrada a la SHA1 juego la cabeza de una rama de la cesión temporal a distancia submódulo.

Si usted tiene un sub-módulo existente, con you can make it follow a branch:

cd /path/to/your/parent/repo 
git config -f .gitmodules submodule.<path>.branch <branch> 

cd path/to/your/submodule 
git checkout -b branch --track origin/branch 
    # if the master branch already exist: 
    git branch -u origin/master master 

cd /path/to/your/parent/repo 
git add path/to/your/submodule 
git commit -m "Make submodule tracking a branch" 
+0

Cada vez que ejecuto 'git submodule update --remote' el submódulo vuelve al commit y pierdo la referencia HEAD –

+0

Al hacer' git submodule foreach git pull' no sucede. –

+0

@MarceloFilho eso no es sorprendente teniendo en cuenta que un submódulo no realiza el pago en una sucursal. Si está configurado para seguir una rama remota, entonces 'git submodule update --remote --recursive' es el único comando necesario. Comprueba tus .gitmodules para ver si ese/esos submódulo (s) sigue (n) una rama. – VonC

Cuestiones relacionadas