impossible d'ajouter un dossier dans git

21

J'ajoute un nouveau dossier (en fait je l'ai cloné à partir d'un autre dépôt, et j'ai oublié cela), puis j'ai fait quelques changements là-bas. De plus, j'ai fait beaucoup de changements dans d'autres endroits, quand j'ai essayé de faire git add

# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   protected/ext/SpecificFolder (modified content)
#

Ensuite, je me souviens qu'il y avait peut-être un dossier .git (parce que précédemment j'avais git clone là-bas). Je suis allé dans ce dossier et j'ai également supprimé les fichiers inutiles (dossiers) et le dossier .git. J'ai vérifié le statut de git, rien d'étrange. Ensuite, validez et passez à une autre branche et tout à coup, je constate que ce dossier n'a pas été ajouté au dernier commit. En fait, le dossier a été ajouté mais les fichiers à l'intérieur ont été ignorés. Maintenant, même lorsque j'essaie de faire git addpour ce dossier rien ne se passe et git statusne montre aucun changement :(

Que puis-je faire ?

user1016265
la source
6
Au cas où quelqu'un d'autre se retrouverait sur cette page avec le problème que j'ai rencontré: je n'ai pas pu ajouter de fichiers dans un sous-dossier à Git. Plus tard, j'ai découvert que ce sous-dossier avait son propre .gitréférentiel et que des fichiers étaient ajoutés à ce référentiel au lieu du référentiel dans le dossier principal. Même dans l'interface graphique de Git, ce sous-dossier est apparu sous forme de fichier plutôt que sous forme de dossier.
Nav

Réponses:

29

Git ne suit pas les répertoires; mais juste les fichiers qu'ils contiennent.

Il semble que vous ayez un motif d'ignorance qui addne fait rien. Vous pouvez voir les fichiers ignorés avec git status --ignored; ils peuvent ensuite être suivis avecgit add --force protected/ext/SpecificFolder

Bryan
la source
1
Non, ce n'est pas présent git status --ignored, je pense qu'il est lié au sous
user1016265
1
Cette commande nous a sauvé la vie. Sans cela, je n'aurais jamais compris quel répertoire a été ignoré.
IgorGanapolsky
wow ..... Je me sentais totalement stupide de lire ce fait après avoir utilisé git pendant un certain temps maintenant ^^
XandruCea
1
Aha, enfin. C'était mon problème. J'avais copié .gitignore du parent et dans les sous-modules. J'ignorais 'config /' et plus tard j'ai créé un répertoire sous le répertoire source nommé config. Impossible d'ajouter de la cource. Problème résolu maintenant merci :-)
Avec
7

Git ne suit pas les répertoires VIDE. Si vous avez un projet avec plusieurs couches de sous-répertoires, git suit en fait les répertoires avec leurs fichiers. Si ce n'était pas le cas, ce serait un seul référentiel plat de fichiers.

Ed Mangini
la source
Wow, c'est une chose si simple mais putain. J'ai lu ceci et je me suis dit "oh mon Dieu c'est exactement ça"
Brian dit Réintègre Monica
3

Il m'est arrivé de faire exactement ce que cet utilisateur a fait: ajouter un référentiel git existant à l'intérieur d'un autre.

Le symptôme était que git a reconnu ce répertoire en tant que fichier et n'a donc pas pu ajouter les fichiers du répertoire.

Pour résoudre cette question, j'ai supprimé le .gitdossier dans le dossier, déplacé ce dossier dans un autre répertoire, effacé l'index, supprimé le répertoire où dans mon référentiel, puis j'ai pu ajouter le répertoire correctement.

La morale de ceci est: n'ajoutez pas de référentiel à l'intérieur d'un autre.

madmin
la source
5
Il peut également être corrigé en exécutantgit rm --cached path_to_submodule
Victor Marchuk
2

Il y a une meilleure réponse ici: l' utilisation de .gitkeep

TL; DR, ajoutez un .gitkeepfichier à votre répertoire vide

Yarh
la source
0

Essayez d'ajouter un fichier dans ce répertoire.

$ git add my-dir/index.html

Si vous voyez une sortie comme celle-ci:

The following paths are ignored by one of your .gitignore files:
my-dir/index.html
Use -f if you really want to add them.
fatal: no files added

Il y a une règle dans l'un de vos gitignores qui vous empêche d'ajouter ce répertoire.

Gayan Weerakutti
la source
0

J'ai trouvé des effets secondaires similaires après avoir essayé de convertir ce qui était un sous-module en un sous-dossier normal.

L'ajout du dossier que j'essayais de convertir semblait fonctionner, mais il s'avère que les fichiers qu'il contenait n'ont pas été réellement ajoutés.

Essayer d'ajouter spécifiquement un fichier à l'intérieur m'a donné un meilleur avertissement

git add sites/all/modules/contrib/transclusion/transclusion.module 
fatal: Pathspec 'sites/all/modules/contrib/transclusion/transclusion.module' is in submodule 'sites/all/modules/contrib/transclusion'
  • donc c'était lié à la façon dont j'avais essayé de supprimer manuellement l'ancien sous-module, car il n'y avait pas de processus bien documenté pour le faire correctement. - Je venais de le supprimer des .gitmodules. D'autres choses étaient en fait nécessaires pour effacer les ombres du sous-module.
dman
la source