2009-06-19 8 views
57

Je suis suivi d'un projet avec git. Il y a des fichiers de projet Xcode dans la copie de travail que je veux suivre, mais que je ne veux pas voir dans les diffs, car il y a toujours des dizaines de lignes modifiées qui ne m'intéressent pas. ces fichiers? J'ai essayé de mettre en place un outil de diff « silencieux » personnalisé:Exclure les fichiers de git-diff

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

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

Mais:

 
$ git diff 
external diff died, stopping at Project.xcodeproj/zoul.mode1v3. 

Qu'est-ce que je fais mal?

Répondre

80

Le problème est que /bin/true retournera immédiatement sans lire son entrée. git diff pense donc, assez raisonnablement, qu'il est mort prématurément.

Ce que vous voulez vraiment faire est de désactiver l'attribut diff, pas de le définir à une commande bidon. Essayez ceci dans votre .gitattributes:

Project.xcodeproj/* -diff 
+0

Oui, cela fonctionne très bien, merci beaucoup. – zoul

+5

L'exclusion de l'ensemble du répertoire n'a pas fonctionné pour moi, car la plupart des fichiers se trouvent dans des sous-répertoires plus profonds. Au lieu de cela * .xcuserstate -diff a été utile pour ignorer le fichier qui change souvent. – Bemmu

+0

@Bemmu: Pour être juste, j'utilisais seulement le même modèle que dans la question. Il n'y avait aucune suggestion que le modèle ne fonctionnait pas dans la situation initiale des demandeurs. –

6

Vous pouvez utiliser un alias dans votre .git/config

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

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

sudo apt-get install patchutils 

Toujours le diff est pas parfait, il laisse des ordures:

[email protected]:~/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 
+0

C'est très bien, merci. La poubelle est très bien, au moins je sais que ces fichiers ont changé. Mais je perds la couleur, y a-t-il un moyen de la récupérer? J'ai essayé git diff --color pour le forcer, mais filterdiff devient confus par la couleur qui s'échappe et arrête le filtrage. – zoul

+0

Oh oui, | colordiff | moins -r. – zoul

+0

Merci pour les réponses à cette question - filterdiff répond presque à mes besoins - cependant, la "poubelle" restante me cause des problèmes - est-il possible de dire "supprimer complètement toute référence à un fichier" en utilisant filterdiff? – Michael

0

Juste Incase quelqu'un d'autre a la même douleur que nous avions. Nous voulions exclure un fichier qui avait déjà été validé.

Ce poste était beaucoup plus utile: working with .git/info/exclude too late

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

test, vous en allant

git rm --dry-run *.log
(si vous dites voulait exclure tout les fichiers journaux)

cela produira ce serait exclu si vous l'avez exécuté.

puis

vous l'exécutez en allant

git rm *.log
(ou tout autre chemin nom/expression que vous voulez)

7

Une autre solution qui produit la production propre, sans outils externes (ajouter vers .git/config):

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

Ensuite, exécutez avec:

git mydiff 

Notez que git diff --name-only est mieux que git ls-files car il passera une liste plus courte des fichiers à git diff, puisque seuls les fichiers modifiés seront inclus. J'ai eu des problèmes avec le dépassement du nombre maximum d'arguments dans les grands projets lors de l'utilisation git ls-files.

+0

J'ai rencontré des problèmes avec des chemins complexes avec ceci. Je soupçonne que ce serait mieux si vous avez utilisé l'option -z: "ne pas modifier les noms de chemins et utiliser les NUL comme terminateurs de champ de sortie". –

Questions connexes