Können Sie nicht einfach "cd / home / repo && git log" als Ihren Exec-Aufruf?
Alex Howansky
Ich habe einige seltsame Probleme damit. Ich beginne einen neuen Prozess, nicht wirklich ein Exec, aber ich weiß nicht viel, wie sie sich unterscheiden. Ich finde es einfacher, nur einen Parameter zu finden, um das Git-Verzeichnis anzugeben.
Ich bekomme immer fatal: Not a git repository (or any of the parent directories): .git. @Patrick Ich habe nichts abgelehnt?
Turm
3
@ Patrick Die Antwort wurde bearbeitet (es sagte ursprünglich, --work-dirich denke)
Gareth
1
Dies hat bei mir nicht funktioniert, da alle Dateien des Commits als gelöscht angezeigt wurden. Scheint, als würde das Commit überprüft, aber nicht der Ordnerinhalt. Weitere Informationen zur besseren Leistung finden Sie in der Antwort von @calandoa.
mxcd
2
Hat bei mir mit dem neuesten Git nicht funktioniert, aber mit der Option -C hat es funktioniert, Beispiel: Git -C /home/repo/.git log
D.Snap
1
Dies funktionierte tatsächlich nicht wie erwartet. Warum ist dies eine akzeptierte Antwort? Dadurch wird das aktuelle Verzeichnis als Arbeitsbaum verwendet und die angegebene .git-Datei für den Verlauf verwendet, was völlig falsch ist. Wenn Sie beispielsweise nicht nur das Protokoll anzeigen, z git status. -Cist der richtige Weg.
Dies ist fast gleichbedeutend mit --git-dirund --work-treeohne Anhängen des üblichen .gitOrdners
Bearbeiten:
Antwort abgelehnt ... ziemlich erstaunlich, da dies genau genommen die einzig richtige Antwort auf die Frage ist. Die Optionen --git-dirund --work-treesind nicht vorhanden, um von außerhalb des Arbeitsbaums auf das Repository zuzugreifen. Sie werden verwendet, um das Repository an einen .gitanderen Ort zu verschieben, und in einigen Fällen ist die Verwendung viel komplizierter.
Zum Beispiel, um nur das Protokoll von zu erhalten /home/repo/subdir:
git -C /home/repo/subdir log .
oder
git -C /home/repo log subdir
Es ist nicht möglich, log .mit --git-diroder zu verwenden --work-tree. Der Pfad muss verarbeitet werden, um den Unterpfad relativ zum oberen Rand des Arbeitsbaums zu extrahieren. Selbst in diesem Fall erkennt git ihn nicht als Pfad, wenn Sie die --Option nicht verwenden. Der einzig mögliche Weg ist also:
git --git-dir /home/repo/.git log -- subdir
Außerdem --work-treefunktioniert mit logUnterversion mit meiner Version (git 1.9.1) überhaupt nicht. Es wird einfach ignoriert:
git stashist ein weiteres Beispiel für einen Unterbefehl, der fehlschlägt, wenn --git-dirund --work-treeverwendet werden.
d5ve
4
Die Option -C wurde in Version 1.8.5 von git hinzugefügt, die 2013 veröffentlicht wurde.
d5ve
-C hat bei mir besser funktioniert als --git-dir ... -C berücksichtigt die Git-Konfigurationseinstellungen für das Repo. Ich verwende Git Version 1.9.5.msysgit.1
Straff
@calandoa müssen wir immer den Ort von der Wurzel angeben, eine weitere Sache, wenn der Name des Repos mehrere Wörter enthält, wie wir in diesen Code einfügen
Kasun Siyambalapitiya
17
Tatsächlich 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
Dies ähnelt der Antwort von @ max. Leider hat --git-dir nicht getan, was ich brauchte. bearbeiten Im Nachhinein schlug eine andere [vorherige] Antwort, die ich nicht gelesen hatte, die Verwendung vor --work-tree. Ich bin mir nicht sicher , ob Umgebung oder Flags besser geeignet ist , damit ich meine Antwort , falls darin jemand findet verwenden lassen würde, aber ich werde benutzen Einschalten --work-tree/ --git-dir.
Es gibt zwei Repos, eines in dem anderen, aber kein Submodul. das äußere Repo ignoriert es:
tools (outer repo)
gcc/4.9.2 (inner repo)
Was ich wollte, war die Ausgabe git rev-parse --show-prefixrelativ zum äußeren Repo. Folgendes habe ich mir ausgedacht (Bash-Syntax; zur besseren Lesbarkeit auf mehrere Zeilen aufgeteilt):
Antworten:
Versuchen:
Es ist wichtig, den Pfad bis zum .git-Verzeichnis Ihres Repositorys anzugeben. Andernfalls erhalten Sie nur eine Fehlermeldung mit folgenden Angaben:
quelle
fatal: Not a git repository (or any of the parent directories): .git
. @Patrick Ich habe nichts abgelehnt?--work-dir
ich denke)git status
.-C
ist der richtige Weg.Verwenden Sie
-C
Option ( docs ):Dies ist fast gleichbedeutend mit
--git-dir
und--work-tree
ohne Anhängen des üblichen.git
OrdnersBearbeiten:
Antwort abgelehnt ... ziemlich erstaunlich, da dies genau genommen die einzig richtige Antwort auf die Frage ist. Die Optionen
--git-dir
und--work-tree
sind nicht vorhanden, um von außerhalb des Arbeitsbaums auf das Repository zuzugreifen. Sie werden verwendet, um das Repository an einen.git
anderen Ort zu verschieben, und in einigen Fällen ist die Verwendung viel komplizierter.Zum Beispiel, um nur das Protokoll von zu erhalten
/home/repo/subdir
:oder
Es ist nicht möglich,
log .
mit--git-dir
oder zu verwenden--work-tree
. Der Pfad muss verarbeitet werden, um den Unterpfad relativ zum oberen Rand des Arbeitsbaums zu extrahieren. Selbst in diesem Fall erkennt git ihn nicht als Pfad, wenn Sie die--
Option nicht verwenden. Der einzig mögliche Weg ist also:Außerdem
--work-tree
funktioniert mitlog
Unterversion mit meiner Version (git 1.9.1) überhaupt nicht. Es wird einfach ignoriert:Ich verstehe nicht einmal, ob dies ein Fehler oder eine Funktion ist ... wie bei vielen Git-Design-Optionen üblich.
quelle
git stash
ist ein weiteres Beispiel für einen Unterbefehl, der fehlschlägt, wenn--git-dir
und--work-tree
verwendet werden.Tatsächlich müssen Sie --git-dir und --work-tree zusammen verwenden. Hier ist ein Beispiel:
quelle
Ich habe es oft versucht! Ich habe es endlich verstanden!
git -C dir --no-pager log --format='%an' -1 filename
Denken Sie daran, bitte fügen Sie nicht .git zu Ihrem hinzu
quelle
Dies ähnelt der Antwort von @ max. Leider hat --git-dir nicht getan, was ich brauchte. bearbeiten Im Nachhinein schlug eine andere [vorherige] Antwort, die ich nicht gelesen hatte, die Verwendung vor
--work-tree
. Ich bin mir nicht sicher , ob Umgebung oder Flags besser geeignet ist , damit ich meine Antwort , falls darin jemand findet verwenden lassen würde, aber ich werde benutzen Einschalten--work-tree
/--git-dir
.Es gibt zwei Repos, eines in dem anderen, aber kein Submodul. das äußere Repo ignoriert es:
Was ich wollte, war die Ausgabe
git rev-parse --show-prefix
relativ zum äußeren Repo. Folgendes habe ich mir ausgedacht (Bash-Syntax; zur besseren Lesbarkeit auf mehrere Zeilen aufgeteilt):Bei Ausführung aus 4.9.2 wird die Zeichenfolge erzeugt
gcc/4.9.2
.quelle
Für jeden Git-Befehl können Sie Folgendes tun:
Zum Beispiel, wenn Sie einen Git-Status erstellen möchten:
oder wenn Sie die Filiale überprüfen möchten, in der sich das Repo befindet:
quelle