2012-05-09 8 views
103

Только что превратил файл some.sh в исполняемый файл (chmod 755 ...), разрешения были обновлены, но не содержание. Есть ли способ, чтобы совершить файл в мерзавец, так что исполняемый бит будет восстановлен/установить на клоне/кассы/тянуть?Обновление разрешений для файлов только в git

Обновление: Как я могу отслеживать, что новые разрешения были отправлены в github?

ответ

105

По умолчанию git будет обновлять разрешения для файлов, если вы их измените.

Если вы не видите никаких изменений при изменении разрешения, возможно, у вас есть конфигурация в git, которая игнорирует режим файла.

Посмотрите в свой проект, в папке .git для файла config, и вы должны увидеть что-то вроде этого:

[core] 
    filemode = false 

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

git config core.filemode true 

Затем вы должны иметь возможность фиксировать обычно ваши файлы. Он будет только фиксировать изменения разрешения.

+0

спасибо! как я могу отслеживать, что изменения разрешения были отправлены в 'github'? – BreakPhreak

+2

Вы можете увидеть его, когда вы просматриваете файл (например, в [Rails gitignore file] (https://github.com/rails/rails/blob/master/.gitignore) вы найдете 100644 в качестве разрешения файла) –

+6

Выполнение изменений разрешений в Windows с git (фактически изменение разрешений и фиксация файлов): http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html – fooMonster

17

Не работает для меня.

Режим true, файл perms изменен, но git говорит, что нет работы.

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

Проблема заключается в том, что git распознает только определенные разрешения.

+35

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

+0

Я не мог найти документацию, которая понятна: какой триггер после действия я могу использовать, возможно, для установки perms соответственно ? – Otheus

+1

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

92

@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 
+11

Это работает только для флага «исполняемый» –

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