2011-06-25 3 views
100

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

$ 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 

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

Что мне делать?

Редактировать: эта проблема была вызвана/усугубляется тем фактом, что я использовал git на гостевой гостевой машине ubuntu с репо, размещенным на общем хосте Windows 7. Это был рецепт катастрофы. Ответы здесь кажутся мне разумными, но я не могу назначить тик, потому что они отвечают на проблему, которой у меня не было.

ответ

69

С другой вопрос здесь, на StackOverflow: How do I make Git ignore file mode (chmod) changes?

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

Спасибо. Я тоже это видел. Пробовал это, и это не имело значения. – Synesso

+2

У меня были аналогичные проблемы с OP и я не мог вытащить изменения независимо от того, как «hard» я пытался сбросить. Это помогло мне. –

+4

[project] /. Git/config может содержать одну и ту же настройку и будет переопределять ~/.gitconfig.Если вы пытаетесь установить его глобально, убедитесь, что он не переопределяется локально. –

4

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

+0

I cna рекомендую GitHub для окон. Wonderfull интерфейс и действительно хорошая оболочка, я даже сделал relativly легко ssh key setup и git flow install. – Sangoku

196

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

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

git update-index --chmod=+x <file> 
+2

+1: именно то, что мне нужно, чтобы убедиться, что скрипты оболочки, которые я фиксирую из Windows (где у меня есть 'core.filemode', установленный на' false'), фактически имеют бит выполнения. – tomlogic

+0

В моем случае я также добавил новую строку к файлу, и только после этого смог совершить – oshai

+1

. Мне нужно посмотреть все. Один. Время. Спасибо, что опубликовали его! – fool4jesus

18

Handy один-лайнер для Git Bash:

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

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

+1

Небольшая коррекция для однопоточного @ benoit-blanchon ... * .sh необходимо указывать. найти . -name '* .sh' | xargs git update-index --chmod = + x –

+0

Вы правы, я отредактировал ответ. Спасибо @SteventheEasilyAmused. –

+0

сделал мой день :)! – Spence

5

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

  • удалить настройки core.filemode в $ линии projdir/.git/конфигурации
  • в Windows, мерзавец, запустите «мерзавец конфигурации --global core.filemode ложь»

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

Смежные вопросы