【问题标题】:How to Use Magit Even More Effectively?如何更有效地使用 Magit?
【发布时间】:2011-04-15 12:49:15
【问题描述】:

在使用 shell 对 git 进行了几个小时的试用后,我切换到了 magit

它非常简洁高效:我不再需要输入“git”来调用 git 命令了!

但我仍然发现比较 shell 命令行的一个缺点

每次我输入 : 来调用 git 命令时,输出都会在另一个窗口中弹出。我必须输入 C-x o 才能切换回来,然后再次输入 git 命令。

除了 emacs 中的 shell 模式之外,还有更好的方法可以同时保持输入和观察输出吗?

我应该将输出重新绑定到其他模式吗?哪一个?还是更优雅的解决方案?

非常感谢

【问题讨论】:

    标签: git emacs elisp magit


    【解决方案1】:

    我同意布赖恩的观点,你想做什么是 magit 无法通过简单的按键触发做的?可能已经有一个键绑定了。如果不是,我只需 C-z 进入 shell 并运行命令,然后输入 fg 将 emacs 带回前台。

    编辑:我的流程是这样的。

    1. 我开始新的一天工作。我在命令行中输入git diff 只是为了查看我是否有前一天未提交的更改(不要忘记enabled colors!)我在命令行中执行此操作的原因与 magit 不同,因为我不是在 emacs 中。
    2. 我要么在 emacs emacs file1 file2 中打开未提交的文件,要么打开一些我将要处理的文件。
    3. 在修复错误或完成新功能之前,我都会编写代码。
    4. 在 emacs 中,我输入 C-c i 以打开 Magit 状态窗口。
    5. 我向下滚动到“更改”部分,然后在每个文件旁边按选项卡以查看每个更改的差异。我要么按s 暂存这些更改,要么按u 取消暂存这些更改。
    6. 或者,我可以查看差异代码并执行相同的su 来暂存和取消暂存代码部分。如果我在某处有一些调试代码并想杀死它,这很有用。
    7. 在我确认我的所有更改看起来都不错并已上演后,我键入 c 打开 magit-edit-log。我输入我的提交信息,然后输入C-c C-c 来提交它。然后P 推送。完成!

    请注意,这听起来像是很多步骤,但它很快就会变得自然,整个过程实际上需要 30 秒来区分我的整个更改集、暂存它们并通过消息提交它们。一直呆在 Emacs 中。比下拉到命令行容易得多。

    当我通过 Magit 进行推送时,有时会返回错误,这通常是由远程仓库中的新代码引起的,我必须在推送之前拉取这些代码。在这种情况下F 拉取更改然后P 再次推送。老实说,出于某种原因,在这种情况下,我通常只是 Ctrl-z,而不是通过 magit,下拉到 shell、git pullgit push

    编辑:我想我记得 Magit 的默认差异颜色非常糟糕。我在我的 .emacs 中使用了以下内容,我确定我是从某个地方偷来的:

    ;; change magit diff colors                                                                                                                                                                                 
    (eval-after-load 'magit                                                                                                                                                                                     
      '(progn                                                                                                                                                                                                   
         (set-face-foreground 'magit-diff-add "green3")                                                                                                                                                         
         (set-face-foreground 'magit-diff-del "red3")                                                                                                                                                           
         (when (not window-system)                                                                                                                                                                              
           (set-face-background 'magit-item-highlight "black"))))                                                                                                                                               
    
    (add-to-list 'auto-mode-alist '("COMMIT_EDITMSG$" . diff-mode))                                                                                                                                             
    (eval-after-load 'diff-mode                                                                                                                                                                                 
      '(progn                                                                                                                                                                                                   
         (set-face-foreground 'diff-added "green4")                                                                                                                                                             
         (set-face-foreground 'diff-removed "red3")))
    

    【讨论】:

      【解决方案2】:

      当我使用 Magit 时,我通常在我的大部分工作中使用 Magit 的内置命令,而当我需要执行 Magit 内置命令无法完成的事情时,我只需使用常规终端即可。 Magit 有built in commands 用于我几乎所有的日常使用;您经常使用哪些 Magit 不提供且您不会在成熟的终端中使用的东西?

      【讨论】:

      • 叹息,我想这是因为 Magit 太棒了,我不想再回到终端了。在 emacs 中完成所有事情:-] 谢谢
      【解决方案3】:

      magit-run* 的建议解决了这个问题。可能会中断对magit-run* 的其他呼叫,我没有进一步测试...

      (defadvice magit-run* (around stay-in-magit activate)
        (flet ((pop-to-buffer (buf &optional act rec) (display-buffer buf act)))
          ad-do-it))
      

      【讨论】:

        猜你喜欢
        • 2013-02-12
        • 2019-07-04
        • 2013-07-15
        • 2021-08-24
        • 1970-01-01
        • 1970-01-01
        • 2013-07-10
        • 2017-04-22
        • 2012-11-09
        相关资源
        最近更新 更多