Gibt es eine Möglichkeit, zu verhindern, dass Git beim Pull die Berechtigungen und Eigentümer ändert?

Gibt es eine Möglichkeit, zu verhindern, dass Git beim Pull die Berechtigungen und Eigentümer ändert?

Jedes Mal, wenn ich git pulloder ausführe git reset, gitwerden die von mir vorgenommenen Änderungen an Berechtigungen und Eigentumsrechten zurückgesetzt. Sehen Sie selbst:

#!/usr/bin/env bash
rm -rf 1 2

mkdir 1
cd 1
git init
echo 1 > 1 && git add 1 && git ci -m 1

git clone . ../2
cd $_
chmod 0640 1
chgrp http 1

cd ../1
echo 12 > 1 && git ci -am 2

cd ../2
stat 1
git pull
stat 1

Die Ausgabe:

$ ./1.sh 2>/dev/null | grep -F 'Access: ('
Access: (0640/-rw-r-----)  Uid: ( 1000/    yuri)   Gid: (   33/    http)
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    yuri)   Gid: ( 1000/    yuri)

Gibt es eine Möglichkeit, das Problem zu umgehen?

Ich möchte einige Dateien/Verzeichnisse für den Webserver zum Schreiben zugänglich machen.

Antwort1

Das klingt, als ob der von Ihnen verwendete Benutzer die Standardgruppe auf eingestellt hat yuri. Sie können dies folgendermaßen bestätigen:

$ id -a
uid=1000(saml) gid=1000(saml) groups=1000(saml),10(wheel),989(wireshark)

Die UID Ihres Kontos lautet: uid=1000(saml)Die Standardgruppe lautet git=1000(saml)und alle sekundären Gruppen folgen danach.

NOTIZ:Wenn Sie möchten, dass der Git-Klon bestimmte Eigentümer hat, haben Sie mindestens zwei Optionen.

Option 1

Richten Sie ein übergeordnetes Verzeichnis mit den gewünschten Berechtigungen ein:

$ mkdir topdir
$ chgrp http topdir
$ chmod g+s topdir

$ cd topdir
$ git clone ....

Dadurch wird das Verzeichnis gezwungen , die Anwendung topdirder Gruppe auf alle darunterliegenden Unterverzeichnisse zu erzwingen http. Dies funktioniert im Großen und Ganzen, kann aber zu Problemen führen, da die Gruppierung dieser Dateien nicht durch die oben vorgenommenen Änderungen erzwungen wird, wenn Sie Dateien in diesen Git-Clone-Arbeitsbereich verschieben.

Option 2

Bevor Sie mit der Arbeit beginnen, ändern Sie Ihre Standardgruppe wie httpfolgt:

$ newgrp http
$ git clone ...

Diese Methode erzwingt, dass für alle neu erstellten Dateien die Gruppe auf httpstatt auf Ihre normale Standardgruppe von eingestellt wird yuri. Dies funktioniert jedoch nur, solange Sie daran denken, newgrpvor der Arbeit in diesem Arbeitsbereich ein auszuführen.

Andere Optionen

Wenn keine dieser Möglichkeiten akzeptabel erscheint, können Sie stattdessen versuchen, ACLs im Git-Arbeitsbereichsverzeichnis zu verwenden. Diese werden in mehreren Fragen und Antworten auf dieser Site besprochen, beispielsweise in dieser Frage und Antwort mit dem Titel:Neue Dateien erben Gruppenberechtigungen unter Linux.

Antwort2

Die Lösung, die ich verwende, istFühren Sie den Befehl als Benutzer ausdas über die Berechtigungen verfügt, die Sie behalten möchten:

sudo -u user command

Dadurch wird verhindert, dass sich die Berechtigungen ändern. Ich verwende es, wenn ich Git-Repositorys auf meinem VPS aktualisiere und dabei die Dateiberechtigungen auf den Webserver-Benutzer eingestellt lasse.

Siehe auch die gleiche FrageHier.

verwandte Informationen