Как создать разрешения для режима выполнения файла в Git в Windows?

Я использую Git в Windows и хочу вытащить исполняемую оболочку script в репозиторий Git с помощью одной фиксации.

Обычно мне нужно сделать два шага (git commit).

$ vi install.sh
$ git add install.sh  
$ git commit -am "add new file for installation" # first commit
[master f2e92da] add support for install.sh
 1 files changed, 18 insertions(+), 3 deletions(-)
 create mode 100644 install.sh
$ git update-index --chmod=+x install.sh
$ git commit -am "update file permission"        # second commit
[master 317ba0c] update file permission
  0 files changed
  mode change 100644 => 100755 install.sh

Как я могу объединить эти два шага в один шаг? Git конфигурация? команда windows?

Ссылка: см. вопрос в Git разрешениях файлов в Windows для второго фиксации

Ответ 1

Нет необходимости делать это в двух коммитах, вы можете добавить файл и пометить его исполняемым в одном коммите:

C:\Temp\TestRepo>touch foo.sh

C:\Temp\TestRepo>git add foo.sh

C:\Temp\TestRepo>git ls-files --stage
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       foo.sh

Как вы заметили, после добавления режим 0644 (т.е. не исполняемый). Однако мы можем отметить его как исполняемый файл перед фиксацией:

C:\Temp\TestRepo>git update-index --chmod=+x foo.sh

C:\Temp\TestRepo>git ls-files --stage
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       foo.sh

И теперь файл - это режим 0755 (исполняемый файл).

C:\Temp\TestRepo>git commit -m"Executable!"
[master (root-commit) 1f7a57a] Executable!
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100755 foo.sh

И теперь у нас есть одна фиксация с одним исполняемым файлом.

Ответ 2

Действительно, было бы хорошо, если бы git-add имел флаг --mode

git 2.9.x/2.10 (Q3 2016) фактически позволит это (благодаря Эдварду Томсону):

git add --chmod=+x -- afile
git commit -m"Executable!"

Это делает процесс более быстрым и работает, даже если для параметра core.filemode установлено значение false.

См. commit 4e55ed3 (31 мая 2016 года) Эдвард Томсон (ethomson).
Помощник: Йоханнес Шинделин (dscho).
(слияние Junio ​​C Hamano - gitster - в commit c8b080a, 06 июля 2016 г.

add: добавить --chmod=+x/--chmod=-x опции

исполняемый бит не будет обнаружен (и, следовательно, не будет set) для путей в репозитории с core.filemode установлено значение false, хотя пользователи по-прежнему могут добавлять файлы в качестве исполняемых файлов для совместимость с другими пользователями, у которых есть core.filemodeфункциональность.
Например, пользователи Windows, добавляющие сценарии оболочки, могут захотеть добавить их как исполняемые файлы для совместимости с пользователями на не-Windows.

Хотя это можно сделать с помощью команды сантехника (git update-index --add --chmod=+x foo), преподавание команды git-add позволяет пользователям устанавливать исполняемый файл с помощью команды, которую они уже знакомы с.

Ответ 3

Вам нужно выполнить следующую команду:

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

Зафиксируйте git, и вы должны хорошо идти!

Ответ 4

Если в файлах уже установлен флаг + x, git update-index --chmod=+x ничего не делает, а git считает, что нечего делать, хотя флаг не сохраняется в репо.

Сначала вы должны удалить флаг, запустите команду git, а затем верните флаг:

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

то git видит изменение и позволит вам зафиксировать изменение.

Ответ 5

Примечание. Во-первых, вы должны быть уверены в filemode, установленном в false в файле config git, или используйте эту команду:

git config core.filemode false

а затем вы можете установить разрешение 0777 с помощью этой команды:

git update-index --chmod=+x foo.sh