
Larry Cai
Ich verwende Git in Windows und möchte das ausführbare Shell-Skript mit einem Commit in das 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: 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 zum zweiten Commit
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:
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
Wie Sie bemerken, ist der Modus nach dem Hinzufügen 0644 (dh nicht ausführbar). Wir können es jedoch vor dem Commit als ausführbar markieren:
C:\Temp\TestRepo>git update-index --chmod=+x foo.sh
C:\Temp\TestRepo>git ls-files --stage
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 foo.sh
Und jetzt ist die Datei Modus 0755 (ausführbar).
C:\Temp\TestRepo>git commit -m"Executable!"
[master (root-commit) 1f7a57a] Executable!
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100755 foo.sh
Und jetzt haben wir einen einzigen Commit mit einer einzigen ausführbaren Datei.

VonC
In der Tat wäre es schön, wenn git-add
hatte ein --mode
Flagge
git 2.9.x/2.10 (Q3 2016) wird das tatsächlich erlauben (danke an Edward Thomson):
git add --chmod=+x -- afile
git commit -m"Executable!"
Das macht den ganzen Prozess schneller und funktioniert auch wenn core.filemode
ist auf false gesetzt.
Sehen Commit 4e55ed3 (31. Mai 2016) von Edward Thomson (ethomson
).
Geholfen von: Johannes Schindelin (dscho
).
(Zusammengeführt von Junio C. Hamano — gitster
— in c8b080a übergeben06.07.2016)
add
: addieren --chmod=+x
/ --chmod=-x
Optionen
Das Executable-Bit wird für Pfade in einem Repository mit nicht erkannt (und daher nicht gesetzt). core.filemode
auf “false” gesetzt, obwohl die Benutzer möglicherweise Dateien als ausführbar hinzufügen möchten, um die Kompatibilität mit anderen Benutzern zu gewährleisten, die tun verfügen über core.filemode
Funktionalität.
Beispielsweise möchten Windows-Benutzer, die Shell-Skripte hinzufügen, diese als ausführbar hinzufügen, um die Kompatibilität mit Benutzern von Nicht-Windows zu gewährleisten.
Obwohl dies mit einem Installationsbefehl (git update-index --add --chmod=+x foo
), Unterrichten der git-add
Mit dem Befehl können Benutzer eine ausführbare Datei mit einem Befehl festlegen, mit dem sie bereits vertraut sind.

Bohemien
Wenn die Dateien bereits das +x-Flag gesetzt haben, git update-index --chmod=+x
tut nichts und git denkt, dass es nichts zu übergeben gibt, 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:
chmod -x <file>
git update-index --chmod=+x <file>
chmod +x <file>
dann git sieht eine Änderung und erlaubt Ihnen, die Änderung zu übernehmen.
Erforderliche Git-Konfiguration für den Committer (Quelle: Nabis Antwort):
git config core.filemode false
Erforderliche Git-Konfiguration für den Kloner:
git config --global core.autocrlf input
Der Hinweis ist zunächst, dass Sie sich sicher sein müssen filemode
einstellen false
in der config-Git-Datei oder verwenden Sie diesen Befehl:
git config core.filemode false
und dann können Sie mit diesem Befehl die 0777-Berechtigung festlegen:
git update-index --chmod=+x foo.sh
ich habe keine touch
und chmod
Befehl in meiner cmd.exe und git update-index --chmod=+x foo.sh
funktioniert bei mir nicht.
Ich löse es schließlich durch Einstellung skip-worktree
bisschen:
git update-index --skip-worktree --chmod=+x foo.sh
9629600cookie-checkWie erstelle ich Berechtigungen für den Dateiausführungsmodus in Git unter Windows?yes
Mit git 2.9.x/2.10 (Q3 2016),
git add --chmod=+x
ist tatsächlich möglich. Siehe meine Antwort unten, Anerkennung an Edward Thomson.– VonC
9. Juli 2016 um 19:18 Uhr
Es würde sich lohnen, die ausgewählte Antwort auf die zu aktualisieren
git add --chmod=+x
Ausführung– Mikemaccana
17. September 2018 um 10:54 Uhr