Gemäß der offiziellen Dokumentation können Sie das Flag "ausführbar" für jede verfolgte Datei mit dem update-index
Unterbefehl setzen oder entfernen .
Verwenden Sie den folgenden Befehl, um das Flag zu setzen:
git update-index --chmod=+x path/to/file
Verwenden Sie zum Entfernen:
git update-index --chmod=-x path/to/file
Unter der Haube
Dies sieht zwar aus wie das reguläre Unix-Dateiberechtigungssystem, ist es aber nicht. Git unterhält für jede Datei in seinem internen Speicher einen speziellen "Modus":
100644
für reguläre Dateien
100755
für ausführbare
Sie können es mit dem ls-file
Unterbefehl visualisieren , mit der --stage
Option:
$ git ls-files --stage
100644 aee89ef43dc3b0ec6a7c6228f742377692b50484 0 .gitignore
100755 0ac339497485f7cc80d988561807906b2fd56172 0 my_executable_script.sh
Wenn Sie eine Datei zu einem Repository hinzufügen, versucht Git standardmäßig, die Dateisystemattribute zu berücksichtigen und den richtigen Dateimodus entsprechend festzulegen. Sie können dies deaktivieren, indem Sie die core.fileMode
Option auf false setzen:
git config core.fileMode false
Fehlerbehebung
Wenn der Git-Dateimodus irgendwann nicht mehr festgelegt ist, die Datei jedoch das richtige Dateisystem-Flag aufweist, versuchen Sie, den Modus zu entfernen und erneut festzulegen:
git update-index --chmod=-x path/to/file
git update-index --chmod=+x path/to/file
Bonus
Ab Git 2.9 können Sie eine Datei bereitstellen UND das Flag in einem Befehl setzen:
git add --chmod=+x path/to/file
Antwanes Antwort ist richtig, und dies sollte ein Kommentar sein, aber Kommentare haben nicht genügend Speicherplatz und erlauben keine Formatierung. :-) Ich möchte nur hinzufügen, dass in Git Dateiberechtigungen nur 1 als entweder
644
oder755
(geschrieben (100644
und100755
; der100
Teil bedeutet "normale Datei") aufgezeichnet werden :Die ehemaligen-644-Mittel , die die Datei sollte nicht ausführbar sein, und Letzteres bedeutet , dass es sollte ausführbar sein. Wie dies zu tatsächlichen Dateimodi in Ihrem Dateisystem wird, hängt etwas vom Betriebssystem ab. Auf Unix-ähnlichen Systemen werden die Bits durch Ihre
umask
Einstellung geleitet. Dies besteht normalerweise darin022
, die Schreibberechtigung von "Gruppe" und "Andere"002
zu entfernen oder die Schreibberechtigung nur von "Andere" zu entfernen. Dies kann auch der Fall sein,077
wenn Sie sich besonders um den Datenschutz sorgen und die Lese-, Schreib- und Ausführungsberechtigung sowohl von "group" als auch von "other" entfernen möchten.1 Extrem frühe Versionen von Git haben Gruppenberechtigungen gespeichert, sodass einige Repositorys Baumeinträge mit Modus enthalten
664
. Modernes Git nicht, aber da kein Teil eines Objekts jemals geändert werden kann, bleiben diese alten Berechtigungsbits in alten Baumobjekten bestehen.Die Änderung, nur 0644 oder 0755 zu speichern, erfolgte in Commit e44794706eeb57f2 , das vor Git v0.99 und vom 16. April 2005 liegt.
quelle
e44794706eeb57f2ee38ed1604821aa38b8ad9d2
, dh vor Git Version 0.99.