Git: работа с исполняемыми файлами

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

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

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

Есть предположения?


person Schütze    schedule 15.07.2016    source источник
comment
Если вы установите его как исполняемый файл и нажмите, этого должно быть достаточно.   -  person PeeHaa    schedule 15.07.2016
comment
Это что-то новенькое? Раньше этого не было.   -  person Schütze    schedule 15.07.2016
comment
Вы работаете в Windows? Если нет, Git должен обнаружить исполняемый бит и установить его соответствующим образом. Вы не должны ничего делать.   -  person Edward Thomson    schedule 15.07.2016


Ответы (3)


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

% 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), и в этом случае вам нужно выполнить < a href = "https://stackoverflow.com/questions/21691202/how-to-create-file-execute-mode-permissions-in-git-on-windows"> что-то с update-index.

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

% git config core.filemode
true

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

% git config core.filemode true

чтобы снова включить его.

person Edward Thomson    schedule 15.07.2016
comment
Да, все системы основаны на UNIX, так что да, я думаю, что Git творит чудеса сам по себе. Спасибо. - person Schütze; 18.07.2016

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

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

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'

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

person Community    schedule 15.07.2016

Вы рассматривали Git-хуки?

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

.git/hooks/post-checkout:

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

Здесь вы можете узнать больше о хуках Git < / а>.

person djm.im    schedule 15.07.2016