Aktualisieren und Festschreiben nur der Berechtigungen einer Datei mithilfe der Git-Versionskontrolle

186

Nur eine some.shDatei in eine ausführbare Datei ( chmod 755 ...) umgewandelt, wurden die Berechtigungen aktualisiert, aber nicht der Inhalt. Gibt es eine Möglichkeit , die Datei in git festzuschreiben, damit das ausführbare Bit beim Klonen / Auschecken / Ziehen wiederhergestellt / gesetzt wird ?

Update: Wie kann ich verfolgen, dass die neuen Berechtigungen an gesendet wurden github?

BreakPhreak
quelle

Antworten:

190

Standardmäßig aktualisiert git die Ausführungsdateiberechtigungen, wenn Sie sie ändern. Es werden keine anderen Berechtigungen geändert oder verfolgt.

Wenn Sie beim Ändern der Ausführungsberechtigung keine Änderungen sehen, haben Sie wahrscheinlich eine Konfiguration in git, die den Dateimodus ignoriert.

Schauen Sie in Ihr Projekt, in den .gitOrdner für die configDatei und Sie sollten so etwas sehen:

[core]
    filemode = false

Sie können es entweder truein Ihrem bevorzugten Texteditor ändern oder ausführen:

git config core.filemode true

Dann sollten Sie in der Lage sein, Ihre Dateien normal festzuschreiben. Es werden nur die Berechtigungsänderungen festgeschrieben.

Vincent B.
quelle
Danke! Wie kann ich verfolgen, dass die Berechtigungsänderungen an gesendet wurden github?
BreakPhreak
2
Sie können es sehen, wenn Sie eine Datei anzeigen (zum Beispiel finden Sie in der Rails-Gitignore-Datei 100644 als Dateiberechtigung)
Vincent B.
8
Ändern von Berechtigungen unter Windows mit git (Ändern der Dateiberechtigungen und Festschreiben
fooMonster
38
Diese Antwort ist falsch! Git verfolgt nur, ob eine Datei ausführbar ist oder nicht. Andere Dateiberechtigungen wie beschreibbar oder lesbar werden nicht erfasst. Weitere Informationen finden Sie unter stackoverflow.com/a/11231682/2311074 .
Adam
Für mich hat Webstorm die Änderung nicht erfasst, aber in git statussehe ich Änderungen.
Townsheriff
192

@ fooMonster Artikel hat bei mir funktioniert

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

Wie Sie sehen können, hat die Datei die Berechtigung 644 (wobei die 100 ignoriert werden). Wir möchten es auf 755 ändern:

# git update-index --chmod=+x script.sh

Übernehmen Sie die Änderungen

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh
ewwink
quelle
7
Es ist zu beachten, dass Sie tatsächlich '-x / + x' verwenden müssen. Sie können keine anderen Berechtigungen oder eine Bitmaske festlegen.
Devolus
Die Verwendung von note git commit -ahat nichts für mich getan, die Einstellung der Nachricht in der Befehlszeile jedoch. Bit einer Marotte
JonnyRaa
Die Befehlsreihenfolge sollte sein: # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
SimonDepelchin
29

Ich arbeite nicht für mich.

Der Modus ist wahr, die Dateiperms wurden geändert, aber Git sagt, dass es keine Arbeit zu tun gibt.

git init
git add dir/file
chmod 440 dir/file
git commit -a

Das Problem scheint zu sein, dass Git nur bestimmte Berechtigungsänderungen erkennt.

Otheus
quelle
51
Richtig - verfolgt gitwirklich nur, ob eine Datei ausführbar ist oder nicht, nicht den vollständigen Satz von * nix-Berechtigungen. Sie müssten also eine Datei zwischen ausführbar / nicht umschalten, um zu glauben, dass Sie etwas geändert haben, das es wert ist,
festgeschrieben
Ich konnte keine eindeutige Dokumentation finden: Mit welchem ​​Post-Action-Trigger kann ich die Dauerwellen möglicherweise entsprechend einstellen?
Otheus
2
Nun, es gibt einen post-checkoutHaken git, der einige Fälle abdecken würde, aber ich bin mir nicht sicher, ob dies alle möglichen Dinge abdecken würde, die Dateien in Ihrem Arbeitsbaum aktualisieren. Möglicherweise ist es besser, nur ein zusätzliches Shell-Skript in Ihrem Repo zu haben, das die Dinge entsprechend festlegt. Alternativ gibt es ein paar Projekte, die gitdas Speichern von Metadaten erweitern, aber ich habe noch nie eines davon ausprobiert ...
Twalberg
1
Ich habe die Dateiberechtigungen auf 777 geändert und habe dies getan git update-index --refresh, aber der Unterschied zeigt old mode 100644 new mode 100755. Es wurden nicht alle Berechtigungen aktualisiert
Hudac
Siehe @tishma Antwort hier stackoverflow.com/questions/14557106/… . Dies ist, was für mich funktioniert hat
Gary 69