it-swarm.com.de

Git-Dateiberechtigungen unter Windows

Ich habe ein paar Fragen zu den Dateiberechtigungen in Git gelesen und bin immer noch etwas verwirrt. Ich habe ein Repo auf GitHub erhalten, das sich von einem anderen unterscheidet. 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, Dateiberechtigungen zu ändern, aber es ändert sich nicht die Diff-Ergebnisse.

135
Synesso

Ich habe hier die Lösung gefunden, wie man (auch) Berechtigungen ändert: http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

Beispiel: Der folgende Befehl fügt dem Benutzer eine Ausführungsberechtigung für eine beliebige Datei hinzu:

git update-index --chmod=+x <file>
260
dedek

Von einer anderen Frage hier zu stackoverflow: Wie mache ich Git, um den 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.
85
Corey Henderson

Praktischer One-Liner für Git Bash:

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

Es wird alle .sh-Dateien als ausführbar kennzeichnen . Danach müssen Sie nur noch git commit.

27
Benoit Blanchon

Wenn Sie Cygwin git verwenden (oder auch Linux git, nehme ich an), besteht eine gute Chance, dass Ihre Einstellung für core.filemode 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 koexistierten, ohne dass ständig Änderungen im Dateimodus vorgenommen 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 Änderungen am Dateimodus sehen, die normalerweise relevant sind, während er den Windows-Git anweist, die Änderungen am Dateimodus zu ignorieren, die normalerweise falsch positiv sind.

8
skiphoppy

Ich habe es behoben, indem ich die Dateiberechtigungen in Ubuntu, Commit, Push und alles OK geändert habe. Anscheinend würde es mit msysgit unter Windows/NTFS nicht funktionieren.

5
Synesso

Überprüfen Sie zunächst die Berechtigungen.

git ls-files --stage

Dann ändern Sie die Berechtigungen

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

Überprüfen Sie nun erneut die Berechtigungen.

git ls-files --stage

0