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?
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:
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:
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% 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"):
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.
Tags und Links git