Как мне сделать, чтобы git принимал изменения режима без принятия всех изменений текста? - PullRequest
33 голосов
/ 23 октября 2009

У меня есть противоположная проблема от « Как заставить Git игнорировать изменения режима файла (chmod)? » У меня есть файл, для которого я изменил разрешение на выполнение, но есть и некоторые текстовые изменения, и я хочу совершить первое, но не второе. Это можно с мерзавцем?

(На самом деле, я сделал несколько текстовых изменений, которые хочу зафиксировать вместе с изменение разрешения исполняемого файла и другие, которые я не хочу фиксировать)

Обновление: Unstaging текст изменяется в файл, а затем делает git add -p снова и с учетом некоторых изменений текста удалось получить изменение режима в постановке. (Моя версия git 1.5.4.3)

Ответы [ 3 ]

77 голосов
/ 23 октября 2009

Вы должны быть в состоянии сделать:

git update-index --chmod=(+|-)x <file>

для настройки исполняемого бита, хранящегося в индексе.

Затем вы можете зафиксировать это отдельно от любых изменений содержимого файлов.

15 голосов
/ 23 октября 2009

git add -i позволит вам выборочно добавить некоторые фрагменты из файла в индекс. Я не знаю, чувствительны ли они к разрешениям, но если вы добавите блок после операции chmod, он может правильно попасть в индекс даже без явного обновления разрешения.

3 голосов
/ 01 января 2014

ответ Чарльза для меня добавлял как режим файла, так и изменения содержимого в индекс. Я работал над этим так.

git update-index --skip-worktree --chmod=+x <file>
git update-index --no-skip-worktree <file>

Пример

В качестве альтернативы вы можете сделать

git update-index --chmod=+x <file>
git config interactive.singlekey 1
echo na | git reset -p
...