Обновление и фиксация только прав доступа к файлу с помощью контроля версий git

Просто превратил файл some.sh в исполняемый файл (chmod 755 ...), разрешения были обновлены, но не содержимое. Есть ли способ зафиксировать файл в git, чтобы исполняемый бит был восстановлен/установлен на clone/checkout/pull?

Обновление:, как я могу отслеживать, что новые разрешения были отправлены на github?

Ответ 1

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

Если вы не видите никаких изменений при изменении прав на выполнение, у вас, вероятно, есть конфигурация в git, которая игнорирует режим файла.

Посмотрите в свой проект, в папке .git для файла config и вы должны увидеть что-то вроде этого:

[core]
    filemode = false

Вы можете изменить его на true в вашем любимом текстовом редакторе или запустить:

git config core.filemode true

Тогда вы сможете нормально фиксировать ваши файлы. Это только передаст изменения разрешения.

Ответ 2

Работа @fooMonster для меня работала

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

Как вы видите, файл имеет разрешение 644 (игнорируя 100). Мы хотели бы изменить его на 755:

# git update-index --chmod=+x script.sh

зафиксировать изменения

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh

Ответ 3

Не работает для меня.

Режим true, файл perms изменен, но git говорит, что нет работы.

git init
git add dir/file
chmod 440 dir/file
git commit -a

Проблема заключается в том, что git распознает только определенные изменения разрешений.