Git:是否可以直接从文件缓冲区暂存选定区域?


14

使用Magit,您可以打开magit状态缓冲区,按TAB展开差异(或调RET出单独的差异缓冲区),标记块的一部分,然后按su登台/取消登台。非常好。

我想知道是否可以:

  • 编辑档案
  • 在文件缓冲区内选择一个区域,一个块或几个块
  • 登台/非登台所选区域或环绕点

您似乎对大块头vs.地区感到困惑。我已经编辑了您对magit的功能和您的问题的描述。不过,我可能没有正确猜到您要问的问题。
tarsius

@tarsius也许我很困惑,对我来说,区域是我刚刚在缓冲区内选择的区域,而块是已准备好上演的所选区域。我错了吗?
Nsukami _

2
“区域”是Emacs的术语,它是指点和标记之间的东西,即“选择”。“ Hunk”是一个Git术语,它以“ @@ -1,1 +1,1”开头,并在下一个开始新的Hunk的标题之前结束。Magit突出显示当前部分(可能是大块部分)的方式与Emacs突出显示该区域的方式基本相同,因此可能会引起您的困惑。
tarsius 2015年

1
在magit状态或仅用于diff的缓冲区中,您只需按一下,就可以暂存当前块,而不管您位于块内的哪个位置s。但是,您也可以通过标记部分内容来暂存部分大块(与在文件访问缓冲区中执行的方式相同),然后暂存。
tarsius

@tarsius正是我的意思,我的英语还不够熟练。
Nsukami _

Answers:


11

不,Magit不支持。将来的版本可能会。Git-Gutter现在支持它。该命令名为git-gutter:stage-hunk


虽然这确实演出了一个大块头,但它没有演出一个地区。
ocodo

我发现最好创建一个绑定来暂存一个大块,然后再创建另一个绑定来跳到下一个大块,并进行重复。还有一种方法可以暂存整个缓冲区,但此时最好还是从命令行执行。我发现最好使用git-gutter + magit在块级别进行提交。较大的更改不适合git-gutter。
Droogans '16

1

如前所述,git-gutter是一个扩展,旨在直接向您显示文件中的git信息,并从那里进行操作,而magit则专注于对diff进行操作。

暂时不打算将此功能用于git gutter(https://github.com/syohex/emacs-git-gutter/issues/91

但是,这是emacs lisp应该非常擅长擦除的事情(遍历某个区域中的块,然后将它们暂时淘汰)。我自己尝试了这种情况,几乎是这种情况,唯一的问题是git-gutter在您进行大块演出后启动了后台进程,并且不等待它完成,因此我不得不添加一些技巧性的技巧来解决这个问题。

以下emacs lisp函数可以完成您想要的操作。您可能需要将其绑定到某些键。

(defun my-git-stage-region ()
  (interactive)
  (let ((git-gutter:ask-p nil)
        (start (region-beginning))
        (end (region-end)))
    (save-excursion
      (goto-char start)
      (git-gutter:next-hunk 1)
      (while (< (point) end)
        (git-gutter:stage-hunk)
        ;; This is a hack to wait for git-gutter to finish
        ;; updating information (git-gutter kicks
        ;; of a process to update the diff information
        ;; and does not block)
        (while (get-buffer (git-gutter:diff-process-buffer (git-gutter:base-file)))
          (sit-for 0.05))
        (git-gutter:next-hunk 1)))))

注意:这不能拆分块,块完全上演或完全不上演。但是git-gutter往往具有相对较小的块,这正是我实现此功能的原因。
Att Righ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.