Git-Dateiberechtigungen unter Windows

172

Ich habe ein paar Fragen zu Dateiberechtigungen in Git gelesen und bin immer noch etwas verwirrt. Ich habe ein Repo auf GitHub von einem anderen gegabelt. Nach dem Zusammenführen sollten sie identisch sein. Jedoch:

$ git diff --summary origin/epsilon master/epsilon
 mode change 100644 => 100755 ants/dist/sample_bots/csharp/compile.sh
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/MyBot.coffee
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/ants.coffee
 mode change 100644 => 100755 ants/util/block_test.sh
 mode change 100644 => 100755 manager/mass_skill_update.py
 mode change 100644 => 100755 worker/jailguard.py
 mode change 100644 => 100755 worker/release_stale_jails.py
 mode change 100644 => 100755 worker/start_worker.sh

Ich habe versucht, die Dateiberechtigungen zu ändern, aber die Diff-Ergebnisse werden dadurch nicht geändert.

Synesso
quelle

Antworten:

346

Die Lösung zum Ändern von Berechtigungen (auch) unter Windows habe ich hier gefunden: http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

Der folgende Befehl fügt beispielsweise einer beliebigen Datei die Berechtigung zum Ausführen des Benutzers hinzu:

git update-index --chmod=+x <file>
dedek
quelle
6
+1: genau das, was ich brauchte, um sicherzustellen, dass für die Shell-Skripte, die ich unter Windows festschreibe (wo ich core.filemodefestgelegt habe false), tatsächlich das Ausführungsbit gesetzt ist.
Tomlogic
In meinem Fall habe ich auch eine neue Zeile zur Datei hinzugefügt und konnte erst dann
festschreiben
5
In Windows brauchte ich mit git-bash --addaus irgendeinem Grund ein Flag für die Ausführung : git update-index --add --chmod=+x <file>. Danach war die Datei bereits mit dem chmod
Jefferson Quesado
Hat keine Wirkung mehr, weder in git bash noch in der Eingabeaufforderung cmd.exe.
Ben
106

Von einer anderen Frage hier zum Stackoverflow: Wie kann ich Git dazu bringen, Änderungen im Dateimodus (chmod) zu ignorieren?

Versuchen:

git config core.filemode false

Von git-config (1) :

   core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.
Corey Henderson
quelle
Vielen Dank. Das habe ich auch gesehen. Versuchte es und es machte keinen Unterschied.
Synesso
3
Ich hatte ähnliche Probleme wie das OP und konnte keine Änderungen vornehmen, egal wie hardich versuchte, sie zurückzusetzen. Das hat den Trick für mich getan.
Jo-Herman Haugholt
11
[project] /. git / config enthält möglicherweise dieselbe Einstellung und überschreibt ~ / .gitconfig. Wenn Sie versuchen, es global festzulegen, stellen Sie sicher, dass es nicht lokal überschrieben wird.
Binary Phile
1
Ich finde, dass dies leider auch für NTFS notwendig ist.
März 2377
1
Das ist die Antwort!
Andrew Surdu
29

Handlicher Einzeiler für Git Bash:

find . -name '*.sh' | xargs git update-index --chmod=+x

Alle .shDateien werden als ausführbar markiert . Danach müssen Sie nur noch git commit.

Benoit Blanchon
quelle
2
Kleine Korrektur für @ benoit-blanchon Einzeiler ... die .sh muss angegeben werden. finden . -name ' .sh' | xargs git update-index --chmod = + x
Steven der leicht amüsierte
Du hast recht, ich habe die Antwort bearbeitet. Danke @SteventheEasilyAmused.
Benoit Blanchon
15

Wenn Sie Cygwin git (oder auch Linux git, nehme ich an) verwenden, besteht eine gute Chance, dass Ihre core.filemode-Einstellung auf Projektebene in $ projdir / .git / config festgelegt wurde. Ich stellte fest, dass ich Folgendes tun musste, damit mein Cygwin-Git und mein Windows-Git auf einem Windows-Dateisystem gut koexistieren konnten, ohne dass ständig Änderungen im Dateimodus angezeigt wurden:

  • Löschen Sie die Zeileneinstellung core.filemode in $ projdir / .git / config
  • Führen Sie in Windows Git "git config --global core.filemode false" aus.

Auf diese Weise kann mein Cygwin-Git weiterhin Dateimodusänderungen anzeigen, die normalerweise relevant sind, und das Windows-Git anweisen, die angezeigten Dateimodusänderungen zu ignorieren, die normalerweise falsch positiv sind.

Skiphoppy
quelle
5

Ich habe es behoben, indem ich die Dateiberechtigungen in Ubuntu geändert, festgeschrieben, gepusht und alles in Ordnung gebracht habe. Scheint, als würde es mit msysgit unter Windows / NTFS einfach nicht funktionieren.

Synesso
quelle
Ich kann GitHub für Windows empfehlen. Wundervolle Oberfläche und wirklich schöne Shell, ich habe sogar relativ einfach SSH Key Setup und Git Flow Installation gemacht.
Sangoku
5

Überprüfen Sie zuerst die Dateiberechtigungen mit dem folgenden Befehl.

git ls-files --stage

Ändern Sie dann die Berechtigungen. Hier steht "x" für Ausführungsberechtigungen.

git update-index --chmod=+x 'scriptname.ext'

Überprüfen Sie nun die Berechtigungen erneut.

git ls-files --stage

==============================================

Wenn Sie einen Windows-PC verwenden, aber auf einem Linux-Computer bereitstellen. Führen Sie zuerst den folgenden Befehl aus, um die Kompatibilität mit Linux zu gewährleisten

dos2unix scriptname.ext scriptname.ext

Sireesh Yarlagadda
quelle
Gibt es keine Möglichkeit, so etwas zu tun git update-index --chmod=1777 'scriptname.ext'?
Alex Barker
Haben Sie zu dem Pfad navigiert, in dem sich die Skriptdatei befindet? @alex
Sireesh Yarlagadda