7

您如何在 magit 中列出跟踪的文件(git ls-files)?

4

5 回答 5

6

@tarsius 关于目前没有用于执行此操作的内置命令这一事实是正确的。

但是,您可以这样做:

: ls-files RET

:绑定到magit-git-command哪个允许您

异步执行 Git 子命令,显示输出。使用前缀参数在当前存储库的根目录中运行 Git。[...]


您当然可以通过录制键盘宏或定义自定义命令并将其绑定到您选择的键序列来自动化上述过程:

(defun magit-ls-files ()
  "List tracked files of current repository."
  (interactive)
  (if (derived-mode-p 'magit-mode)
      (magit-git-command "ls-files" default-directory)
    (message "Not in a Magit buffer.")))

(define-key magit-mode-map (kbd "K") 'magit-ls-files)
于 2014-08-10T09:52:11.200 回答
4

要跟进来自 @lindes 的评论,您可以配置 Magit 以在状态缓冲区中包含跟踪文件的列表,方法是

(magit-add-section-hook
   'magit-status-sections-hook
   'magit-insert-tracked-files
   nil
   'append)

例如在您的.emacs文件中。(有关此功能的详细信息,请参阅Status SectionsSection Hooks文档。)

然后,在 Magit 状态缓冲区中,键入j t@lindes 提到的键序列将转到跟踪文件部分。

于 2019-02-15T17:59:53.667 回答
2

Magit 不这样做,但dired-k显示每个文件的 (git) 状态,这可能就是您所需要的。

于 2014-07-28T20:30:37.997 回答
0

输出不是那么干净,但我一直在做的是l f TAB来自magit-status缓冲区。那是...

  1. l: 的小写“L” Logging,它调用magit-key-mode-popup-logging
  2. f: "f" for File log,它调用magit-file-log
  3. TAB: 调用minibuffer-complete

您可以使用自定义键绑定和/或宏使这更容易一些。

于 2015-06-01T04:21:25.073 回答
0

以下代码段对我很有用。要使用它,运行M-x my-git-dired并输入一个 git 工作目录(或子目录)。结果缓冲区是一个普通的 dired 缓冲区,因此可以对多个文件进行查询替换。

(defun my-git-dired (dir)
  (interactive
   "DDirectory inside a git repository: \n")
  (condition-case nil
      (dired (cons "*git-dired*" (my-git-ls-files dir)))
    (error (message "Execution of git-ls-files failed"))))

(defun my-git-ls-files (dir)
  (save-excursion
    (cd dir)
    (split-string
     ;; The following is shell-command-to-string with error handling added.
     (with-output-to-string
       (with-current-buffer
           standard-output
         (unless (= 0 (call-process shell-file-name nil t nil
                                    shell-command-switch "git ls-files"))
           (error "Not a git repo")))))))
于 2017-10-06T13:20:14.070 回答