Добавить исполняемый флаг в Git за один коммит на Windows
Используйте git add --chmod=+x, чтобы установить флаг исполняемости для скрипта в одном коммите на Windows. Нет необходимости в отдельном git update-index. В Git 2.9+ это работает в Git Bash, PowerShell и CMD.
Как задать права исполняемого файла для shell‑скрипта в репозитории Git на Windows в одном коммите, без отдельного шага git update-index --chmod=+x?
Я использую Git на Windows и хочу запушить исполняемый shell‑скрипт (install.sh) в репозиторий одним коммитом. В данный момент я делаю так:
- Создаю файл и коммитирую его как обычно:bash
vi install.sh git add install.sh git commit -am "add new file for installation" - Затем выполняю второй коммит, чтобы выставить флаг исполняемости:bash
git update-index --chmod=+x install.sh git commit -am "update file permission"
Существует ли настройка Git, команда Windows или иной способ, который позволит объединить эти шаги, чтобы файл был добавлен с правом исполняемого сразу в первом коммите?
Вы можете добавить файл и установить бит исполняемости одним шагом с помощью git add --chmod=+x.
С Git 2.9+ (версия, поставляемая с последним Git for Windows) опция --chmod в git add записывает флаг исполняемости в индекс, так что один git commit — всё, что нужно, на самом деле.
Понимание режима «executable» в Windows
Windows‑файловая система не хранит Unix‑подобный бит исполнения, но Git на Windows всё равно может сохранять его в репозитории, на самом деле.
Когда вы добавляете файл, Git по умолчанию ставит 100644 (не исполняемый).
Чтобы задать 100755 (исполняемый), нужно явно указать флаг при добавлении.
Git 2.9+ добавил поддержку
--chmodвgit add.
Источник: Stack Overflow – How to create file execute mode permissions in Git on Windows?
Использование git add --chmod=+x
git add --chmod=+x install.sh
git commit -m "Add install.sh as executable"
git push
--chmod=+x— передаёт флаг исполнения в индекс.- После
git commitв репозитории будет храниться режим100755, и при checkout на Linux/Mac файл будет исполняемым, на самом деле.
Это работает в любой оболочке Git (Git Bash, PowerShell, CMD) на Windows.
Источник: Dev.to – Chmod +x by Git on Windows
Практический пример: добавление install.sh
# 1. Создайте скрипт
echo '#!/usr/bin/env bash' > install.sh
echo 'echo "Installing…"'
# 2. Добавьте и пометьте как исполняемый
git add --chmod=+x install.sh
# 3. Сделайте один коммит
git commit -m "Add install.sh executable"
git push
После этого файл будет храниться в репозитории как исполняемый, и вам не понадобится второй коммит, на самом деле.
Альтернативные варианты и сокращения команд
-
Алиас в
.gitconfigbashgit config --global alias.addx "add --chmod=+x" # затем git addx install.sh git commit -m "Add install.sh executable" -
Коммит с поправкой уже существующего файла
Впрочем, если вы уже закоммитили файл без флага, можно поправить коммит без второго коммита:bashgit add --chmod=+x install.sh git commit --amend --no-edit git push --force-with-lease -
Добавление всех новых скриптов сразу
bashgit add --chmod=+x *.sh git commit -m "Add all scripts executable"
Что делать, если у вас более старая версия Git
-
В Git до 2.9
--chmodне поддерживается, на самом деле. -
Тогда используйте
git update-index --chmod=+xкак вы делали ранее. -
Вы можете добавить алиас, чтобы не писать длинную команду:
bashgit config --global alias.setx "update-index --chmod=+x" # затем git setx install.sh git commit -am "Add install.sh executable"
Источник: Stack Overflow – How to add chmod permissions to file in Git?
Заключение
- Главный ход:
git add --chmod=+x+ обычный коммит, на самом деле. - Нужна версия Git ≥ 2.9; в более ранних версиях используйте
git update-index. - Можно ускорить процесс с помощью алиасов (
git config --global alias.addx "add --chmod=+x"). - Если файл уже закоммичен, поправьте commit с
git commit --amend.
Таким образом, вы сможете добавить исполняемый скрипт в репозиторий Windows‑Git одним коммитом, без лишних шагов.