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

134

Я прочитал несколько вопросов, касающихся прав доступа к файлам в 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

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

Теги:
file-permissions
diff

6 ответов

245
Лучший ответ

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

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

git update-index --chmod=+x <file>
  • 4
    +1: именно то, что мне нужно, чтобы убедиться, что скрипты оболочки, которые я core.filemode из Windows (где у меня установлен core.filemode в false ), на самом деле имеют бит выполнения.
  • 0
    В моем случае я также добавил новую строку в файл, и только тогда смог зафиксировать
83

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

Try:

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.
  • 0
    Благодарю. Я тоже это видел. Пробовал, и это не имело никакого значения.
  • 2
    У меня были подобные проблемы с OP, и я не мог вытащить изменения независимо от того, как hard я пытался выполнить сброс. Это помогло мне.
Показать ещё 2 комментария
24

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

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

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

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

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

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

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

5

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

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

Сначала проверьте разрешения.

git ls-files --stage

Затем измените разрешения

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

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

git ls-files --stage

Ещё вопросы

Сообщество Overcoder
Наверх
Меню