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

144

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

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

Ваш Ответ

3   ответа
127

@fooMonster статья работала на меня

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

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

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

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

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.
Это работает только для & quot; исполняемого файла & quot; флаг
Следует отметить, что вам действительно нужно использовать «-x / + x». Вы не можете устанавливать какие-либо другие разрешения или битовую маску.
обратите внимание, используяgit commit -a ничего для меня не сделал, однако установил сообщение в командной строке. Немного причуды
22

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

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

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

Правильный -git на самом деле только отслеживает, является ли файл исполняемым или нет, а не полный набор разрешений * nix. Так что вам придется переключать файл между исполняемым файлом / не для того, чтобы думать, что вы изменили что-то стоящее ...
Я не смог найти документацию, которая бы содержала ясность: какой триггер пост-действия я могу использовать, возможно, для соответствующей настройки разрешений?
Ну, естьpost-checkout зацепитьgit, который охватывал бы некоторые случаи, но я не уверен, охватит ли это все возможные вещи, которые обновляют файлы в вашем рабочем дереве. Возможно, вам лучше иметь в своем репозитории дополнительный сценарий оболочки, который устанавливает все соответствующим образом. Кроме того, есть несколько проектов, которые увеличиваютgit хранить метаданные, но я никогда не пробовал ни одного из них ...
@ twalberg, это должен быть ответ сам по себе! Это единственная информация, к которой я пришел.
Я изменил права доступа к файлу на 777 и сделалgit update-index --refresh, но разница показываетold mode 100644 new mode 100755, Он не обновил все разрешения
148

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

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

[core]
    filemode = false

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

git config core.filemode true

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

Этот ответ неверен! Git отслеживает только исполняемый файл или нет. Он не отслеживает другие права доступа к файлам, например, для записи или чтения. Читатьstackoverflow.com/a/11231682/2311074 для большего.
Изменение прав доступа в Windows с помощью git (собственно изменение прав доступа к файлам и их фиксация):blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html
благодарю вас! как я могу отследить, что изменения разрешения были представленыgithub? BreakPhreak
Вы можете увидеть это при просмотре файла (например, наRails gitignore file, вы найдете 100644 в качестве разрешения файла)

Похожие вопросы