Исключение файлов из 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.
что я делаю не так?
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