Как изменить режим файла на GitHub?
$ git add test-file
$ git commit -m 'first commit'
create mode 100644 test-file
$ git push
$ git update-index --add --chmod=+x test-file
$ git commit -m 'change mode'
mode change 100644 => 100755 test-file
$ git push
После этого, если вы перейдете в GitHub, он по-прежнему показывается как 100644 независимо от того, что.
Ответы
Ответ 1
MSYS не проблема. Даже если MSYS chmod
не работает (это не так), Git имеет встроенный способ обойти эту проблему, то есть git update-index --chmod=+x
. Пусть будет ясно, что git update-index
работает только с индексом (промежуточная область), а не с локальным репозиторием (рабочий каталог).
Я убежден, что проблема связана с GitHub. В GitHub, если файл изначально нажат с режимом 100775, все хорошо. Если файл изначально, нажатый как 100644, он вызывает проблему. Попытки изменить режим файла будут успешными с помощью git add
, преуспеть с помощью git commit
, преуспеть с помощью git push
и даже появиться в истории файлов GitHub, но не отразится на "блобе" /master "на GitHub.
Update
От: Петрос Амиридис (сотрудник GitHub)
Тема: Как изменить режим плавания на GitHub?
У меня есть хорошие новости. Наша удивительная команда только что подтвердила, что это ошибка кеширования на нашем конце. Наша команда развернула исправление.
Ответ 2
Я думаю, проблема в том, что MSYS, на котором основана реализация Windows git, не обрабатывает chmod
правильно.
(EDIT: другой ответ говорит, что MSYS - это не проблема, которая, безусловно, кажется правдоподобной.)
Я предполагаю, что команда
git update-index --add --chmod=+x test-file
работает, обновляя метаданные в локальном репозитории (которые должны работать) и изменяя разрешения на файл (а это не так), помещая локальный репозиторий в несогласованное состояние.
Вы можете уйти от этого, отменив update-index
:
git update-index --add --chmod=-x test-file
git commit -m 'change mode back'
git push
чтобы вернуть хранилище в согласованное состояние, а затем внести изменения в копию репозитория, отличного от Windows. Если у вас нет доступа к Linux или другой Unix-подобной системе, Cygwin включает git
(не по умолчанию, но вы может установить его через setup.exe
) и даст вам среду, в которой chmod
действительно работает. По умолчанию оболочка для Cygwin bash, поэтому среда должна быть знакома, если вы используете git bash.
Файл по-прежнему не будет исполняться, если вы посмотрите на него из оболочки git bash, но он должен отображаться как 100755
в веб-интерфейсе GitHub.