¿Cómo puedo obtener el directorio raíz del repositorio git actual? Podría correr shell-command-to-string
en algo así git rev-parse --show-toplevel
. ¿Hay una mejor manera? ¿ magit
O cualquier otro git front-end expone esta información?
¿Cómo puedo obtener el directorio raíz del repositorio git actual? Podría correr shell-command-to-string
en algo así git rev-parse --show-toplevel
. ¿Hay una mejor manera? ¿ magit
O cualquier otro git front-end expone esta información?
Respuestas:
En Magit, esto está disponible como magit-toplevel
(pero estoy de acuerdo con @ abo-abo en que tiene sentido usarlo vc-root-dir
).
vc-root-dir
Es seguramente el más genérico. Sin embargo, no puedo hacer que funcione de esa forma como mencioné en los comentarios sobre la respuesta de @ abo-abo. Pero este funcionó directamente. ¡Gracias!
Es necesario vc-root-dir
. Funciona por más que git.
vc
es demasiado viejo? Tengo el incorporado con emacs 24.3. No veo vc-root
en vc.el
o con apropos
etc. Mirando vc.el
, veo cosas como (setq rootdir (vc-call-backend...))
. Y de hecho, (vc-call-backend 'Git 'root default-directory)
funciona.
vc-root-dir
solo está en el baúl en esta etapa. Ciertamente no está en 24.4. Presumiblemente estará disponible en Emacs 25.
Como se menciona por abo-abo, en Emacs 25, hay una función llamada vc-root-dir
que hace lo que necesita de una manera independiente del backend. Para versiones anteriores de Emacs, el siguiente es un reemplazo adecuado:
(defun vc-root-dir ()
(let ((backend (vc-deduce-backend)))
(and backend
(ignore-errors
(vc-call-backend backend 'root default-directory)))))
Como mencionó Kyle, Magit proporciona la función magit-get-top-dir
, que simplemente llama git rev-parse --show-cdup
e interpreta el resultado.
vc-root-diff
, lo intenté vc-deduce-backend
. De alguna manera, eso regresa nil
en mi git-repo. Sin embargo, vc-responsible-backend default-directory
vuelve Git
.
vc
, entonces vc-deduce-backend
regresa nil
. ¿Eso lo explica?
ielm
y esperaba vc-deduce-backend
usarlo default-directory
. ¡Gracias!
vc-root-dir
lugar de vc-root-diff
?
git rev-parse --show-toplevel
lugar degit rev-parse --git-dir
?