2012-03-26 23 views
11

Tengo un repositorio git con submódulos en el directorio projects/myRepo y quiero cambiar el nombre del directorio a projects/my-repo.¿Cómo puedo renombrar un repositorio de git con submódulos?

Según la pregunta this, simplemente se puede hacer con mv. Sin embargo, en un acuerdo de recompra con submódulos git me dice

fatal: No es un repositorio git: proyectos/myrepo/.git/ruta/a/submodule```

incluso para git status.

submódulo de configuración:

[submodule "path/to/submodule"] 
    path = path/to/submodule 
    url = https://github.com/user/projectName.git 

De alguna manera el 'camino interior' para el submódulo no se actualiza ?! ¿Hay alguna manera de decirle a git que actualice estas rutas de submódulos?

+0

Eso debería funcionar. ¿Qué hay en el archivo .gitmodule? – Weston

+0

@Weston, por favor vea mi pregunta actualizada. Pero incluso cuando elimino esta sección del archivo .gitmodules, aparece el mismo error. Cuando cambio el nombre del directorio padre al nombre original, git ya no se queja. – schmunk

+0

Hmm .. Intenté hacer un repositorio de prueba con un submódulo. Luego lo cloné, inicié y actualicé el submódulo en el clon, y luego renombré el clon con mv. Todo parece funcionar como se espera ...? – Weston

Respuesta

0

Desde Weston 's prueba (clon, init y actualización de un submódulo de un acuerdo de recompra clonado) funcionó como se esperaba al cambiar el nombre del directorio que incluye dicho submódulo, sospecho que algo debe haber sido un error en el submódulo .git sí en su Git originales submódulo de repositorio.

Puede comparar/buscar cualquier archivo que haga referencia a 'myRepo' en ese primer submódulo.
También puede comparar el contenido de los dos submódulos (el primero que trató de cambiar el nombre, y el segundo incluye en el repositorio que ha clonado)

+0

Tenga en cuenta los nombres aquí .. Yo, no el OP, hice dicha prueba. :-) Pero quizás OP deba hacer la misma prueba para verificar su instalación. – Weston

+0

@Weston lo siento, no estaba completamente despierto cuando escribí esto;) – VonC

+0

No pude reproducir el problema, así que creo que arruiné algo mientras refacturaba el proyecto. Si tuviera el tiempo investigaré el repositorio roto, hasta entonces creé un nuevo clon, que funciona bien. Gracias por tu ayuda. – schmunk

2

También tuve el mismo error después de cambiar mi directorio del proyecto. Tengo un proyecto iOS 6 XCode 4 pero eso no debería importar.

Para cada submódulo, debe cambiar la ruta absoluta en la que cree que está. La ruta se establece en el archivo .git para ese submódulo. .git en un submódulo es un archivo en oposición a un directorio en un directorio estándar de git.

Para cada submódulo, cambie la línea .gitdir en el archivo .git. Aquí está un ejemplo de mi proyecto:

del archivo: /path/to/project/submodules/RestKit/.git

Antes gitdir: /path/to/project//.git/modules/ submódulos/RestKit

Después gitdir: /path/to/project//.git/modules/submodules/RestKit

+2

También tuve que cambiar mi ruta ** worktree ** en .git/modules/path/to/project/submodules/RestKit/config – tuxinaut

3

hice la experiencia exactamente el mismo comportamiento. Logré solucionarlo borrando directorios con submódulos, recreándolos como directorios vacíos con el nombre correcto y luego ejecutando git submodule update --init para reiniciarlos. Todo arreglado ahora. Probablemente algunos problemas de permisos (recuperé esos directorios desde una copia de seguridad anterior y los permisos sobre ellos a veces son extraños).

0

Hoy he tenido el mismo problema al cambiar el nombre del sub-módulo y, finalmente, me fijo mediante el uso de los siguientes pasos:

asumir el antiguo nombre de módulo es old/module y el nuevo es new/module/path

  1. en el raíz de la cesión temporal (repo_root), mv old/module new/module/path
  2. ir a .git/modules
    1. mv old/module new/module/path (cree primero la carpeta si es necesario)
    2. cambie new/module/name/config: actualice la entrada worktree. Debe ser la ruta relativa de este archivo de configuración para repo_root/new/module/path
  3. ir a repo_root y editar new/module/path/.git, cambiar el gitdir a la ruta relativa de este archivo a repo_root/.git/modules/new/module/path
  4. cambio .git/config del reporto maestro: encontrar la línea que contiene [submodule "old/module"] y actualiza a [submodule "new/module/path"]
Cuestiones relacionadas