Wie fügt man chmod-Berechtigungen zu einer Datei in GIT hinzu?

10

Ich möchte git eine SH-Datei übergeben, möchte aber, dass sie ausführbar ist, wenn ich dieselbe Datei auf einem anderen Server auschecke.

Gibt es eine Möglichkeit, dies zu tun, ohne diese Datei auf den Servern, die die Datei auschecken, manuell zu kopieren?

    
Henley Chiu 05.12.2016, 16:33
quelle

2 Antworten

27

Laut Git-Dokumentation können Sie dies tun setze oder entferne das "ausführbare" Flag auf jeder verfolgten Datei, auf jedem System (ja, das funktioniert unter Windows) mit update-index sub-command.

Um eine Datei als ausführbare Datei festzulegen, verwenden Sie

%Vor%

und um das ausführbare Flag zu entfernen, verwenden Sie

%Vor%

Wenn das wie das reguläre Unix-Berechtigungssystem aussieht, ist es das nicht. In der Tat erlaubt Git nur ausführbare ( x ) Rechte und nur für Dateien zu setzen oder zu löschen.

Beginnend mit Git 2.9 können Sie eine Datei inszenieren UND das Flag mit einem einzigen Befehl hinzufügen:

%Vor%

Git verwaltet unter der Haube einen speziellen Dateimodus für jede Datei: 100644 für normale Dateien, 100755 für ausführbare Dateien. Sie können diese Modi mit dem Unterbefehl ls-file und der Option --stage anzeigen:

%Vor%

Standardmäßig versucht Git, die Dateisystemattribute zu berücksichtigen und den git-Dateimodus entsprechend einzustellen. Sie können dies deaktivieren, indem Sie die Option core.filemode auf false setzen:

%Vor%

Weitere Informationen finden Sie in Git docs .

>

Wenn Sie den Git-Datei-Modus nicht gesetzt haben, aber die Datei das richtige Dateisystem-Flag hat, versuchen Sie den Modus zu entfernen und setzen Sie erneut:

%Vor%     
Antwane 05.12.2016 16:37
quelle
5

Antwanes Antwort ist korrekt, und das sollte ein Kommentar sein, aber Kommentare haben nicht genug Platz und erlauben nicht Formatierung. :-) Ich möchte nur hinzufügen, dass in Git, Dateiberechtigungen nur 1 als 644 oder 755 (buchstabiert ( 100644 und 100755 ; der 100 part bedeutet "reguläre Datei"):

%Vor%

Der ehemalige-644-bedeutet, dass die Datei nicht ausführbar sein sollte und der letztere bedeutet, dass ausführbar sein sollte. Wie dies zu den tatsächlichen Dateimodi innerhalb Ihres Dateisystems wird, hängt etwas vom Betriebssystem ab. Auf Unix-ähnlichen Systemen werden die Bits durch Ihre umask Einstellung geleitet, die normalerweise 022 zum Entfernen wäre Schreibrechte von "group" und "other", oder 002 , um Schreibrechte nur von "other" zu entfernen. Es könnte auch 077 sein, wenn Sie sich besonders um den Datenschutz sorgen und die Lese-, Schreib- und Ausführungsrechte von "group" und "other" entfernen möchten.

1 Frühere Versionen von Git haben Gruppenberechtigungen gespeichert, so dass einige Repositories Baumeinträge mit dem Modus 664 enthalten. Modernes Git tut das nicht, aber da kein Teil eines Objekts jemals geändert werden kann, bleiben diese alten Berechtigungsbits in alten Baumobjekten erhalten.

    
torek 05.12.2016 17:23
quelle

Tags und Links