Pregunta ¿Cómo cambiar el repositorio remoto para un submódulo git?


Creé un repositorio git con un submódulo. Puedo decirle al submódulo que cambie su ruta de 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 tuviera algo de suerte y tuviera que hacer cosas manualmente, ya que incluso eliminando submódulos no es fácil.


531
2018-05-27 02:35


origen


Respuestas:


Debería poder editar el .gitmodules archivo para actualizar la URL y luego ejecutar git submodule sync para reflejar ese cambio en el superproyecto y su copia de trabajo.


775
2018-05-27 05:25



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

Por favor mira el blog para ver capturas de pantalla: Cambiar los submódulos GIT URL / Branch a otra URL / rama del mismo repositorio


85
2018-06-05 20:17



Lo que funcionó para mí (en Windows, usando 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"
  • Eliminar el propio directorio de submódulos prestados (no estoy seguro de si es necesario)
  • correr git submodule init y git submodule update
  • Asegúrese de que el submódulo desprotegido tenga la confirmación correcta y confirme eso, ya que es probable que el hash sea diferente

Después de hacer todo eso, todo está en el estado que esperaría. Me imagino que otros usuarios del repositorio tendrán un dolor similar cuando vengan a actualizar; sería conveniente explicar estos pasos en su mensaje de confirmación.


59
2017-10-01 21:46



En realidad, un parche ha sido presentado en abril de 2009 para aclarar gitmodule papel.

Entonces ahora el documentación de gitmodule aún no incluye:

los .gitmodules file, ubicado en el directorio de nivel superior de un árbol de trabajo de git, es un archivo de texto con una sintaxis que coincide con los requisitos -de linkgit: git-config1.
  [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 los submódulos debido a situaciones de red) deben realizarse en el archivo de configuración, mientras que los cambios de registro que se propagarán (por ejemplo, + debido a una reubicación del origen del submódulo) se deben realizar a este archivo.

Eso más o menos confirma La respuesta de Jim.


Si sigues esto tutorial git submódulo, ves que necesitas un "git submodule init"para agregar las URL del repositorio del submódulo a .git / config.

"git submodule sync" tiene sido agregado en agosto de 2008 precisamente para facilitar esa tarea cuando cambia el URL (especialmente si la cantidad de submódulos es importante).
La secuencia de comandos asociada con ese comando es bastante simple:

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"


53
2018-05-27 05:40



En términos simples, solo necesita editar el archivo .gitmodules, luego resincronizar 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 vuelva a sincronizar y actualizar:

git submodule sync
git submodule update --init --recursive --remote

29
2018-05-29 23:27



Solo edita tu .git / config archivo. Por ejemplo; Si tienes un "común" submódulo puedes hacer esto en el supermódulo:

git config submodule.common.url /data/my_local_common

8
2018-04-01 16:39



git config --file=.gitmodules -e abre el editor predeterminado en el que puede actualizar la ruta


3