Como posso obter o diretório raiz do repositório git atual? Eu poderia correr shell-command-to-string
em algo como git rev-parse --show-toplevel
. Existe uma maneira melhor? Algum magit
outro front-end do git expõe essas informações?
Como posso obter o diretório raiz do repositório git atual? Eu poderia correr shell-command-to-string
em algo como git rev-parse --show-toplevel
. Existe uma maneira melhor? Algum magit
outro front-end do git expõe essas informações?
Respostas:
No Magit, isso está disponível como magit-toplevel
(mas eu concordo com @ abo-abo que faz sentido usar vc-root-dir
).
vc-root-dir
é certamente o mais genérico. No entanto, não consigo fazê-lo funcionar dessa forma, como mencionei nos comentários na resposta do @ abo-abo. Mas este funcionou direito. Obrigado!
Você precisa vc-root-dir
. Funciona para mais do que git.
vc
seja velho demais? Eu tenho esse embutido no emacs 24.3. Não vejo vc-root
dentro vc.el
ou com apropos
etc. Olhando vc.el
, vejo coisas como (setq rootdir (vc-call-backend...))
. E, de fato, (vc-call-backend 'Git 'root default-directory)
funciona.
vc-root-dir
é apenas no porta-malas nesta fase. Certamente não está em 24.4. Presumivelmente, estarão disponíveis em Emacs 25.
Conforme mencionado por abo-abo, no Emacs 25, existe uma função chamada vc-root-dir
que faz o que você precisa de uma maneira independente de back-end. Para versões anteriores do Emacs, o seguinte é um substituto adequado:
(defun vc-root-dir ()
(let ((backend (vc-deduce-backend)))
(and backend
(ignore-errors
(vc-call-backend backend 'root default-directory)))))
Como mencionado por Kyle, o Magit fornece a função magit-get-top-dir
, que simplesmente chama git rev-parse --show-cdup
e interpreta o resultado.
vc-root-diff
, tentei vc-deduce-backend
. De alguma forma, isso retorna nil
no meu git-repo. No entanto, vc-responsible-backend default-directory
retorna Git
.
vc
, vc-deduce-backend
retornará nil
. Isso explica isso?
ielm
e esperando vc-deduce-backend
usar default-directory
. Obrigado!
vc-root-dir
vez de vc-root-diff
?
git rev-parse --show-toplevel
vez degit rev-parse --git-dir
?