tipos tag submodulos etiquetas crear git git-submodules

tag - Git no iniciará/sincronizará/actualizará nuevos submódulos



submodulos git (13)

Aquí hay parte de los contenidos de mi archivo .gitmodules :

[submodule "src/static_management"] path = src/static_management url = git://github.com/eykd/django-static-management.git [submodule "external/pyfacebook"] path = external/pyfacebook url = http://github.com/sciyoshi/pyfacebook.git

Sin embargo, .git/config solo contiene el primero:

[submodule "src/static_management"] url = git://github.com/eykd/django-static-management.git

El segundo submódulo ( external/pyfacebook ) fue agregado por otro desarrollador en una rama de características. Heredé el desarrollo ahora y he revisado la rama de características. Sin embargo, Git no extraerá el submódulo por mí. He intentado:

  • git submodule init
  • git submodule update
  • git submodule update --init
  • git submodule sync
  • Eliminando todas las definiciones de submódulo de .git/config y ejecutando el git submodule init . Solo copia sobre el submódulo existente previamente e ignora el nuevo.
  • Introducir nuevas definiciones de submódulo en .git/config manualmente y ejecutar la git submodule update . Solo los submódulos previamente existentes se molestan en actualizar.

en varias combinaciones, pero git simplemente no actualizará .git/config basándose en los nuevos contenidos de .gitmodules , ni creará la carpeta external/pyfacebook los contenidos del submódulo.

¿Qué me estoy perdiendo? ¿Es realmente necesaria la intervención manual (agregar una entrada de submódulo a mano a .git/config ) y por qué?

Editar: la intervención manual no funciona. Agregar manualmente la nueva entrada del submódulo a .git/config no hace nada. El nuevo submódulo se ignora.


Más o menos mágicamente, pero hoy ejecuté git submodule init seguido de git submodule sync seguido por git submodule update y comenzó a extraer mis submódulos ... Magic? ¡Quizás! Esta es realmente una de las experiencias más molestas con Git ...

Rasca eso. De hecho lo conseguí trabajando haciendo la git submodule update --init --recursive . Espero que esto ayude.

PD: asegúrese de estar en el directorio root git, no en el del submódulo.


¿Has actualizado recientemente a la versión de Git 1.7.0.4? Lo hice y ahora tengo problemas similares ...

Editar: arreglé mi problema pero no tengo ni idea de dónde estaba el problema. Eliminé manualmente las entradas de los submódulos tanto de .git / config como de .gitmodules y volví a agregar mis submódulos con los pasos usuales (git submodule add etc ...) ... Worksforme pero no agrega ningún valor a este hilo.


Cuando vi esto hoy, un desarrollador había movido parte del árbol a un nuevo subdirectorio y parece como si su cliente de git no registrara las reglas de Subproyecto actualizadas en el árbol, sino que simplemente fueron .gitmodules , dejando .gitmodules refiriéndose a ambos a ubicaciones obsoletas y a subproyectos que ya no existían en el árbol actual.

Al volver a agregar los submódulos y al comparar los commit shas del submódulo con los encontrados en git show $breaking_commit_sha (buscar líneas que coincidan con regexp ^-Subproject ) para ajustar las cosas que se necesiten.


Eliminar el directorio del submódulo y su contenido (carpeta "external / pyfacebook") si existe antes de git submodule add ... podría solucionar problemas.


Igual que usted, descubrí que la sincronización del submódulo de git no hace lo que espera que haga. Solo después de hacer un git submodule add explícito, git submodule add nuevamente cambia la url de un submódulo.

Entonces, puse este script en ~/bin/git-submodule-sync.rb :

https://gist.github.com/frimik/5125436

Y también uso la misma lógica en algunas secuencias de comandos de implementación de git posteriores a la recepción.

Todo lo que necesito hacer ahora es editar .gitmodules , luego ejecutar este script y finalmente funciona como creía que se suponía que era la git submodule sync .


Parece que hay mucha confusión aquí (también) en las respuestas.

git submodule init no está destinado a generar mágicamente cosas en .git / config (de .gitmodules). Está destinado a configurar algo en un subdirectorio completamente vacío después de clonar el proyecto principal, o al tirar de un compromiso que agrega un submódulo que anteriormente no existía.

En otras palabras, sigues un git clone de un proyecto que tiene submódulos (que sabrás por el hecho de que el clon comprobó un archivo .gitmodules) mediante una git submodule update --init --recursive .

No sigue el git submodule add ... con un git submodule init (o la git submodule update --init ), que se supone que no funciona. De hecho, el complemento ya actualizará el .git / config apropiado si las cosas funcionan.

EDITAR

Si alguien más agregó un submódulo de git previamente inexistente, y usted hace un git pull de esa confirmación, entonces el directorio de ese submódulo estará completamente vacío (cuando ejecute el git submodule status del git submodule status el hash del nuevo submódulo debería estar visible, pero tener un - en frente de él.) En este caso, debe seguir su git pull también con una git submodule update --init (más --recursive cuando es un submódulo dentro de un submódulo) para obtener el nuevo, previamente no -existente, submódulo prestado; justo como después de una copia inicial de un proyecto con submódulos (donde obviamente tampoco tenías esos submódulos).



Tuve el mismo problema hoy y descubrí que porque escribí git submodule init entonces tenía esa línea en mi .git/config :

[submodule] active = .

Lo eliminé y escribí:

git submodule update --init --remote

Y todo volvió a la normalidad, mi submódulo se actualizó en su subdirectorio como de costumbre.


Tuve el mismo problema, cuando git ignoró los comandos init y update , y no hace nada.

COMO ARREGLAR

  1. Su carpeta de submódulo debe ser confirmada en git repo
  2. No debería estar en .gitignore

Si se cumplen esos requisitos, funcionará. De lo contrario, todos los comandos se ejecutarán sin ningún mensaje ni resultado.

Si hiciste todo eso, y todavía no funciona:

  1. Agregue el submódulo manualmente, por ejemplo, git submodule add git@... path/to
  2. git submodule init
  3. git submodule update
  4. confirmar y enviar todos los archivos - .gitmodules y su carpeta de módulo (tenga en cuenta que el contenido de la carpeta no se confirmará)
  5. deja tu repositorio git local
  6. clonar uno nuevo
  7. asegúrese de que .git/config aún no tenga ningún submódulo
  8. Ahora, git submodule init - y verá un mensaje que el módulo registrado
  9. git submodule update : buscará el módulo
  10. Ahora mira .git/config y encontrarás el submódulo registrado

Tuve el mismo problema: resultó que el archivo .gitmodules se había confirmado, pero la confirmación real del submódulo (es decir, el registro de la identificación de confirmación del submódulo) no.

Agregarlo manualmente parecía ser el truco, por ejemplo:

git submodule add http://github.com/sciyoshi/pyfacebook.git external/pyfacebook

(Incluso sin eliminar nada de .git / config o .gitmodules).

Luego comprométalo a grabar la identificación correctamente.

Agregando algunos comentarios adicionales a esta respuesta de trabajo: Si la actualización del submódulo git init o git no funciona, entonces como se describe arriba, git submodule add url debería hacer el truco. Uno puede verificar esto por

git config --list

y uno debería obtener una entrada del submódulo que desea extraer en el resultado del comando git config --list. Si hay una entrada de su submódulo en el resultado de la configuración, entonces ahora la actualización habitual del submódulo git --init-- debería extraer su submódulo. Para probar este paso, puede cambiar manualmente el nombre del submódulo y luego actualizar el submódulo.

mv yourmodulename yourmodulename-temp git submodule update --init

Para saber si tiene cambios locales en el submódulo, se puede ver a través del estado de git -u (si desea ver cambios en el submódulo) o el estado de git --ignore-submódulos (si no desea ver los cambios en el submódulo).


Tuve un problema similar con un submódulo. Simplemente no quería ser clonado / sacado / actualizado / lo que sea.

Al intentar volver a agregar el submódulo usando el submódulo git submodule add [email protected] destination el siguiente resultado:

A git directory for ''destination'' is found locally with remote(s): origin [email protected] If you want to reuse this local git directory instead of cloning again from [email protected] use the ''--force'' option. If the local git directory is not the correct repo or you are unsure what this means choose another name with the ''--name'' option.

Entonces, traté de aplicar el comando agregar :
git submodule add --force [email protected] destination

Eso funcionó en mi caso.


Yo tuve el mismo problema.

.gitmodules tenía el submódulo, pero después de un comando git submodule init no estaba en .git/config .

Resulta que el desarrollador que agregó el submódulo también agregó el directorio del submódulo al archivo .gitignore . Eso no funciona.


git versión 2.7.4. Este comando actualiza el código local git submodule update --init --force --remote