61 votes

Exclure des fichiers de git-diff

Je suis suivi d'un projet avec git. Il y a quelques Xcode fichiers de projet dans la copie de travail que je veux en garder une trace, mais ne veulent pas voir de diff, car il y a toujours des dizaines de lignes modifiées que je ne suis jamais intéressé. Est-il un moyen simple de disposer git-diff ignorer ces fichiers? J'ai essayé de mettre en place une mesure "silencieux" outil de comparaison:

$ cat .gitattributes 
Projet.xcodeproj/* diff=nodiff

$ cat ~/.gitconfig 
[diff "nodiff"]
 commande = /bin/true

Mais:

$ git diff
externe diff mort, l'arrêt au Projet.xcodeproj/zoul.mode1v3.

Ce que je fais mal?

88voto

Charles Bailey Points 244082

Le problème que vous nous rencontrez que /bin/true reviendra immédiatement sans lire son entrée. git diff pense donc, assez raisonnablement, qu'il est décédé prématurément.

Ce que vous voulez vraiment faire est de supprimer l'attribut diff, et non de le définir comme une fausse commande. Essayez ceci dans votre .gitattributes :

 Project.xcodeproj/* -diff
 

7voto

Connor McKay Points 148

Une autre solution qui produit de nettoyage de sortie sans outils externes (ajoutez - .git/config):

[alias]
    mydiff = !git diff -- $(git diff --name-only | grep -Ev "Project.xcodeproj/")

Puis l'exécuter avec:

git mydiff

Notez que git diff --name-only est mieux que git ls-files car il va passer une courte liste de fichiers à l' git diff, puisque seuls les fichiers modifiés seront inclus. J'ai des problemes avec excédant le nombre maximal d'arguments dans les grands projets lors de l'utilisation d' git ls-files.

7voto

yanjost Points 1788

Vous pouvez utiliser un alias dans votre .git / config

 [alias]
        mydiff = !git diff | filterdiff -x "*/Project.xcodeproj/*"
 

Vous avez besoin de filterdiff (de patchutils) pour cette astuce.

 sudo apt-get install patchutils
 

Pourtant, le diff n'est pas parfait, il laisse des ordures:

 yannick@yannick-desktop:~/git-filter-test$ git mydiff
diff --git a/Project.xcodeproj/dummy.txt b/Project.xcodeproj/dummy.txt
index 3e1f9e6..89dfed9 100644
diff --git a/dummy2.txt b/dummy2.txt
index 91966ce..d9588a9 100644
--- a/titi.txt
+++ b/titi.txt
@@ -1,3 +1,3 @@
 aaaaaaaaaa
-bbbbbbbbb
 cccccc
+ddd
 

0voto

Evolve Points 2453

Juste au cas où quelqu'un d'autre a la même douleur que nous avons eu. Nous avons voulu exclure un fichier qui a déjà été commis.

Ce post a été bien plus utile: http://stackoverflow.com/questions/1158857/working-with-git-info-exclude-too-late

Plus précisément ce que vous devez ignorer un fichier est d'utiliser la commande git supprimer Voir git rm (http://www.kernel.org/pub/software/scm/git/docs/git-rm.html)

vous test

git rm --dry-run *.log
(si vous dites voulu exclure tous les fichiers de log)

ce sera de sortie ce que seraient exclus si vous l'exécutez.

alors

que vous l'exécutez en va

git rm *.log
(ou quelque soit le nom de fichier chemin d'accès / expression que vous voulez)

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