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


187

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

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

Ответы:


190

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

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

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

[core]
    filemode = false

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

git config core.filemode true

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


Спасибо! Как я могу отследить, что изменения разрешений были представлены github?
BreakPhreak

2
Вы можете увидеть это при просмотре файла (например, в файле Rails gitignore вы найдете 100644 в качестве разрешения для файла)
Винсент Б.

8
Изменение разрешений в Windows с помощью git (собственно изменение разрешений и фиксаций
fooMonster

39
Этот ответ неверен! Git отслеживает только исполняемый файл или нет. Он не отслеживает другие права доступа к файлам, такие как запись или чтение. Прочитайте stackoverflow.com/a/11231682/2311074 для получения дополнительной информации.
Адам

Для меня webstorm не уловил изменения, но git statusя вижу изменения ..
Townsheriff

193

@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

7
Следует отметить, что вы на самом деле должны использовать '-x / + x'. Вы не можете устанавливать какие-либо другие разрешения или битовую маску.
Деволус

использование заметок git commit -aничего не сделало для меня, однако настройка сообщения в командной строке сделала. Немного
странности

Порядок команды должен быть следующим: # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
SimonDepelchin

30

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

Режим верный, права доступа к файлам были изменены, но git говорит, что делать нечего.

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

Кажется, проблема в том, что git распознает только определенные изменения прав доступа.


51
Правильно - gitдействительно только отслеживает, является ли файл исполняемым или нет, а не полный набор разрешений * nix. Таким образом, вам придется переключать файл между исполняемым файлом / не для того, чтобы он думал, что вы изменили что-то, что стоит совершить ...
twalberg

Я не смог найти документацию, которая была бы ясна: какой триггер пост-действия я могу использовать, возможно, для того, чтобы соответствующим образом настроить пермиты?
Отей

2
Ну, есть post-checkoutзацепка git, которая бы охватывала некоторые случаи, но я не уверен, охватит ли это все возможные вещи, которые обновляют файлы в вашем рабочем дереве. Возможно, вам лучше иметь в своем репозитории дополнительный сценарий оболочки, который устанавливает все соответствующим образом. Кроме того, есть пара проектов, которые дополняют gitвозможности хранения метаданных, но я никогда не пробовал ни одного из них ...
twalberg

1
Я изменил права доступа к файлу на 777 и сделал git update-index --refresh, но разница показывает old mode 100644 new mode 100755. Он не
обновил

см. ответ @tishma здесь stackoverflow.com/questions/14557106/… . Это то, что у меня
сработало
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.