Исключение файлов из git -diff
Я отслеживаю проект с помощью git. В рабочей копии есть некоторые файлы проекта Xcode, которые я хочу отслеживать, но не хочу видеть в diff, потому что всегда есть десятки измененных строк, которые меня никогда не интересуют. Есть ли простой способ иметь git-diff
пропустить эти файлы? Ive попытался настроить собственный "бесшумный" инструмент 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.
Что я делаю неправильно?
Ответы
Ответ 1
Проблема заключается в том, что /bin/true
будет немедленно возвращаться без чтения его ввода. git diff
поэтому считает вполне разумным, что он умер преждевременно.
Что вы действительно хотите сделать, так это отключить атрибут diff, а не задавать его поддельной командой. Попробуйте это в .gitattributes
:
Project.xcodeproj/* -diff
Ответ 2
Другое решение, которое производит чистый вывод без каких-либо внешних инструментов (добавьте к .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
.
Ответ 3
Вы можете использовать псевдоним в своем .git/config
[alias]
mydiff = !git diff | filterdiff -x "*/Project.xcodeproj/*"
Вам нужен filterdiff (от patchutils) для этого трюка.
sudo apt-get install patchutils
Тем не менее diff не идеален, он оставляет мусор:
[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
Ответ 4
Просто у кого-то другого есть такая же боль.
Мы хотели исключить файл, который уже был зафиксирован.
Этот пост был более полезным:
работает с .git/info/exclude слишком поздно
В частности, что вам нужно игнорировать файл, на самом деле использовать команду git remove
См. git rm (http://www.kernel.org/pub/software/scm/git/docs/git-rm.html)
вы проверяете его, перейдя
git rm --dry-run *.log
(если вы хотите исключить все файлы журнала)
будет выводиться то, что было бы исключено, если вы его запустили.
затем
вы запустите его, перейдя
git rm *.log
(или любой путь/выражение имени файла, которое вы хотите)