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?
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?
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-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!
Bạn cần vc-root-dir. Hoạt động cho nhiều hơn git.
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.
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.
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ả.
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.
vc, sau đó vc-deduce-backendtrả về nil. Điều đó giải thích nó?
ielmvà mong đợi vc-deduce-backendđể sử dụng default-directory. Cảm ơn!
vc-root-dirthay vì vc-root-diff?
git rev-parse --show-toplevelthay vìgit rev-parse --git-dir?