250 Stimmen

Wie führe ich einen Git-Befehl aus, ohne im Repository zu sein?

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.

417voto

calandoa Punkte 5089

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.

116voto

max Punkte 32543

Versuchen Sie es:

git --git-dir=/home/repo/.git log

Es ist wichtig, dass Sie den Pfad bis zum .git-Verzeichnis Ihres Repositorys angeben. Andernfalls erhalten Sie nur eine Fehlermeldung, die in etwa so lautet:

fatal: Not a git repository

18voto

alberto56 Punkte 2869

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

13voto

penny chan Punkte 721

Ich habe es viele Male versucht! Ich habe es endlich geschafft!

git -C dir --no-pager log --format='%an' -1 filename

denken Sie bitte daran, dass Sie .git nicht zu Ihrem

-Verzeichnis

6voto

Paula Punkte 61

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.com

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.

Powered by:

X