2011-06-30 2 views
141

J'ai un dépôt git hébergé sur Github. Après avoir commis de nombreux fichiers, je me rends compte que je dois créer .gitignore et exclure .exe, .obj fichiers.gitignore après validation

Cependant, supprimera-t-il automatiquement ces fichiers validés du référentiel? Y a-t-il un moyen de forcer cela?

+0

Future Googlers peuvent trouver ce extrêmement utile. Succinct et au point: https://www.git-tower.com/learn/git/faq/ignore-tracked-files-in-git –

Répondre

235

Non, vous ne pouvez pas forcer un fichier qui est déjà engagé dans le repo à retirer juste parce qu'il est ajouté à la .gitignore

Vous devez git rm --cached pour supprimer les fichiers que vous ne voulez pas le repo. (--cached puisque vous voulez probablement garder la copie locale, mais retirer de la prise en pension.) Donc, si vous voulez supprimer tous les exe de votre repo faire

git rm --cached /\*.exe 

(Notez que l'astérisque * est cité de la shell - cela permet git, et non la coquille, développez les noms de fichiers de fichiers et sous-répertoires)

+0

Est-ce que cela signifie que j'ai supprimer individuellement chaque .exe –

+5

@Madhur Ahuja En fait, si vous faites 'git rm/\ *. exe' il supprimera tous les exe dans votre repo – manojlds

+3

À quoi sert le/\? – Costa

23

Cependant, supprimera-t-il automatiquement ces fichiers validés du référentiel?

Non, même avec une .gitignore existante, vous êtes en mesure de mettre en scène « ignorés » fichiers avec le -f (force) drapeau. Si les fichiers sont déjà validés, ils ne sont pas supprimés automatiquement.

git rm --cached path/to/ignored.exe 
+0

Est-ce que cela signifie que j'ai supprimer individuellement chaque .exe –

+0

Vous êtes probablement en mesure de par lots cela, mais je ne sais pas comment cela fonctionne sous Windows – KingCrunch

5

Cependant, il va supprimer automatiquement ces fichiers engagés à partir du référentiel?

n °

La 'meilleure' recette pour le faire est d'utiliser git filter-branch comme écrit sur ici:

La page de manuel pour filtre-branche git contient des exemples complets.

Remarque Vous allez réécrire l'historique. Si vous aviez publié des révisions contenant les fichiers ajoutés accidentellement, cela pourrait créer des problèmes pour les utilisateurs de ces branches publiques. Informez-les, ou peut-être pensez à quel point vous avez besoin de supprimer les fichiers.

Remarque En présence de balises, utilisez toujours l'option --tag-name-filter cat à git filter-branch. Il n'a jamais fait mal et vous sauver la mal de tête quand vous vous rendez compte plus tard taht vous en avez besoin

+0

J'ai exécuté cette commande il a montré Réécrire 57c1f1f04a3ed01f50c3260714cfc82c973ac816 (3/3) AVERTISSEMENT: Ref 'réfs/heads/master' est inchangé et rien ne s'est produit –

+0

C'est un avertissement, et très probablement signifie que la branche maîtresse n'a pas (encore) contenu toutes les révisions avec les fichiers à supprimer. Vous pouvez facilement vérifier cela. S'il y a un problème, veuillez mettre à jour la question. ** PS: ** use - '--all' pour réécrire toutes les branches (locales) à la fois – sehe

+0

Le lien ne semble plus actif ... – Noctis

1

Même après avoir supprimé le fichier (s) et engager, vous aurez toujours ces fichiers dans l'histoire. Pour les supprimer, pensez à utiliser BFG Repo-Cleaner. C'est une alternative à git-filter-branch.

5

J'ai dû supprimer.idée et les dossiers cibles et après avoir lu tous les commentaires cela a fonctionné pour moi:

git rm -r .idea 
git rm -r target 
git commit -m 'removed .idea folder' 

puis pousser à maîtriser

1

Si vous ne l'avez pas poussé les changements déjà:

git rm -r --cached . 
git add . 
git commit -m 'clear git cache' 
git push