Nhận thư mục gốc git repo, tốt nhất là với magit


9

Làm thế nào tôi có thể nhận được thư mục gốc của repo git hiện tại? Tôi có thể chạy shell-command-to-stringtrên một cái gì đó như git rev-parse --show-toplevel. Có cách nào tốt hơn? Có magithay bất kỳ git front-end khác tiết lộ thông tin này?


Bạn có nghĩa là git rev-parse --show-toplevelthay vì git rev-parse --git-dir?
Kyle Meyer


@phils Cảm ơn! Tôi có cùng một liên kết được đăng trong một trong những bình luận dưới câu trả lời của abo-abo :)
Pradhan

À, vậy là bạn đã làm :)
phils 17/215

Câu trả lời:


12

Trong Magit, điều này có sẵn dưới dạng magit-toplevel(nhưng tôi đồng ý với @ abo-abo rằng nó có ý nghĩa để sử dụng vc-root-dir).


vc-root-dirchắc chắn là chung chung nhất. Tuy nhiên, tôi không thể làm cho nó hoạt động ở dạng đó như tôi đã đề cập trong các nhận xét về câu trả lời của @ abo-abo. Nhưng cái này làm việc thẳng. Cảm ơn!
Pradhan

7

Bạn cần vc-root-dir. Hoạt động cho nhiều hơn git.


3
Bạn có thể giải thích? Tôi không thấy một chức năng hoặc một gói có tiêu đề vc-root-dir. Điều duy nhất gần gũi là vc-root-diff. Và trên một vctìm kiếm liên quan, tôi tìm thấy điều này .
Pradhan

Đây là một chức năng tự động tải trong vc.el, tích hợp sẵn
abo-abo

Có lẽ tôi đã vcquá già? Tôi có một tích hợp sẵn với emacs 24.3. Tôi không thấy vc-roottrong vc.elhoặc với aproposvv Nhìn vào vc.el, tôi thấy những thứ như thế (setq rootdir (vc-call-backend...)). Và thực sự, (vc-call-backend 'Git 'root default-directory)hoạt động.
Pradhan

1
nb tôi nghĩ vc-root-dirlà chỉ trong thân cây ở giai đoạn này. Nó chắc chắn không có trong 24.4. Có lẽ nó sẽ có sẵn trong Emacs 25.
phils

2

Như đã đề cập bởi abo-abo, trong Emacs 25, có một chức năng được gọi là vc-root-dirthực hiện những gì bạn cần theo cách thức phụ trợ. Đối với các phiên bản trước của Emacs, sau đây là sự thay thế phù hợp:

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

Như Kyle đã đề cập, Magit cung cấp chức năng magit-get-top-dir, chỉ đơn giản là gọi git rev-parse --show-cdupvà giải thích kết quả.


1
Thật vậy, sau khi xem xét việc thực hiện vc-root-diff, tôi đã thử vc-deduce-backend. Bằng cách nào đó, điều đó trở lại niltrong git-repo của tôi. Tuy nhiên, vc-responsible-backend default-directorytrả lại Git.
Pradhan

Nếu bộ đệm hiện tại không được theo dõi bởi vc, sau đó vc-deduce-backendtrả về nil. Điều đó giải thích nó?
JCH

1
À, nó làm. Tôi đã chạy nó ielmvà mong đợi vc-deduce-backendđể sử dụng default-directory. Cảm ơn!
Pradhan

Ý bạn là vc-root-dirthay vì vc-root-diff?
Michael Mrozek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.