Разрешения для файлов Git в Windows

173

Я прочитал несколько вопросов, касающихся прав доступа к файлам в Git, и все еще немного запутался. У меня есть репозиторий на GitHub, раздвоенный от другого. Пост слияния, они должны быть идентичны. Тем не мение:

$ git diff --summary origin/epsilon master/epsilon
 mode change 100644 => 100755 ants/dist/sample_bots/csharp/compile.sh
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/MyBot.coffee
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/ants.coffee
 mode change 100644 => 100755 ants/util/block_test.sh
 mode change 100644 => 100755 manager/mass_skill_update.py
 mode change 100644 => 100755 worker/jailguard.py
 mode change 100644 => 100755 worker/release_stale_jails.py
 mode change 100644 => 100755 worker/start_worker.sh

Я пытался изменить права доступа к файлам, но это не меняет результаты сравнения.

Synesso
источник

Ответы:

347

Я нашел решение о том, как изменить разрешения (также) для Windows, здесь: http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

Например, следующая команда добавляет пользовательское разрешение на выполнение в произвольный файл:

git update-index --chmod=+x <file>
Dedek
источник
6
+1: именно то, что мне нужно, чтобы убедиться, что сценарии оболочки, которые я фиксирую из Windows (где я core.filemodeустановил false), на самом деле имеют установленный бит выполнения.
Tomlogic
В моем случае я также добавил новую строку в файл, и только тогда смог зафиксировать
oshai
5
В операционной системе Windows, используя ГИТ-Баш, мне нужен был --addфлаг исполнения по какой - либо причине: git update-index --add --chmod=+x <file>. После этого файл уже находился в стадии работы с chmod
Jefferson Quesado
Больше не действует ни в git bash, ни в cmd.exe.
Бен
107

Из другого вопроса здесь о stackoverflow: Как я могу заставить Git игнорировать изменения режима файла (chmod)?

Пытаться:

git config core.filemode false

Из git-config (1) :

   core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.
Кори Хендерсон
источник
Спасибо. Я тоже это видел. Пробовал, и это не имело никакого значения.
Synesso
3
У меня были подобные проблемы с OP, и я не мог вытащить изменения независимо от того, как hardя пытался выполнить сброс. Это помогло мне.
Джо-Герман Хогольт
11
[project] /. git / config может содержать те же настройки и переопределять ~ / .gitconfig. Если вы пытаетесь установить его глобально, убедитесь, что он не переопределяется локально.
двоичный файл
1
Я считаю, что это необходимо для NTFS, к сожалению.
23
1
Это ответ!
Эндрю Сурду
29

Удобный однострочный для Git Bash:

find . -name '*.sh' | xargs git update-index --chmod=+x

Он пометит весь .shфайл как исполняемый. После этого вам просто нужно git commit.

Бенуа Бланшон
источник
2
Небольшая поправка для @ benoit-blanchon one-liner ... .sh должен быть в кавычках. найти . имя ' .sh' | xargs git update-index --chmod = + x
Стивен легко развлекается
Вы правы, я отредактировал ответ. Спасибо @SteventheEasilyAmused.
Бенуа Бланшон
15

Если вы используете Cygwin git (или, я полагаю, и Linux git), есть большая вероятность, что ваш параметр core.filemode был установлен на уровне проекта в $ projdir / .git / config. Я обнаружил, что мне нужно было сделать следующее, чтобы мой Git Cygwin и мой Git Windows прекрасно сосуществовали в файловой системе Windows без каких-либо несуществующих изменений файлового режима:

  • удалите строку настройки core.filemode в $ projdir / .git / config
  • в git Windows запустите "git config --global core.filemode false"

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

skiphoppy
источник
6

Сначала проверьте права доступа к файлу, используя следующую команду.

git ls-files --stage

Затем измените разрешения. Здесь «x» представляет разрешения на выполнение.

git update-index --chmod=+x 'scriptname.ext'

Теперь повторно проверьте разрешения.

git ls-files --stage

==============================================

если вы используете ПК с Windows, но развертываете на Linux-машине. Выполните приведенную ниже команду в первую очередь, чтобы сделать ее совместимой для запуска на компьютере с Linux

dos2unix scriptname.ext scriptname.ext

Сириш Ярлагадда
источник
Нет ли способа сделать что-то подобное git update-index --chmod=1777 'scriptname.ext'?
Алекс Баркер
Вы перешли к пути, где существует файл скрипта? @alex
Сириш Ярлагадда
5

Я исправил это, изменив права доступа к файлам в Ubuntu, commit, push и все ОК. Кажется, это просто не будет работать с msysgit на Windows / NTFS.

Synesso
источник
Я не могу рекомендовать GitHub для Windows. Замечательный интерфейс и действительно хорошая оболочка, я даже сделал относительно простую установку ключей ssh ​​и установку git flow.
Сангоку