156 votes

Git ne va pas initier / synchroniser / mettre à jour de nouveaux sous-modules

Voici une partie du contenu de mon .gitmodules le fichier:

[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

Toutefois, .git/config ne contient que la première:

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

Le deuxième sous-module (external/pyfacebook) a été ajouté par un autre développeur dans une branche. J'ai hérité du développement, et ont vérifié la fonctionnalité de la branche. Cependant, Git ne sera pas tirer le sous-module pour moi. J'ai essayé:

  • git submodule init
  • git submodule update
  • git submodule update --init
  • git submodule sync
  • Suppression de tous les sous-module de définitions de la .git/config et en cours d'exécution git submodule init. Il copie seulement sur l'existant précédemment sous-module et ignore la nouvelle.
  • D'entrer dans de nouveaux sous-module définitions en .git/config manuellement et en cours d'exécution git submodule update. Seulement déjà existant submodules la peine de le mettre à jour.

dans diverses combinaisons, mais git aura tout simplement pas de mise à jour de .git/config basé sur le nouveau contenu de .gitmodules, ni créer l' external/pyfacebook le dossier et tirez le sous-module de contenu.

Ce qui me manque? Est une intervention manuelle (ajout d'un sous-module d'entrée à la main à l' .git/config) vraiment nécessaire, et pourquoi?

Edit: intervention Manuelle ne fonctionne pas. Ajouter manuellement la nouvelle sous-module d'entrée d' .git/config ne pas faire une chose. Le nouveau sous-module est ignoré.

124voto

Dave James Miller Points 1920

J'ai eu ce même problème - il s'est avéré que l' .gitmodules fichier a été commis, mais le sous-module s'engager (c'est à dire l'enregistrement de la sous-module de commettre ID) ne l'était pas.

L'ajouter manuellement semblait faire l'affaire - par ex.:

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

(Même sans rien enlever .git/config ou .gitmodules.)

Puis les valider pour enregistrer l'ID correctement.

33voto

Quickredfox Points 807

Avez-vous récemment mise à niveau de version git 1.7.0.4 ? Je l'ai fait et je suis maintenant en ayant des problèmes similaires...

Edit: j'ai résolu mon problème, mais n'ont absolument pas la moindre idée d'où le problème a été. J'ai supprimé manuellement sous-module des entrées à partir de les deux .git/config et .gitmodules et rajouté mon submodules avec le ususal étapes (git sous-module ajouter etc...) ... Worksforme mais n'ajoute aucune valeur à ce fil.

4voto

dirkaholic Points 99

En fonction de la réponse de Dave James Miller, je peux confirmer que cela a fonctionné pour moi. La chose importante ici est de commettre des sous-projets s'engager ID. Juste à l'entrée .gitmodules n'était pas assez.

Ici est un commit:

https://github.com/dirkaholic/vagrant-php-dev-box/commit/d5f4c40bdbd80eefbb5ac6029823733f591435ae

3voto

joseph.hainline Points 3254

J'ai eu le même problème.

.gitmodules avaient le sous-module, mais après un git submodule init commande il n'était pas en .git/config.

Il s'avère que les développeur qui a ajouté le sous-module a également ajouté le sous-module de répertoire à l' .gitignore le fichier. Cela ne fonctionne pas.

1voto

fridh Points 1

Comme vous, j'ai trouvé que git sous-module de synchronisation n'est pas ce que vous attendez pour le faire. Seulement après avoir fait une explicite git submodule add nouveau fait un sous-module changement d'url.

Alors, j'ai mis ce script en ~/bin/git-submodule-sync.rb:

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

Et j'ai aussi utiliser la même logique sur un peu de post-recevoir git déployer des scripts.

Tout ce que je dois faire maintenant est d'éditer .gitmodules, puis exécutez ce script et il fonctionne enfin comme je le pensais git submodule sync a été censé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X