Impossible de suivre les fichiers dans les sous-modules Git

Problème: pour ajouter des fichiers à ./shells/smallApps/* Git ./.git/ quand je n'ai pas les fichiers à ./.git/info/exclude , ni à aucun .gitignore -fichiers.

cette question est basée sur ce traité où le problème n'est pas entièrement résolu.

je cours

$git status                                                                                                                                          ~/bin
# On branch master
nothing to commit (working directory clean)
$git ls-files                                                                                                                                        ~/bin
Screen/dev/vim-open.screen
--- cut ---

je remarque que je n'ai pas les fichiers "coquilles/smallApps/*" à mon Git

$ls shells/smallApps/                                                                                                                                ~/bin
devTodo     extract     
                                                                                                                                             ~/bin

je veux les ajouter à mon Git en exécutant

$git add shells/smallApps/devTodo shells/smallApps/extract
fatal: Path 'shells/smallApps/devTodo' is in submodule 'shells/smallApps'
$git add .         

je note que les fichiers ne sont pas ajoutés à mon Git pour une raison quelconque telle que

$git status                                                                                                                                          ~/bin 
# On branch master
nothing to commit (working directory clean)

je n'ai pas les fichiers .git/info/exclure ni à l' .gitignore -fichiers.

que signifie le dernier avertissement?

49
demandé sur Community 2009-07-06 02:34:26

3 réponses

mise à JOUR

il y a deux raisons générales pour lesquelles Git ignorera un fichier: gitignore et submodules .

pour être plus précis, les conditions suivantes obligeront Git à ignorer un fichier lorsque git add "est invoqué:

  1. le fichier correspond à un motif $GIT_DIR/exclude .
  2. Le fichier correspond à un motif dans un fichier .gitignore à l'intérieur du repo.
  3. le fichier correspond à un motif dans un fichier .gitignore spécifique à l'utilisateur (spécifié par git config --global core.excludesfile ').
  4. Le fichier fait partie d'un sous-module.

forçant " git add "sur un fichier ignoré:

vous pouvez vérifier si un fichier particulier est ignoré en invoquant git add full/path/to/file '.

la page de manuel indique que "Si méconnue de fichier est spécifié sur la ligne de commande, la commande échouera avec une liste de fichiers ignorés."

Si le fichier est ignoré, vous pouvez le forcer à être ajouté avec " git add --force full/path/to/file '.

Instructions pour éliminer un sous-module référence:

Comme indiqué dans une réponse précédente, shells/smallApps est un sous-module dans votre référentiel.

Si le fichier fait partie d'un sous-module, la situation est plus complexe. Vous ne pouvez pas modifier le contenu du sous-module à partir du projet principal.

si vous voulez éliminer la référence du sous-module et suivre directement les fichiers dans votre rapport principal, il y a plusieurs étapes qui doivent être effectuées. Vous ne pouvez pas simplement supprimer le ".git" répertoire de la sous-module. Il y a trois liens entre votre dépôt principal et le sous-module:

  1. Le .gitmodules fichier dans votre repo.
  2. une entrée dans le .git/config de votre principal repo.
  3. toutes les commits relatives au sous-module dans votre histoire principale de repo.

Par cette SI la question , vous devez effectuer les étapes suivantes pour supprimer complètement le sous-module:

NOTE: Si une autre branche dépend de ce sous-module, puis supprimer il peut corrompre votre dépôt! C'est une opération dangereuse...à utiliser avec prudence.

  1. supprimer la ligne correspondante du fichier .gitmodules .
  2. supprimer la section pertinente de .git/config .
  3. Exécuter git rm --cached path_to_submodule (pas de slash).
  4. Commit

les fichiers qui faisaient partie du sous-module ne sont plus tracés et vous peut décider de les conserver ou de les supprimer tel que désiré (avec la seule réserve mentionnée ci-dessous).

si vous n'avez pas besoin de ces fichiers, vous pouvez simplement les supprimer.

avertissement: si vous voulez conserver ces fichiers (que vous semblez vouloir), vous devez supprimer manuellement le répertoire .git du dossier submodule:

  1. cd path_to_submodule
  2. rm .git
  3. cd ..
  4. git add path_to_submodule
  5. git status
  6. git commit

mise à jour:

demande de renseignements complémentaires:

pour faciliter le débogage de ce numéro, veuillez afficher la sortie de la session complète suivante de commandes:

cd to the top-level directory in your repo
ls -al
cat .git/config
find . -name ".git*"
git status
git add editors
git add shells
git status

sur la base de la description de ce que vous avez fait jusqu'à présent, j'attends de voir:

  • Non "1519120920 de fichier" n'importe où
  • un seul .git répertoire (trouvé à la racine de votre repo)
  • Non .git répertoire editors/vim/vimdoclet
  • Non .git répertoire shells/smallApps
95
répondu Tim Henigan 2017-05-23 11:33:17

je vois que vous avez git add qui parle de sous-modules. Avez-vous des dépôts Git imbriqués? Faites ceci:

$ find . -name .git

combien de répertoires .git sont répertoriés? S'il y en a plus d'un, alors vous avez plusieurs dépôts imbriqués et cela pourrait être une cause de cette confusion.

2
répondu Greg Hewgill 2009-07-05 22:50:27

vous devriez envisager d'afficher cette question sur la liste de diffusion Git ( git@vger.kernel.org ). Vous obtiendrez probablement une réponse plus rapide et complète.

Si vous décidez d'y poster, assurez-vous d'inclure:

  • une description de ce que vous tentez d'accomplir.
  • Une description du problème que vous avez rencontré.
  • un journal de session complet montrant:
    • cd le répertoire de haut niveau dans votre dossier
    • ls -al
    • cat .git/config
    • find . -name ".git*"
    • git status
    • git add editors
    • git add shells
    • git status
2
répondu Tim Henigan 2009-07-09 17:33:52