Могу ли я сделать git diff игнорировать изменения разрешений - PullRequest
59 голосов
/ 20 июля 2010

Я непреднамеренно меняю права доступа ко всему моему дереву и фиксирую это изменение наедине с другими изменениями содержимого.

Я использую что-то вроде:

tar -czf deploy.tar <code>git diff --name-only v1 v2</code>

для создания tar с измененными файламимежду двумя тегами проблема в том, что теперь из-за изменения разрешений почти все мое дерево занесено в список измененных.

Есть ли способ, с помощью которого я мог бы git diff игнорировать те файлы, для которых изменены только разрешения

Ответы [ 3 ]

140 голосов
/ 20 июля 2010

Это скажет git игнорировать разрешения:

git config core.filemode false
10 голосов
/ 03 мая 2013

У меня возникла эта проблема после намеренного удаления разрешения на выполнение из файлов исходного кода (~ 26K файлов).Затем git diff говорит, что все файлы изменились!Ответ с core.filemode мне не помогает, так как это влияет только на diffs для вашего рабочего каталога, а не diff для 2 коммитов в репо.

Ответ заключался в использовании (большой страшной) команды filter-branch.В частности, все, что вам нужно набрать:

git filter-branch -f --tree-filter 'find * -type f | xargs chmod 644 ' -- --all

из корня вашего рабочего каталога.Конечно, сначала сделайте копию своего репо (cp -pr ~ / repo.git ~ / repo-orig.git или аналогичную) на случай, если вам нужно будет повторить попытку.

Наслаждайтесь!

4 голосов
/ 23 января 2019

Это старый вопрос, и ответ уже есть в комментариях, но:

Используйте параметр -G<regex> («Искать различия, текст исправления которого содержит добавленные / удаленные строки, которые соответствуют <regex>.») Для поиска любых изменений вообще, т.е. Изменения только для прав доступа не соответствуют этому, поэтому они игнорируются.

Итак: git diff -G.

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