Wie erstelle ich Berechtigungen für den Datei-Ausführungsmodus in Git unter Windows?

Ich benutze Git in Windows und möchte das ausführbare Shell-Skript mit einem Commit in git repo pushen.

Normalerweise muss ich zwei Schritte machen ( 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 in einem Schritt kombinieren? Git-Konfiguration? Windows-Befehl?

Referenz: Siehe Frage in Git-Dateiberechtigungen unter Windows für das zweite Commit

   

Es ist nicht notwendig, dies in zwei Commits zu tun, Sie können die Datei hinzufügen und sie in einem einzigen Commit 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 nach dem Hinzufügen der Modus 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.

In der Tat wäre es nett, wenn git-add ein --mode Flag hätte

git 2.9.x / 2.10 (Q3 2016) erlaubt das tatsächlich (danke an Edward Thomson ):

 git add --chmod=+x -- afile git commit -m"Executable!" 

Das beschleunigt den gesamten process und funktioniert auch, wenn core.filemode auf false festgelegt ist.

Siehe Commit 4e55ed3 (31. Mai 2016) von Edward Thomson ( ethomson ) .
dscho : Johannes Schindelin ( dscho ) .
(Zusammengeführt von Junio ​​C Hamano – gitster – in commit c8b080a , 06 Jul 2016)

add : add --chmod=+x / --chmod=-x Optionen

Das ausführbare Bit wird für Pfade in einem Repository mit core.filemode das auf “false” gesetzt ist, nicht erkannt (und wird daher nicht gesetzt), obwohl die Benutzer Dateien dennoch als ausführbar hinzufügen möchten, um Kompatibilität mit anderen Benutzern mit core.filemode functionalität.
Beispielsweise können Windows-Benutzer, die Shell-Skripts hinzufügen, diese möglicherweise als ausführbare Datei hinzufügen, um die Kompatibilität mit Benutzern unter Nicht-Windows-Betriebssystemen zu gewährleisten.

Obwohl dies mit einem Installationsbefehl ( git update-index --add --chmod=+x foo ) ausgeführt werden kann, können Benutzer mit dem Befehl git-add eine ausführbare Datei mit einem ihnen vertrauten Befehl einrichten .

Sie müssen folgenden Befehl ausführen:

 git update-index --chmod=+x  

Begib dich auf git und du solltest gut gehen!

Wenn die Dateien bereits das Flag + x gesetzt haben, tut git update-index --chmod=+x nichts und git denkt, dass nichts zu committen ist, 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ück setzen:

 chmod -x  git update-index --chmod=+x  chmod +x  

dann git sieht eine Veränderung und ermöglicht es Ihnen, die Änderung zu begehen.

Der Hinweis ist zunächst, dass Sie sicher sein müssen, dass der filemode in der Config-Git-Datei auf false gesetzt ist, oder verwenden Sie diesen Befehl:

 git config core.filemode false 

und dann können Sie die Berechtigung 0777 mit diesem Befehl festlegen:

 git update-index --chmod=+x foo.sh