Obtenha o diretório raiz do git repo, de preferência com o magit


9

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?


Você quer dizer em git rev-parse --show-toplevelvez de git rev-parse --git-dir?
Kyle Meyer


@phils Obrigado! Eu tenho esse mesmo link postado em um dos comentários sob a resposta de abo-abo :)
Pradhan

Ah, então você fez :)
phils

Respostas:


12

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!
Pradhan

7

Você precisa vc-root-dir. Funciona para mais do que git.


3
Você poderia elaborar? Não vejo uma função ou um pacote intitulado vc-root-dir. A única coisa que está perto é vc-root-diff. E em uma vcpesquisa relacionada, acho isso .
Pradhan

É uma função de carregamento automático no vc.el, embutido
abo-abo

Talvez o meu 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.
Pradhan

11
nb eu acho que vc-root-diré apenas no porta-malas nesta fase. Certamente não está em 24.4. Presumivelmente, estarão disponíveis em Emacs 25.
phils

2

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.


11
De fato, depois de analisar a implementação do vc-root-diff, tentei vc-deduce-backend. De alguma forma, isso retorna nilno meu git-repo. No entanto, vc-responsible-backend default-directoryretorna Git.
Pradhan

Se o buffer atual não for rastreado vc, vc-deduce-backendretornará nil. Isso explica isso?
jch 17/02/2015

11
Ah sim. Eu estava executando ielme esperando vc-deduce-backendusar default-directory. Obrigado!
Pradhan

Você quis dizer em vc-root-dirvez de vc-root-diff?
Michael Mrozek
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.