Исключение файлов из git-diff - PullRequest
60 голосов
/ 19 июня 2009

Я отслеживаю проект с помощью git. В рабочей копии есть некоторые файлы проекта Xcode, которые я хочу отслеживать, но не хочу видеть в diffs, потому что всегда есть десятки измененных строк, которые меня никогда не интересуют. Есть ли простой способ получить git-diff пропустить эти файлы? Я пытался настроить пользовательский «тихий» инструмент сравнения:

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

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

Но:

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

Что я делаю не так?

Ответы [ 4 ]

86 голосов
/ 19 июня 2009

Проблема в том, что /bin/true сразу же вернется без чтения ввода. git diff поэтому вполне разумно считает, что он умер преждевременно.

Что вы действительно хотите сделать, так это сбросить атрибут diff, а не устанавливать его на поддельную команду. Попробуйте это в вашем .gitattributes:

Project.xcodeproj/* -diff
7 голосов
/ 27 июля 2011

Еще одно решение, обеспечивающее чистый вывод без каких-либо внешних инструментов (добавьте к .git/config):

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

Затем запустите его с:

git mydiff

Обратите внимание, что git diff --name-only лучше, чем git ls-files, поскольку он передаст более короткий список файлов в git diff, поскольку будут включены только измененные файлы. У меня возникли проблемы с превышением максимального количества аргументов в больших проектах при использовании git ls-files.

7 голосов
/ 19 июня 2009

Вы можете использовать псевдоним в вашем .git / config

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

Вам нужен filterdiff (из patchutils) для этого трюка.

sudo apt-get install patchutils

Тем не менее, разница не идеальна, она оставляет некоторый мусор:

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
0 голосов
/ 25 сентября 2009

Просто если у кого-то еще такая же боль, как и у нас. Мы хотели исключить файл, который уже был зафиксирован.

Этот пост был намного полезнее: работа с .git / info / исключить слишком поздно

В частности, вам нужно игнорировать файл, на самом деле используйте команду git remove См. git rm (http://www.kernel.org/pub/software/scm/git/docs/git-rm.html)

Вы проверяете это, идя

git rm --dry-run *.log
(если вы хотите исключить все файлы журнала)

это выведет то, что будет исключено, если вы запустите его.

тогда

вы запускаете его, идя

git rm *.log
(или по любому пути к имени файла / выражению, которое вы хотите)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...