Ich verwende Git in Windows und möchte das ausführbare Shell-Skript mit einem Commit in Git Repo verschieben.
Normalerweise muss ich zwei Schritte ausführen ( 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
Wie kann ich diese beiden Schritte zu einem Schritt kombinieren? Git-Konfiguration? Windows-Befehl?
Erinnern Sie : Zwei Antworten sind gut, git add --chmod=+x file
wird in der neuen Git-Version unterstützt
Referenz: Siehe Frage in Git-Dateiberechtigungen unter Windows für das zweite Festschreiben
git add --chmod=+x
ist das tatsächlich möglich. Siehe meine Antwort unten , Dank an Edward Thomson .git add --chmod=+x
Version zu aktualisierenAntworten:
Es ist nicht erforderlich, dies in zwei Commits zu tun. Sie können die Datei hinzufügen und sie in einem einzigen Commit als ausführbar markieren:
Wie Sie bemerken, ist der Modus nach dem Hinzufügen 0644 (dh nicht ausführbar). Wir können es jedoch vor dem Festschreiben als ausführbar markieren:
Und jetzt ist die Datei Modus 0755 (ausführbar).
Und jetzt haben wir ein einziges Commit mit einer einzigen ausführbaren Datei.
quelle
git 2.9.x / 2.10 (Q3 2016) wird dies tatsächlich zulassen (danke an Edward Thomson ):
Das beschleunigt den gesamten Prozess und funktioniert auch dann, wenn
core.filemode
false festgelegt ist.Siehe Commit 4e55ed3 (31. Mai 2016) von Edward Thomson (
ethomson
) .Mit freundlicher Unterstützung von Johannes Schindelin (
dscho
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit c8b080a , 06. Juli 2016)quelle
Wenn für die Dateien bereits das Flag + x gesetzt ist,
git update-index --chmod=+x
wird nichts ausgeführt und git glaubt, dass nichts festgeschrieben werden muss, obwohl das Flag nicht im Repo gespeichert wird.Sie müssen zuerst das Flag entfernen, den Befehl git ausführen und dann das Flag zurücksetzen:
dann sieht git eine Änderung und ermöglicht es Ihnen, die Änderung zu übernehmen.
quelle
Der Hinweis lautet zunächst, dass Sie sicher sein müssen, dass
filemode
erfalse
in der Konfigurations-Git-Datei festgelegt ist, oder verwenden Sie diesen Befehl:und dann können Sie mit diesem Befehl die 0777-Berechtigung festlegen:
quelle
Ich habe kein
touch
undchmod
Befehl in meiner cmd.exe undgit update-index --chmod=+x foo.sh
funktioniert nicht für mich.Ich löse es schließlich durch Setzen von
skip-worktree
Bit:quelle