Wie erstelle ich Berechtigungen für den Dateiausführungsmodus in Git unter Windows?

Lesezeit: 5 Minuten

Wie erstelle ich Berechtigungen fur den Dateiausfuhrungsmodus in Git unter
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

  • 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

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.

Wie erstelle ich Berechtigungen fur den Dateiausfuhrungsmodus in Git unter
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.

Wie erstelle ich Berechtigungen fur den Dateiausfuhrungsmodus in Git unter
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

  • … schrecklich! ist das immer noch so

    – HerrR

    27. Mai 2021 um 22:08 Uhr

  • @MrR Ja, immer noch der Fall. Ich glaube, das ist der schnellste Weg (am wenigsten git fu), um es zu beheben.

    – Böhmisch

    27. Mai 2021 um 22:10 Uhr

  • Ich habe das gemacht, Git sieht die Änderung, ich habe Commit gemacht und ins Repo gepusht, und wenn ich die Datei woanders verwende, wird die Erlaubnis verweigert … irgendeine Idee, was falsch sein kann? Ich lade die Datei aus dem Repo herunter und überprüfe die Berechtigungen und sie hat keine ausführbare Datei …

    – mrRobot

    9. Januar um 1:46

  • @mrRobot-Check git config: core.filemode sollte falsch sein. Wenn nicht, git config core.filemode false (Gutschrift Nabis Antwort)

    – Böhmisch

    9. Januar um 5:14


  • @Bohemian vielleicht hat mir das geholfen: git config --global core.autocrlf input

    – mrRobot

    9. Januar um 15:20 Uhr

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

  • Danke! Ich habe stundenlang versucht, das unter Windows herauszufinden, und das hat es für mich getan.

    – MSOhm

    18. November 2020 um 19:57 Uhr

  • Nur so konnte ich auch unter Windows 10 arbeiten.

    – lifeofguenter

    22. März 2021 um 20:40 Uhr

  • Danke! Ich habe stundenlang versucht, das unter Windows herauszufinden, und das hat es für mich getan.

    – MSOhm

    18. November 2020 um 19:57 Uhr

  • Nur so konnte ich auch unter Windows 10 arbeiten.

    – lifeofguenter

    22. März 2021 um 20:40 Uhr

962960cookie-checkWie erstelle ich Berechtigungen für den Dateiausführungsmodus in Git unter Windows?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy