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?
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é:
- le fichier correspond à un motif
$GIT_DIR/exclude
. - Le fichier correspond à un motif dans un fichier
.gitignore
à l'intérieur du repo. - le fichier correspond à un motif dans un fichier
.gitignore
spécifique à l'utilisateur (spécifié pargit config --global core.excludesfile
'). - 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:
- Le
.gitmodules
fichier dans votre repo. - une entrée dans le
.git/config
de votre principal repo. - 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.
- supprimer la ligne correspondante du fichier
.gitmodules
. - supprimer la section pertinente de
.git/config
. - Exécuter
git rm --cached path_to_submodule
(pas de slash). - 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:
-
cd path_to_submodule
-
rm .git
-
cd ..
-
git add path_to_submodule
-
git status
-
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épertoireeditors/vim/vimdoclet
- Non
.git
répertoireshells/smallApps
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.
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