Как создать разрешения для режима выполнения файла в 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