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-string
trên một cái gì đó như git rev-parse --show-toplevel
. Có cách nào tốt hơn? Có magit
hay bất kỳ git front-end khác tiết lộ thông tin này?
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-string
trên một cái gì đó như git rev-parse --show-toplevel
. Có cách nào tốt hơn? Có magit
hay bất kỳ git front-end khác tiết lộ thông tin này?
Câu trả lời:
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-dir
chắ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!
Bạn cần vc-root-dir
. Hoạt động cho nhiều hơn git.
vc
quá già? Tôi có một tích hợp sẵn với emacs 24.3. Tôi không thấy vc-root
trong vc.el
hoặc với apropos
vv 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.
vc-root-dir
là 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.
Như đã đề cập bởi abo-abo, trong Emacs 25, có một chức năng được gọi là vc-root-dir
thự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-cdup
và giải thích kết quả.
vc-root-diff
, tôi đã thử vc-deduce-backend
. Bằng cách nào đó, điều đó trở lại nil
trong git-repo của tôi. Tuy nhiên, vc-responsible-backend default-directory
trả lại Git
.
vc
, sau đó vc-deduce-backend
trả về nil
. Điều đó giải thích nó?
ielm
và mong đợi vc-deduce-backend
để sử dụng default-directory
. Cảm ơn!
vc-root-dir
thay vì vc-root-diff
?
git rev-parse --show-toplevel
thay vìgit rev-parse --git-dir
?