Исключение файлов из git-diff-файл



я отслеживаю проект с git. В рабочей копии есть некоторые файлы проекта Xcode, которые я хочу отслеживать, но не хочу видеть в diffs, потому что всегда есть десятки измененных строк, которые меня никогда не интересуют. Есть ли простой способ иметь git-diff пропустить эти файлы? Я попытался настроить пользовательский" тихий " инструмент 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.


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

479   4  
git

4 ответов:

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

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

Project.xcodeproj/* -diff

вы можете использовать псевдоним в вашей .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

другое решение, которое производит чистый вывод без каких-либо внешних инструментов (добавить в .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.

просто упаковать кто-то еще имеет ту же боль, что и мы. Мы хотели исключить файл, который уже был совершен.

этот пост был полезным: работа .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
(или любой путь к имени файла / выражение, которое вы хотите)

Comments

    Ничего не найдено.