Gibt es eine Möglichkeit, Git-Befehle gegen ein Repository auszuführen, ohne in diesem Repository zu sein?
Zum Beispiel etwas in der Art: git /home/repo log
?
Bitte sagen Sie mir nicht, ich soll cd
dazu. Ich tue dies über eine exec
anrufen.
Gibt es eine Möglichkeit, Git-Befehle gegen ein Repository auszuführen, ohne in diesem Repository zu sein?
Zum Beispiel etwas in der Art: git /home/repo log
?
Bitte sagen Sie mir nicht, ich soll cd
dazu. Ich tue dies über eine exec
anrufen.
Utilice -C
als erstes Argument für git:
git -C /home/repo log
Per die Dokumente ist die Auswirkung davon:
-C <path>
Ausführen, als ob git in
<path>
anstelle des aktuellen Arbeitsverzeichnisses. ...
Dies ist fast gleichbedeutend mit --git-dir
y --work-tree
ohne das Anhängen der üblichen .git
Ordner. Allerdings sind die Optionen --git-dir
y --work-tree
existieren nicht, um von außerhalb des Arbeitsbaums auf das Repository zuzugreifen; sie werden verwendet, um die .git
Sie sind in manchen Fällen sehr viel komplizierter zu handhaben.
Zum Beispiel, um das Protokoll von /home/repo/subdir
nur:
git -C /home/repo/subdir log .
ou
git -C /home/repo log subdir
Es ist nicht möglich, die log .
con --git-dir
o --work-tree
. Der Pfad muss verarbeitet werden, um den Unterpfad relativ zur Spitze des Arbeitsbaums zu extrahieren, und selbst in diesem Fall wird Git ihn nicht als Pfad erkennen, wenn Sie nicht die --
Option, so dass der einzig mögliche Weg ist:
git --git-dir /home/repo/.git log -- subdir
Außerdem, --work-tree
funktioniert überhaupt nicht mit dem log
Unterbefehl mit meiner Version (git 1.9.1). Er wird einfach ignoriert:
git --git-dir /home/repo/.git --work-tree /home/repo/subdir log -- subdir
git --git-dir /home/repo/.git --work-tree /home/repo/whatever log -- subdir
Ich verstehe nicht einmal, ob dies ein Fehler oder ein Feature ist... wie üblich bei vielen Git-Design-Entscheidungen.
In der Tat müssen Sie --git-dir und --work-tree zusammen verwenden. Hier ist ein Beispiel:
local [] Desktop: mkdir git
local [] Desktop: cd git
local [] git: touch README.txt
local [] git: git init
Initialized empty Git repository in /Users/albert/Desktop/git/.git/
local [] git: cd ..
local [] Desktop: git --work-tree=git --git-dir=git/.git add .
local [] Desktop: git --work-tree=git --git-dir=git/.git commit -a -m 'initial commit, called from outside the git directory'
[master (root-commit) ee951b1] initial commit, called from outside the git directory
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.txt
local [] Desktop: cd git
local [] git: git log --pretty=oneline
ee951b161053e0e0948f9e2a36bfbb60f9c87abe initial commit, called from outside the git di
Für jeden Git-Befehl können Sie das tun:
git --git-dir=<PATH-TO-REPO>/.git --work-tree=<PATH-TO-REPO> <git-command>
Zum Beispiel, wenn Sie einen Git-Status durchführen wollen:
git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/ status
oder wenn Sie den Zweig überprüfen wollen, in dem sich das Repo befindet:
git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/ rev-parse --abbrev-ref HEAD
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.