tag - ¿Cómo cambiar el repositorio remoto para un submódulo git?
git push tag (7)
En realidad, se ha enviado un parche en abril de 2009 para aclarar el rol de gitmodule
.
Así que ahora la documentación de gitmodule aún no incluye:
El archivo
.gitmodules
, ubicado en el directorio de nivel superior de un árbol de trabajo de git, es un archivo de texto con una sintaxis que cumple con los requisitos de linkgit: git-config 1 .
[NUEVO]:
Como este archivo es administrado por Git, rastrea los registros + de los submódulos de un proyecto.
La información almacenada en este archivo se utiliza como una sugerencia para preparar la versión autorizada del registro almacenado en el archivo de configuración del proyecto.
Los cambios de registro específicos del usuario (por ejemplo, para tener en cuenta las diferencias en las URL de submódulos debido a situaciones de red) deben realizarse en el archivo de configuración, mientras que los cambios de registros a propagar (por ejemplo, + debido a una reubicación de la fuente del submódulo) deben realizarse a este archivo .
Eso confirma bastante la respuesta de Jim .
Si sigue este tutorial de git submodule , verá que necesita un " git submodule init
" para agregar las URL del repositorio de submodules a .git / config.
" git submodule sync
" se agregó en agosto de 2008 precisamente para facilitar esa tarea cuando cambia la URL (especialmente si el número de submódulos es importante).
El script asociado con ese comando es bastante sencillo:
module_list "$@" |
while read mode sha1 stage path
do
name=$(module_name "$path")
url=$(git config -f .gitmodules --get submodule."$name".url)
if test -e "$path"/.git
then
(
unset GIT_DIR
cd "$path"
remote=$(get_default_remote)
say "Synchronizing submodule url for ''$name''"
git config remote."$remote".url "$url"
)
fi
done
El objetivo sigue siendo: git config remote."$remote".url "$url"
He creado un repositorio git con un submódulo en él. Puedo decirle al submódulo mismo que cambie su ruta del repositorio remoto, pero no estoy seguro de cómo decirle al repositorio principal cómo cambiar la ruta del repositorio remoto para el submódulo.
No me sorprendería si estuviera algo fuera de suerte y tuviera que hacer las cosas manualmente, ya que incluso deleting submódulos no es fácil.
En términos simples, solo necesita editar el archivo .gitmodules, luego volver a sincronizar y actualizar:
Edite el archivo, ya sea a través de un comando git o directamente:
git config --file=.gitmodules -e
o solo:
vim .gitmodules
luego volver a sincronizar y actualizar:
git submodule sync
git submodule update --init --recursive --remote
Estos comandos harán el trabajo en el símbolo del sistema sin alterar ningún archivo en el repositorio local
git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.Submod.branch Development
git submodule sync
git submodule update --init --recursive --remote
Mire el blog para ver capturas de pantalla: Cambio de los submódulos de GIT URL / Sucursal a otra URL / sucursal del mismo repositorio
Lo que me funcionó (en Windows, utilizando git versión 1.8.3.msysgit.0):
- Actualice .gitmodules con la ruta al nuevo repositorio
- Elimine la línea correspondiente del archivo ".git / config"
- Elimine el directorio correspondiente en el directorio ".git / modules / external"
- Elimine el directorio del submódulo desprotegido (no está seguro si esto es necesario)
- Ejecutar
git submodule init
ygit submodule update
- Asegúrese de que el submódulo desprotegido esté en el compromiso correcto, y confirme eso, ya que es probable que el hash sea diferente
Después de hacer todo eso, todo está en el estado que yo esperaría. Sin embargo, me imagino que otros usuarios del repositorio tendrán un dolor similar cuando se actualicen. ¡Sería conveniente explicar estos pasos en su mensaje de confirmación!
Solo edita tu archivo .git / config . Por ejemplo; Si tiene un submódulo "común" , puede hacer esto en el super-módulo:
git config submodule.common.url /data/my_local_common
git config --file=.gitmodules -e
abre el editor predeterminado en el que puede actualizar la ruta
Solo debe poder editar el archivo .gitmodules
para actualizar la URL y luego ejecutar git submodule sync
para reflejar ese cambio en el superproyecto y su copia de trabajo.