如何更有效地使用Magit?

时间:2011-04-15 12:49:16

标签: git emacs elisp magit

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

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

但我仍然发现比较shell命令行

有一个缺点

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

是否有更好的方法可以在emacs中的shell模式下同时输出和观看输出?

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

非常感谢

3 个答案:

答案 0 :(得分:4)

我同意Brian的意见,你想通过一个简单的按键触发器做什么?它可能已经存在密钥绑定。如果不是,我只需要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推动它。完成!
  8. 请注意,这听起来像很多步骤,但它变得很快自然,整个过程实际上需要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")))
    

答案 1 :(得分:2)

当我使用Magit时,我通常使用Magit的内置命令进行大部分工作,当我需要做Magit内置命令无法做到的事情时,我只使用常规终端。几乎所有的日常使用中,Magit都有built in commands;你有什么经常使用Magit不提供的,你无论如何都不会在一个成熟的终端上做什么?

答案 2 :(得分:0)

关于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))