Ich suchte nach einer Möglichkeit, den Befehl git über einen Pfad auszuführen und Änderungen am Repository unter einem anderen Pfad vorzunehmen. Also bin ich hier auf diese Frage gekommen.
Aber für meine speziellen Bedürfnisse hat weder die akzeptierte Antwort noch eine der anderen geholfen.
Ich musste Git-Befehle mit sudo -u USER /usr/bin/git
(einem anderen Benutzer, der es ausführt) ausführen . Und wie Sie vielleicht wissen, ist sudo nicht zulassen , dass ich den läuft cd
Befehl, so kann ich nicht sein , im Repository - Verzeichnis.
Also ging ich zur Manpage von git . Und unter den Optionen sah ich die --git-dir=<path>
:
--git-dir =
Legen Sie den Pfad zum Repository fest. Dies kann auch durch Setzen der Umgebungsvariablen GIT_DIR gesteuert werden. Dies kann ein absoluter oder relativer Pfad zum aktuellen Arbeitsverzeichnis sein.
Wenn es also jemandem hilft, können Sie immer noch git von einem Pfad verwenden und Änderungen an einem Repository "weit von Ihnen entfernt" vornehmen. Benutz einfach:
git --git-dir=/path/to/repository GIT_COMMAND
oder, um es als ein anderer Benutzer auszuführen, mache etwas wie:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository GIT_COMMAND
Auch aus der Manpage von git-init :
Wenn die Umgebungsvariable $ GIT_DIR festgelegt ist, gibt sie einen Pfad an, der anstelle von ./.git für die Basis des Repositorys verwendet werden soll.
Wenn Sie das Repository also im üblichen .git-Ordner starten möchten, müssen Sie es zusammen mit der --git-dir
Option angeben . z.B:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
Nach der Initialisierung des Repositorys /path/to/repo/.git
sollten alle weiteren Befehle die Option haben --work-tree=<path>
, wie auf der Manpage von git beschrieben:
--work-tree =
Legen Sie den Pfad zum Arbeitsbaum fest. Dies kann ein absoluter Pfad oder ein Pfad relativ zum aktuellen Arbeitsverzeichnis sein. Dies kann auch gesteuert werden, indem die Umgebungsvariable GIT_WORK_TREE und die Konfigurationsvariable core.worktree festgelegt werden (weitere Informationen finden Sie unter core.worktree in git-config (1)).
Der richtige Befehl, um git als anderer Benutzer auszuführen und ein neues Repository zu initialisieren, lautet:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' add /path/to/repository/*
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' commit -m 'MESSAGE'
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' remote add origin user@domain.com:path
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' push -u origin master