Git Pull in einer Linux-Umgebung ändert den Besitzer der Dateien

12

Warum wird git pullder Eigentümer der Dateien jedes Mal geändert, wenn ich einen auf meinem Live-Server ausführe ? Ich mache weiterhin manuell a chown john:john index.php.

Was muss ich ändern, damit git pullder Eigentümer der Dateien automatisch der Eigentümer der Dateien ist oder bleibt , wenn ich eine Änderung vornehme john?

PinoyStackOverflower
quelle
1
Ist johnder Besitzer des aktuellen Verzeichnisses?
user000001
Ja, John ist der Besitzer des Verzeichnisses :)
PinoyStackOverflower
1
Welcher Benutzer läuft git pull?
Dienstag,
@ Gnouc root-Benutzer, ich bin in unserem Live-Server über SSH als root-Benutzer angemeldet :)
PinoyStackOverflower

Antworten:

11

Wenn Sie git pull(was äquivalent zu git fetch; git merge) verwenden, aktualisiert git Dateien, ohne den Besitzer zu ändern (git speichert diese Informationen nicht). Wenn jedoch neue Dateien erstellt werden müssen, wird der aktuelle Benutzer als Eigentümer festgelegt.

Es gibt verschiedene Lösungen, um dies zu lösen. Am einfachsten ist es wahrscheinlich, einen post-updateHook (in Ihrem .git/hooksVerzeichnis) hinzuzufügen , der chown john:john . -Rnach dem Zusammenführen / Ziehen automatisch aufgerufen wird ( ein Beispiel finden Sie in dieser SO-Lösung ).

Alternative Lösungen sind:

  • Führen Sie git pullals Benutzer john anstelle von root aus (für das Verzeichnis .git sind Schreibberechtigungen für john erforderlich).
  • Erstellen Sie einen Hook, um das Deployment durchzuführen, bei dem entweder John als Benutzer verwendet wird, oder der nach dem Update angezeigt wird (Sie müssen also git pullden post-receiveHook des Bare Repo verwenden).
Asenar
quelle
Was ist, wenn Sie git fetchals root und dann git mergeals user john arbeiten? Braucht John noch Schreibrechte für das .gitVerzeichnis?
Wildcard
Ja, meistens. git fetchNeue Dateien in .git / objects haben als root möglicherweise root als Eigentümer. git mergeAls Benutzer wird John (meistens) versuchen, mindestens .git/indexund .git/HEAD(was bei jeder Änderung gelöscht / erstellt werden könnte, nehme ich an) zu überschreiben und einige Dateien in zu schreiben .git/objects/. + Alle neuen Dateien in Ihrem Arbeitsverzeichnis. Vielleicht gibt es zum Beispiel Ausnahmen beim Schnellvorlauf.
Asenar