Voici un moyen de "déraciner" les fichiers qui seraient autrement ignorés par l'ensemble actuel des modèles d'exclusion :
(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --
Cela laisse les fichiers dans votre répertoire de travail mais les supprime de l'index.
L'astuce utilisée ici consiste à fournir un fichier d'index inexistant à l'utilisateur. git ls-files pour qu'il pense qu'il n'y a pas de fichiers suivis. Le code shell ci-dessus demande tous les fichiers qui seraient ignorés si l'index était vide et les supprime ensuite de l'index actuel avec git rm .
Une fois que les fichiers ont été "dépistés", utilisez la fonction git status pour vérifier que rien d'important n'a été supprimé (si c'est le cas, ajustez vos schémas d'exclusion et utilisez git reset -- path
pour restaurer l'entrée d'index supprimée). Ensuite, faites un nouveau commit qui laisse de côté le "crud".
Le "crud" sera toujours dans les anciens commits. Vous pouvez utiliser git filter-branch pour produire des versions propres des anciens commits si vous avez vraiment besoin d'un historique propre (n.b. l'utilisation de git filter-branch va "réécrire l'histoire", donc il ne faut pas l'entreprendre à la légère si vous avez des collaborateurs qui ont retiré l'un de vos commits historiques après que le "crud" ait été premièrement introduit).