2010-11-08 4 views
122

Je veux que git arrête de suivre mon journal de développement local (log/development.log) dans nos dépôts. Est-ce possible et comment puis-je le faire?Supprimer un fichier existant d'un Git Repo

+0

duplication possible de [Faire git "oublier" sur un fichier qui * a * été suivi mais est maintenant ".gitignored"] (http://stackoverflow.com/questions/1274057/making-git-forget-about-a -file-that-was-tracked-but-is-now-gitignored) – Cascabel

Répondre

138

Juste pour vous donner la réponse complète à la fois:

  1. de Klemens: Vous devez ajouter le fichier à votre fichier .gitignore quelque part au-dessus du fichier indésirable dans le repo. à savoir

    $ cd $ cat >> .gitignore development.log C-d

  2. de m. narebski: Vous devez ensuite supprimer le fichier de la prise en pension en exécutant « git rm --cached <file> puis commettre cette suppression »

Si vous aussi l'espoir de faire le look repo comme si elle avait jamais suivi ce fichier, qui est beaucoup plus compliqué et fortement découragé car il crée non seulement de nouveaux commits pour chaque commit de votre histoire, détruisant ainsi l'interopérabilité de façon désagréable entre d'autres personnes qui ont cloné votre repo, mais il laisse également tous ces commits non testés (en supposant vous testez vos commits avant de les faire). Avec cette mise en garde, l'outil que vous cherchez si c'est votre objectif est filter-branch. Le premier exemple fait exactement ce que je décris.

+3

en utilisant git rm --cached semble avoir non seulement enlevé ma branche, mais quand je tire sur un autre système, il supprime les fichiers physiquement sur ce système. Une idée de ce qui se passe là-bas? – biagidp

+2

En réponse à ce qui précède: Je crois que le problème était que je n'avais pas .gitignore en place sur le système de remplacement avant de tirer les modifications, de sorte que la suppression supprimé la copie locale. Au moins c'est la théorie – biagidp

1

ajoutez le fichier gitignore.

voir http://git-scm.com/docs/gitignore

+13

Ceci est seulement la moitié de la réponse. Les entrées '.gitignore' ne s'appliquent pas aux fichiers déjà suivis. –

+10

La deuxième partie est 'git rm --cached ', puis en validant cette suppression. –

+1

Pourquoi n'existe-t-il pas une simple commande permettant à git de réévaluer tous les fichiers actuellement suivis en fonction du fichier .gitignore actuel? ... ou exerce-t-il trop de bon sens? : p – Alexander

51

Pour arrêter le suivi du fichier, utilisez simplement git rm --cached <filename>.

Mais comme indiqué par les autres ici, l'ajout du fichier à .gitignore pourrait vous empêcher de l'ajouter accidentellement plus tard.