Оновлення та здійснення лише прав файлу за допомогою керування версіями git


187

Щойно перетворив some.shфайл у виконуваний файл ( chmod 755 ...), дозволи було оновлено, але не вміст. Чи є спосіб зафіксувати файл в git, щоб виконуваний файл був відновлений / встановлений на клонування / касі / витягуванні ?

Оновлення: як я можу відстежити, що нові дозволи були подані github?

Відповіді:


190

За замовчуванням git оновить дозволи на виконання файлів, якщо ви їх зміните. Він не змінює та не відстежує будь-які інші дозволи.

Якщо ви не бачите жодних змін під час зміни дозволу на виконання, напевно у вас є конфігурація в git, яка ігнорує файловий режим.

Загляньте у свій проект, у .gitпапку для configфайлу, і ви повинні побачити щось подібне:

[core]
    filemode = false

Ви можете або змінити його trueв улюбленому текстовому редакторі, або запустити:

git config core.filemode true

Тоді ви маєте змогу нормально виконувати свої файли. Він лише здійснить зміни дозволу.


спасибі! як я можу відстежити, що зміни дозволу надіслані github?
BreakPhreak

2
Ви можете бачити його, переглядаючи файл (наприклад, на файлі Rails gitignore , ви знайдете 100644 як дозвіл на файл)
Vincent B.

8
Внесення змін дозволів у Windows за допомогою git (фактично зміна дозволів на файли та здійснення): blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html
fooMonster

39
Ця відповідь неправильна! Git відстежує лише, якщо файл виконується чи ні. Він не відслідковує інші дозволи на файли, наприклад, для запису чи для читання. Докладніше читайте на сайті stackoverflow.com/a/11231682/2311074 .
Адам

Для мене веб-штурм не змінив змін, але в git status, я бачу зміни ..
Тауншериф

193

Стаття @fooMonster працювала на мене

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

Як ви бачите, файл має 644 дозволу (ігноруючи 100). Ми хотіли б змінити його на 755:

# git update-index --chmod=+x script.sh

здійснити зміни

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh

7
Слід зазначити, що ви насправді повинні використовувати '-x / + x'. Ви не можете встановити жодних інших дозволів чи бітових масок.
Деволус

Примітка за допомогою git commit -aнічого не зробила для мене, проте встановлення повідомлення в командному рядку зробило. Трохи примха
JonnyRaa

Порядок команд повинен бути: # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
SimonDepelchin

30

Не працює для мене.

Режим істинний, файлові perms були змінені, але git говорить, що роботи немає.

git init
git add dir/file
chmod 440 dir/file
git commit -a

Здається, проблема полягає в тому, що git розпізнає лише певні зміни дозволу.


51
Правильно - gitнасправді відстежується лише те, чи файл виконується чи ні, а не повний набір дозволів * nix. Тож вам доведеться перемикати файл між виконуваним файлом / не для того, щоб він міг змінити щось, що варто зробити ...
twalberg

Я не зміг знайти документацію, яка була б зрозумілою: який тригер після дії, можливо, я можу використати, щоб відповідно встановити кари?
Отей

2
Ну, є post-checkoutгачок git, який охоплює деякі випадки, але я не впевнений, чи охоплював би це всі можливі речі, що оновлюють файли у вашому робочому дереві. Вам може бути краще просто мати додатковий скрипт оболонки у вашому репо, який встановлює речі відповідно. Крім того, є кілька проектів, які доповнюють gitдля зберігання метаданих, але я ніколи не намагався жодного з них ...
twalberg

1
Я змінив дозволи на файли на 777 і зробив git update-index --refresh, але різниця показує old mode 100644 new mode 100755. Він не оновлював усі дозволи
hudac,

см @tishma відповідь тут stackoverflow.com/questions/14557106 / ... . Це те, що працювало для мене
gary69
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.