2016-07-15 6 views
1

У меня есть проект, в котором есть файл .sh, и он должен быть в исполняемом режиме, когда он был вытащен другими. Теперь я уже изменил свои права на моей локальной машине. Однако я хочу, чтобы он был нажат/вытащен как исполняемый файл, так что другим пользователям не нужно постоянно запускать команду chmod.Git: Работа с исполняемыми файлами

Мне были сообщены о двух возможных решениях: .gitattributes и git update-index --chmod=+x script.sh, однако я не уверен, что именно следует соблюдать, учитывая мое состояние.

Я видел this сообщение здесь и this ответ там, и я думаю, какой из них подходит моему делу больше. Я хочу, чтобы этот процесс выполнялся автоматически, а не пользователем каждый раз, добавлен.

Любые мысли?

+1

Если вы установили его как исполняемый файл и нажмите его, этого должно быть достаточно. – PeeHaa

+0

Это что-то новое? Раньше это было не так. –

+1

Вы в Windows? Если нет, Git должен обнаружить исполняемый бит и установить его соответствующим образом. Вам не нужно ничего делать. –

ответ

2

Поскольку вы добавили этот вопрос с , вы можете просто проверить файл Теперь, когда вы изменили его на своем компьютере:.

% chmod +x script.sh 

Git заметит, что файл изменился:

% git status 
On branch old2 
Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

     modified: script.sh 

И вы можете дифф видеть, что файл, на самом деле, теперь исполняемым:

% git diff foo.sh 
diff --git a/foo.sh b/foo.sh 
old mode 100644 
new mode 100755 

Режим 100644 отражает неисполняемый файл, а режим 100755 отражает исполняемый файл, аналогичный битам разрешения файлов Unix. (Если бы вы изменили файл дополнительно, чтобы изменить разрешения, вы также увидите изменения.)

Когда вы проверяете это, и ваши сотрудники вытягивают ваши изменения, файл также будет выполнен для них.


Обратите внимание, что это не работает автоматически на системах, которые не имеют понятия исполнения бита (т.е. Windows) и в этом случае будет нужно сделать something with update-index.

Примечание также что это зависит от вашей системы, которая настроена правильно core.filemode. Это значение должно быть установлено на true во всех системах, отличных от Windows.

% git config core.filemode 
true 

Если по какой-то причине, что команда возвращает false и вы на компьютере без Windows, выполните следующую команду:

% git config core.filemode true 

повторно включить его.

+0

Да, все системы основаны на UNIX-системах, поэтому да, я думаю, что Git делает магию самостоятельно. Спасибо. –

0

Вы считаете крючки Git?

Может быть, это может быть решением для вас

.git/hooks/post-checkout: 

#!/bin/sh 
chmod +x script.sh 

Здесь вы можете узнать больше о Git hooks.

0

Вы должны решить, какой из них подходит для вас. Два метода, которые вы давали выше, они могут быть приемлемыми, и они почти одинаковы.

Вы должны знать, как предоставить рабочие разрешения исполняемым файлам. В Linux реальный способ сделать это - «chmod». Также вы можете подать в суд на git hooks. Для делать в обычном методе я предпочел это:

git add file.sh #this could be py file or something 
git update-index --chmod=+x file.sh #make it executable 
git commit -m "here the commit" #commit it 
git push #push it 

Так что, если вы хотите сделать это по-другому, вы должны попробовать это:

#!/usr/bin/bash 
chmod +x file.sh 

И вы можете запустить его. Но прежде, чем запустить его, вы должны дать работать разрешения на ваш сценарий, который вы сделали для предоставления рабочих разрешений для других сценариев :)

Или вы можете дать разрешения динамически:

su -c 'chmod +x file.sh' 

Таким образом, вы должен дать рабочее разрешение на один раз, и он работает.