48 votes

Appliquer les règles git .gitignore à un dépôt existant

J'ai commencé à utiliser git avec un projet xcode et j'ai récemment découvert que je peux utiliser les fichiers .gitignore et .gitattributes pour ignorer le bruit du compilateur et du système. Maintenant que j'ai les fichiers .gitignore et .gitattributes en place, comment puis-je "appliquer" les nouvelles règles d'ignorance et me débarrasser de la crasse du contrôle de version ?

Mon fichier .gitignore est :

# xcode noise
*.modelv3
*.pbxuser
*.perspective
*.perspectivev3
*.pyc
*~.nib/
build/*

# Textmate - if you build your xcode projects with it
*.tm_build_errors

# old skool
.svn

# osx noise
.DS_Store
profile

Et mon fichier .gitattributes est :

*.pbxproj -crlf -diff -merge

Merci !

64voto

Chris Johnsen Points 50064

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).

38voto

Neal L Points 2251

Utiliser git rm --cached pour les fichiers et git rm -r --cached pour le build/ répertoire

10voto

Sven Koschnicke Points 2351

Si vous suivez déjà des fichiers que vous voulez ignorer, vous devez les supprimer avec

git rm --cached <file>

Git n'ignorera pas les fichiers qui sont déjà suivis (c'est-à-dire que vous les avez ajoutés avec git add ).

2voto

Abizern Points 52378

Si vous voulez supprimer les fichiers complètement, alors voici une référence pratique de Github .

Sachez que :

  1. Cela réécrira votre historique, donc cela ne vaut probablement la peine de le faire qu'avant de publier votre repo.
  2. Rappelez-vous que les anciens shas seront toujours dans la base de données des objets, mais le guide dont j'ai donné le lien vous montrera comment les gérer également.

1voto

Jed Schneider Points 6253

mv the_file_i_want_to_ignore the_file_i_want_to_ignore.back

git rm the_file_i_want_to_ignore

mv the_file_i_want_to_ignore.back the_file_i_want_to_ignore

git status

git commit -m 'ignore a bunch of stuff i should have ignored before'

C'est un peu un travail manuel mais c'est ainsi que j'ai procédé dans le passé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X