Używam Git w systemie Windows i chcę wypchnąć wykonywalny skrypt powłoki do git repo za pomocą jednego zatwierdzenia.
Zwykle muszę zrobić dwa kroki ( 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
Jak połączyć te dwa kroki w jeden krok? konfiguracja git? polecenie Windows?
Przypomnij : Dwie odpowiedzi są dobre, git add --chmod=+x file
jest obsługiwane w nowej wersji git
Odniesienie: patrz pytanie w uprawnieniach do plików Git w systemie Windows dla drugiego zatwierdzenia
git add --chmod=+x
jest w rzeczywistości możliwe. Zobacz moją odpowiedź poniżej , podziękowania dla Edwarda Thomsona .git add --chmod=+x
wersjiOdpowiedzi:
Nie trzeba tego robić w dwóch zatwierdzeniach, możesz dodać plik i oznaczyć go jako wykonywalny w jednym zatwierdzeniu:
Jak zauważasz, po dodaniu tryb ma wartość 0644 (tzn. Nie jest wykonywalny). Możemy jednak oznaczyć go jako wykonywalny przed zatwierdzeniem:
A teraz plik ma tryb 0755 (wykonywalny).
A teraz mamy jedno zatwierdzenie z jednym plikiem wykonywalnym.
źródło
git 2.9.x / 2.10 (III kwartał 2016) faktycznie pozwoli na to (dzięki Edwardowi Thomsonowi ):
To sprawia, że cały proces jest szybszy i działa, nawet jeśli
core.filemode
jest ustawiony na false.Zobacz commit 4e55ed3 (31 maja 2016 r.), Autor: Edward Thomson (
ethomson
) .Pomocnik: Johannes Schindelin (
dscho
) .(Połączone przez Junio C Hamano -
gitster
- w commit c8b080a , 06 lipca 2016)źródło
Jeśli pliki mają już ustawioną flagę + x,
git update-index --chmod=+x
nic nie robi i git uważa, że nie ma nic do zatwierdzenia, nawet jeśli flaga nie jest zapisywana w repozytorium.Musisz najpierw usunąć flagę, uruchomić polecenie git, a następnie odłożyć flagę z powrotem:
wtedy git widzi zmianę i pozwoli ci ją zatwierdzić.
źródło
Uwaga: po pierwsze musisz się upewnić o
filemode
ustawieniu nafalse
plik config git lub użyj tego polecenia:a następnie możesz ustawić uprawnienie 0777 za pomocą tego polecenia:
źródło
Mam polecenie no
touch
ichmod
polecenie w moim cmd.exe igit update-index --chmod=+x foo.sh
nie działa dla mnie.W końcu rozwiązuję to, ustawiając
skip-worktree
bit:źródło