Показать git diff, игнорируя изменения прав доступа к файлам?

Я запустил несколько chmod на своем живом сервере. Прямо сейчас, когда я там git diff, я вижу много old mode 100644 new mode 100755

Я также изменил там некоторые файлы. Но я бы просто git diff просто показал изменения в файлах, игнорируя изменения прав доступа к файлам.

Как я могу это сделать? Кстати, я не хочу, чтобы GIT игнорировал эти изменения прав доступа к файлам. На самом деле я хочу зафиксировать их, я просто хочу, чтобы git diff не показывал их в определенный момент.


person Hommer Smith    schedule 13.03.2014    source источник
comment
Не могли бы вы отметить другой ответ, приведенный ниже, как правильный, а не тот, который в настоящее время помечен как правильный? Тот, который в настоящее время помечен как правильный, был явно сделан с благими намерениями, но делает что-то, отличное от того, что было запрошено (Я просто хочу, чтобы git diff не отображал их в очень конкретный момент.) и это потенциально разрушительно. Спасибо.   -  person    schedule 31.05.2018


Ответы (2)


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

git config core.filemode false

фильтровать их в результате diff, но не игнорировать их

git filter-branch -f --tree-filter 'find * -type f | xargs chmod 644 ' -- --all
person Ashish Chopra    schedule 13.03.2014
comment
Я не хочу, чтобы GIT игнорировал мои изменения прав доступа к файлам. Я хочу, чтобы git diff не показывал их ... - person Hommer Smith; 13.03.2014
comment
одно из них на самом деле решение? Я думаю, что я нахожусь в той же ситуации, и кажется, что оба этих ответа игнорируют разрешения, имеющие отношение к фиксации, а не только для просмотра файлов, которые были изменены. - person okwme; 10.04.2015
comment
@HommerSmith, это должно работать для ваших нужд: git -c core.fileMode=false diff Предоставлено: stackoverflow.com/a/1580644/749232 - person saji89; 07.08.2015
comment
Разве filter-branch не деспотичен, ведь он меняет историю? Надеюсь, новички этим не станут слепо ломать историю проекта. Тем временем спрашивающий добавил: На самом деле я хочу зафиксировать их, я просто хочу, чтобы git diff не показывал их в какой-то конкретный момент, так что filter-branch, вероятно, не то, о чем просят. - person Stéphane Gourichon; 19.11.2015
comment
OP не хочет, чтобы git игнорировал изменения режима, они просто не хотят видеть их в diff. Считайте ответ Зеда правильным. - person Frank Robert Anderson; 14.02.2017
comment
В моем тестировании git config core.filemode false, похоже, не влияет на вывод git diff, когда две ветки (содержащие изменения режима, но ничего больше) различаются. Это было с git 2.17.0 в Mac OS с локальным репозиторием в файловой системе ExFAT. По какой-то причине git diff всегда показывает изменения режима, независимо от того, на что установлено core.filemode. - person James; 29.06.2018
comment
@James Не мой опыт работы с 2.17.1 на Ubuntu. Здесь приведенный ниже хак Зеда показывает изменения режима - но только для файлов, которые в остальном отличаются - и опция core.fileMode=false идентична, за исключением того, что не показывает изменение режима файла. Я не знаю, заботится ли git о регистре в параметрах конфигурации, хотя ... - person Auspex; 10.01.2019
comment
Я проголосовал против, потому что эта вторая команда буквально меняет разрешения для всех файлов. Это невероятно опасно для того, кто может слепо скопировать и вставить эту команду и задаться вопросом, что, черт возьми, произошло. - person gerrard00; 01.05.2020

git diff -G"."

Флаг -G отфильтровывает любой файл, в котором строка, соответствующая регулярному выражению, не была добавлена ​​или удалена. В этом случае предоставлено регулярное выражение ".", которое соответствует любой строке. Таким образом, аргумент -G"." будет отфильтровывать файлы, в которых не было добавлено или удалено ни одной строки.

Вам понадобится (я думаю) как минимум Git версии 1.7.10, чтобы это работало. 1.7.2, по крайней мере, слишком стара.

person Zed    schedule 13.03.2014
comment
1.7.9.5 Тоже кажется слишком старым :( - person ThorSummoner; 02.06.2015
comment
Точка в конце -G. имеет значение, если кто-то такой же тупой, как я, и думал, что это конец предложения. -G ищет регулярное выражение (здесь) в добавленных / удаленных строках. - person PseudoNoise; 26.10.2015
comment
Обратите внимание, что это действительно хороший прием. По умолчанию git будет показывать изменения разрешений, и эта команда просит git показывать только те изменения, которые затрагивают хотя бы одну строку в файле. Это работает, поскольку изменение разрешений не влияет ни на одну строку. Как насчет двоичных файлов, и что происходит, когда файл имеет изменения как в содержании, так и в разрешениях? - person Stéphane Gourichon; 19.11.2015
comment
Я удивлен, что это не набрало больше голосов. Уловка для меня, поскольку core.fileMode не влияет на изменение разрешений на запись. - person Gerard van Helden; 18.08.2016
comment
Думаю, это тоже скроет удаления. - person Frank Robert Anderson; 14.02.2017
comment
Это отлично работает, спасибо. Одна из моих проблем заключается в том, что я получаю сообщения типа /tmp/8ccRcc_ilsp.doc не является документом Word. Я предполагаю, что это связано с двоичными файлами в моем репо. Можете ли вы пролить свет на это? Вы сталкивались с этой проблемой раньше? - person ARF; 06.01.2018
comment
Я понял, что это проблема Git для Windows. Решение в это сообщение SO. - person ARF; 06.01.2018
comment
@FrankRobertAnderson Я использую его прямо сейчас, и он не скрывает удаления - person Auspex; 10.01.2019
comment
По какой-то причине это решение несовместимо с --ignore-space-at-eol. Если я git diff -G. revA..revB, то при желании я подавляю сообщение об изменении режима, но вижу изменения в конце строки. Если я добавляю --ignore-space-at-eol, я подавляю изменения, завершающие строку, по желанию, но изменения режима возвращаются. Почему это могло быть? Я хочу подавить и то, и другое. - person jez; 10.08.2020