できればmagitを使用して、git repoルートディレクトリを取得します。


9

現在のgitリポジトリのルートディレクトリを取得するにはどうすればよいですか?のshell-command-to-stringようなもので走ることができましたgit rev-parse --show-toplevel。もっと良い方法はありますか?んmagitや他のgitのフロントエンドは、この情報を公開しますか?


あなたは意味するかgit rev-parse --show-toplevelの代わりにgit rev-parse --git-dir
Kyle Meyer、


@philsありがとう!私はabo-aboの回答の下のコメントの1つに同じリンクを投稿しています:)
Pradhan

ああ、あなたはそうしました:)
phils 2015

回答:


12

Magitでは、これは次のように使用できますmagit-toplevel(ただし、使用することが理にかなっているという@ abo-aboに同意しますvc-root-dir)。


vc-root-dir確かに最も一般的です。ただし、@ abo-aboの回答のコメントで述べたように、その形式で機能させることはできません。しかし、これはうまくいきました。ありがとう!
Pradhan、2015

7

あなたが必要vc-root-dirです。git以上で動作します。


3
詳しく説明してもらえますか?というタイトルの関数またはパッケージが表示されませんvc-root-dir。唯一近いのはvc-root-diffです。そして、vc関連する検索で、私はこれを見つけます
Pradhan

これは、組み込みのvc.elのオートロード機能です
abo-abo

おそらく私vcは年を取りすぎているのでしょうか?emacs 24.3が組み込まれています。私は見ていないvc-rootvc.elかでapropos見てみるなどvc.el、私のようなものを参照してください(setq rootdir (vc-call-backend...))。そして、実際に(vc-call-backend 'Git 'root default-directory)動作します。
Pradhan 2015

1
nb vc-root-dirこの段階ではトランクにのみいると思います。それは確かに24.4ではありません。おそらくそれは、Emacs 25で利用できるようになります
PHILS

2

abo-aboで述べたように、Emacs 25にはvc-root-dir、バックエンドにとらわれない方法で必要なことを実行するという関数があります。以前のバージョンのEmacsでは、次のものが適切な代替品です。

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

カイルが述べたように、Magitは関数を提供します。この関数magit-get-top-dirgit rev-parse --show-cdup、結果を呼び出して解釈するだけです。


1
確かに、の実装を見た後vc-root-diff、試しましたvc-deduce-backend。どういうわけか、それはnil私のgit-repoに戻ります。ただし、をvc-responsible-backend default-directory返しますGit
Pradhan

現在のバッファがによって追跡されていない場合はvc、をvc-deduce-backend返しますnil。それはそれを説明していますか?
jch 2015

1
ああ、そうだ。私はそれを実行し、使用することielmを期待していvc-deduce-backendましたdefault-directory。ありがとう!
Pradhan 2015

もしかしてvc-root-dir代わりにvc-root-diff
Michael Mrozek、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.