Como posso obter o diretório raiz do repositório git atual? Eu poderia correr shell-command-to-stringem algo como git rev-parse --show-toplevel. Existe uma maneira melhor? Algum magitoutro 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-stringem algo como git rev-parse --show-toplevel. Existe uma maneira melhor? Algum magitoutro 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.
vcseja velho demais? Eu tenho esse embutido no emacs 24.3. Não vejo vc-rootdentro vc.elou com aproposetc. 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-dirque 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-cdupe interpreta o resultado.
vc-root-diff, tentei vc-deduce-backend. De alguma forma, isso retorna nilno meu git-repo. No entanto, vc-responsible-backend default-directoryretorna Git.
vc, vc-deduce-backendretornará nil. Isso explica isso?
ielme esperando vc-deduce-backendusar default-directory. Obrigado!
vc-root-dirvez de vc-root-diff?
git rev-parse --show-toplevelvez degit rev-parse --git-dir?