remove - git submodule pull
Qué falla al usar git worktree con submódulos de git (1)
Commit a83a66a es bastante claro al respecto:
git-submodule.sh
espera que$GIT_DIR/config
sea por árbol de trabajo, al menos para elsubmodule.* part
.
Aquí creo que tenemos dos opciones:
- actualice
config.c
para que también lea$GIT_DIR/config.worktree
(que es por worktree) además de$GIT_DIR/config
(compartido) y almacene las vars específicas de worktree en el nuevo lugar,- o actualice
git-submodule.sh
para leer / escribirsubmodule.*
directamente desde$GIT_DIR/config.submodule
(por área de trabajo).Estos toman tiempo para abordar adecuadamente. Mientras tanto, haga una nota al usuario de que no debe usar múltiples áreas de trabajo en un contexto de submódulo.
Más en general, ¿dónde poner esos submódulos?
Hay un par de opciones:
- Es posible que desee mantener
$SUB
otro lugar (quizás en un lugar central) fuera de$SUPER
. Esto también es válido para los submódulos anidados donde un superproyecto puede ser un submódulo de otro superproyecto.- Es posible que desee mantener todos
$SUB
en$SUPER/modules
(o algún otro lugar en$SUPER
)- Incluso podríamos seguir avanzando y fusionar todos
$SUB
en$SUPER
lugar de almacenarlos por separado. Pero al menos eso requeriría un espacio de nombres de referencia habilitado.
Este commit fue una respuesta para commit df56607 .
Desde el punto de vista del usuario de git, eso significa que una git submodule update --init --recursive
no sabe exactamente dónde git submodule update --init --recursive
los submódulos.
¿Están duplicados en todos los árboles de trabajo, o están centralizados en algún lugar? Esto no se ha especificado formalmente todavía.
Un año después (y con git 2.9), clacke agrega en los comentarios.
La confusión se ha resuelto, pero no de manera óptima.
Los submódulos funcionan bien ahora, por lo que puedo ver, pero cada worktree tiene su propio conjunto de repositorios de submódulos (enmotherrepo.git/worktree/<worktreename>/modules/<submodule>
) , así que si tiene un submódulo que es grande, se enfrentan a un uso grave de disco.
Git alias para manejar submódulos en subárboles :
- https://gitlab.com/clacke/gists/blob/0c4a0b6e10f7fbf15127339750a6ff490d9aa3c8/.config/git/config#L11
- https://gitlab.com/clacke/gists/blob/0c4a0b6e10f7fbf15127339750a6ff490d9aa3c8/.config/git/config#L12
El alias git wtas
espera que git wta
se defina globalmente, o al menos para todos los repositorios involucrados. Sin garantía incluida. Su mascota favorita puede contraer una infección dolorosa si los nombres de su camino tienen espacios en ellos.
Espera una estructura en su repositorio como la de un repositorio no desnudo con submódulos iniciados, por lo que si tiene un repositorio sencillo, tendrá que imitar esa configuración. Un submódulo con el nombre (no la ruta) foo
va en <your-.git-directory>/modules/foo
(no .../foo.git
). No se bloqueará si algún módulo no está presente en el repositorio, simplemente lo omite.
Hay posibilidad de mejora. No maneja los submódulos dentro de los submódulos, solo baja un nivel. Puede funcionar simplemente cambiar el submódulo git wta
call a git wtas
call, pero todavía no lo he verificado.
- clacke
Consulte también git worktree move
(con Git 2.17+, Q2 2018).
Recientemente descubrí el comando git worktree
:
El nuevo directorio de trabajo está vinculado al repositorio actual, compartiendo todo excepto los archivos específicos del directorio de trabajo, como HEAD, índice, etc.
Pero los documentos también indican
… El soporte para submódulos es incompleto. NO se recomienda realizar varias verificaciones de un superproyecto.
Sin más explicaciones sobre lo que va mal.
¿Alguien me puede aclarar sobre los problemas a esperar? Por ejemplo, ¿estaré bien si uso los árboles de trabajo separados generados de esta manera solo para los cambios que no afectan los submódulos?