Дозволи файлів Git в Windows


172

Я прочитав кілька запитань щодо дозволів на файли в 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

Я спробував змінити дозволи на файли, але це не змінює різні результати.

Відповіді:


346

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

Наприклад, наступна команда додає дозвіл на виконання користувачем довільного файлу:

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

6
+1: саме те, що мені потрібно, щоб переконатися, що сценарії оболонки, яку я виконую з Windows (де я core.filemodeвстановив false), насправді встановили біт виконання.
tomlogic

У моєму випадку я також додав у файл новий рядок, і лише тоді зміг здійснити
oshai

5
В операційній системі Windows, використовуючи ГИТ-Баш, мені потрібен був --addпрапор виконання за якою - небудь причини: git update-index --add --chmod=+x <file>. Після цього файл вже знаходився на стадії з chmod
Джефферсон Кесадо

Більше не має ефекту, ні в git bash, ні в promd 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
У мене були подібні проблеми з ОП, і я не міг тягнути зміни незалежно від того, як hardя намагався скинути. Це зробило для мене трюк.
Jo-Herman Haugholt

11
[project] /. git / config може містити те саме налаштування і буде замінювати ~ / .gitconfig. Якщо ви намагаєтесь встановити це в усьому світі, переконайтесь, що він не змінюється локально.
Бінарний Філі

1
Я вважаю, що це необхідно і на NTFS, на жаль.
Марк.2377

1
Ось відповідь!
Андрій Сурду

29

Зручна однолінійка для Git Bash:

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

Він позначить усі .shфайли як виконувані файли. Після цього просто треба git commit.


2
Невелика корекція для однофаймового блоку @ benoit-blanchon… .shsh повинен бути цитований. знайти. -назви ' .sh' | xargs git update-index --chmod = + x
Стівен Легко поцікавився

Ти маєш рацію, я відредагував відповідь. Дякуємо @SteventheEasilyAmused.
Бенуа Бланшон

15

Якщо ви використовуєте 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 продовжувати бачити зміни у файловому режимі, які зазвичай є актуальними, при цьому доручаючи Windows git ігнорувати зміни файлового модуля, які він бачить, як правило, помилкові позитиви.


6

Спочатку перевірте дозволи файлів за допомогою команди нижче.

git ls-files --stage

Потім змініть дозволи. Тут "x" представляє дозволи на виконання.

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

Тепер перевірте дозволи.

git ls-файли - сцена

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

якщо ви використовуєте ПК з Windows, але розгортаєте на машині Linux. Виконайте команду нижче в першу чергу, щоб зробити її сумісною для роботи на машині Linux

dos2unix scriptname.ext scriptname.ext


Хіба немає способу зробити щось подібне git update-index --chmod=1777 'scriptname.ext'?
Алекс Баркер

Ви перейшли до шляху, де існує файл сценарію? @alex
Sireesh Yarlagadda

5

Я виправив це, змінивши дозволи файлів в Ubuntu, виконуючи цілі, натисніть і все гаразд. Здається, це просто не працюватиме з msysgit в Windows / NTFS.


Я рекомендую GitHub для windows. Чудовий інтерфейс та дуже приємна оболонка, я навіть зробив відносно просту настройку ключа ssh та встановлення git flow.
Сангоку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.