Holen Sie sich das Git-Repo-Stammverzeichnis, vorzugsweise mit Magit

9

Wie kann ich das Stammverzeichnis des aktuellen Git-Repos erhalten? Ich könnte shell-command-to-stringauf so etwas laufen git rev-parse --show-toplevel. Gibt es einen besseren Weg? Enthüllt magitoder irgendein anderes Git-Frontend diese Informationen?

Pradhan
quelle
Meinst du git rev-parse --show-toplevelstatt git rev-parse --git-dir?
Kyle Meyer
@phils Danke! Ich habe den gleichen Link in einem der Kommentare unter abo-
Pradhan
Ah, also hast du es getan :)
Phils

Antworten:

12

In Magit ist dies verfügbar als magit-toplevel(aber ich stimme @ abo-abo zu, dass die Verwendung sinnvoll ist vc-root-dir).

Kyle Meyer
quelle
vc-root-dirist sicherlich die allgemeinste. Ich kann es jedoch nicht in dieser Form zum Laufen bringen, wie ich in den Kommentaren zu @ abo-abos Antwort erwähnt habe. Aber dieser hat gerade funktioniert. Vielen Dank!
Pradhan
7

Du brauchst vc-root-dir. Funktioniert für mehr als nur Git.

abo-abo
quelle
3
Könnten Sie näher darauf eingehen? Ich sehe keine Funktion oder ein Paket mit dem Titel vc-root-dir. Das einzige, was nah ist, ist vc-root-diff. Und bei einer vcverwandten Suche finde ich das .
Pradhan
Es ist eine automatisch geladene Funktion in vc.el, eingebaut
abo-abo
Vielleicht ist mein vczu alt? Ich habe die mit Emacs 24.3 eingebaut. Ich sehe nicht vc-rootin vc.eloder mit aproposusw. Beim Betrachten vc.elsehe ich Dinge wie (setq rootdir (vc-call-backend...)). Und in der Tat (vc-call-backend 'Git 'root default-directory)funktioniert.
Pradhan
1
nb Ich denke, es vc-root-dirist zu diesem Zeitpunkt nur im Kofferraum. Es ist sicherlich nicht in 24.4.
Voraussichtlich
2

Wie von abo-abo erwähnt, gibt es in Emacs 25 eine Funktion namens vc-root-dirbackend-agnostisch, die das tut, was Sie brauchen. Für frühere Versionen von Emacs ist Folgendes ein geeigneter Ersatz:

(defun vc-root-dir ()
  (let ((backend (vc-deduce-backend)))
    (and backend
         (ignore-errors
           (vc-call-backend backend 'root default-directory)))))

Wie von Kyle erwähnt, stellt Magit die Funktion bereit magit-get-top-dir, die git rev-parse --show-cdupdas Ergebnis einfach aufruft und interpretiert.

jch
quelle
1
In der Tat habe vc-root-diffich es versucht , nachdem ich mir die Implementierung von angesehen hatte vc-deduce-backend. Irgendwie kehrt das nilin meinem Git-Repo zurück. Gibt jedoch vc-responsible-backend default-directoryzurück Git.
Pradhan
Wenn der aktuelle Puffer nicht von verfolgt wird vc, wird vc-deduce-backendzurückgegeben nil. Erklärt das das?
jch
1
Ah, das tut es. Ich habe es ausgeführt ielmund erwartet, es vc-deduce-backendzu verwenden default-directory. Vielen Dank!
Pradhan
Meinten Sie vc-root-dirstatt vc-root-diff?
Michael Mrozek