J'ai des fichiers dans mon référentiel qui doivent être ignorés, je les ai ajoutés au .gitignore mais, bien sûr, ils ne sont pas supprimés de mon référentiel.
Ma question est donc la suivante: existe-t-il une commande ou un script magique utilisant filter-branch qui peut réécrire mon historique et supprimer facilement tous ces fichiers? Ou simplement une commande qui créera un commit qui les supprimera?
Réponses:
Vous pouvez les supprimer manuellement du référentiel:
Ou, si vous avez beaucoup de fichiers:
Mais cela ne semble pas fonctionner dans Git Bash sur Windows. Il produit un message d'erreur. Les éléments suivants fonctionnent mieux:
En ce qui concerne la réécriture de toute l'histoire sans ces fichiers, je doute fortement qu'il existe un moyen automatique de le faire.
Et nous savons tous que réécrire l'histoire est mauvais, non? :)
la source
git ls-files -i -z --exclude-from=.gitignore | xargs -0 git rm --cached
semble faire l'affairegit ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}
Un moyen plus simple qui fonctionne sur n'importe quel OS est de faire
Vous avez essentiellement lu tous les fichiers, sauf ceux du .gitignore
la source
Comme les fichiers en .gitignore ne sont pas suivis, vous pouvez utiliser la commande git clean pour supprimer récursivement les fichiers qui ne sont pas sous contrôle de version.
Utilisez
git clean -xdn
pour effectuer un essai à sec et voir ce qui sera retiré.Utilisez ensuite
git clean -xdf
pour l'exécuter.Fondamentalement,
git clean -h
ouman git-clean
(sous Unix) vous aidera.N'oubliez pas que cette commande supprimera également les nouveaux fichiers qui ne se trouvent pas dans la zone de transfert.
J'espère que ça aide.
la source
.gitignore
sont en cours de suivi.git clean -xdn
est une marche à sec qui ne supprime pas. le prochain le fera.J'ai fait une solution très simple en manipulant la sortie de l'instruction .gitignore avec sed:
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash
Explication:
la source
sed
est simple?Sous linux, vous pouvez utiliser cette commande:
par exemple, je veux supprimer "* .py ~" donc ma commande devrait être ==>
find . -name "*.py~" -exec rm -f {} \;
la source
Le git ignorera les fichiers correspondant au modèle .gitignore après l'avoir ajouté à .gitignore.
Mais les fichiers qui existaient déjà dans le référentiel le seront toujours.
utiliser
git rm files_ignored; git commit -m 'rm no use files'
pour supprimer les fichiers ignorés.la source