Problème: pour ajouter des fichiers à ./shells/smallApps/*
à Git à ./.git/
lorsque je n'ai pas les fichiers à ./.git/info/exclude
ni à aucun .gitignore
-des dossiers.
Cette question est basée sur cette bande de roulement où le problème n'est pas résolu complètement.
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 note que je n'ai pas les fichiers "shells/smallApps/*" sur 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 telle que
$git status ~/bin
# On branch master
nothing to commit (working directory clean)
Je n'ai pas les fichiers dans .git/info/exclude ni dans .gitignore -files.
Que signifie le dernier avertissement?
[~ # ~] 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é:
$GIT_DIR/exclude
..gitignore
À l'intérieur du référentiel..gitignore
Spécifique à l'utilisateur (spécifié par 'git config --global core.excludesfile
').git add
' Sur un fichier ignoré:Vous pouvez vérifier si un fichier particulier est ignoré en appelant 'git add full/path/to/file
'.
La page de manuel indique que "Si un fichier ignoré est explicitement 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
'.
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 souhaitez supprimer la référence du sous-module et suivre directement les fichiers dans votre référentiel principal, plusieurs étapes doivent être effectuées. Vous ne pouvez pas simplement supprimer le répertoire ".git" du sous-module. Il existe trois liens entre votre référentiel principal et le sous-module:
.gitmodules
Dans votre référentiel principal..git/config
De votre référentiel principal.Par cela connexe SO question , vous devez effectuer les étapes suivantes pour supprimer complètement le sous-module:
REMARQUE: Si une autre branche dépend de ce sous-module, sa suppression peut corrompre votre référentiel! C'est une opération dangereuse ... à utiliser avec prudence.
.gitmodules
..git/config
.git rm --cached path_to_submodule
(Pas de barre oblique de fin).Les fichiers qui faisaient partie du sous-module ne sont plus suivis et vous pouvez décider de les conserver ou de les supprimer comme vous le souhaitez (avec la seule mise en garde mentionnée ci-dessous).
Si vous n'avez pas besoin de ces fichiers, vous pouvez simplement les supprimer.
Avertissement: Si vous souhaitez conserver ces fichiers (que vous semblez vouloir), vous devez supprimer manuellement le répertoire .git
Du sous-module dossier:
cd path_to_submodule
rm .git
cd ..
git add path_to_submodule
git status
git commit
MISE À JOUR:
Pour aider au débogage de ce problème, veuillez publier la sortie de la session complète de commandes suivante:
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, je m'attends à voir:
.gitmodules
N'importe où.git
(Trouvé à la racine de votre dépôt).git
Dans editors/vim/vimdoclet
.git
Dans shells/smallApps
Je vois que tu as git add
dire quelque chose sur les sous-modules. Avez-vous des référentiels Git imbriqués? Faites ceci:
$ find . -name .git
Combien .git
les répertoires sont-ils répertoriés? S'il y en a plusieurs, vous disposez de plusieurs référentiels imbriqués et cela pourrait être à l'origine d'une partie de cette confusion.
Vous devriez envisager de publier cette question dans la liste de diffusion Git ([email protected]
). Vous obtiendrez probablement une réponse plus rapide et complète.
Si vous décidez de poster là-bas, assurez-vous d'inclure:
ls -al
cat .git/config
find . -name ".git*"
git status
git add editors
git add shells
git status