如何更有效地使用Magit?

sfs*_*szh 8 git emacs elisp magit

在使用shell进行了几个小时的git试验之后,我转而使用magit

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

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

每次我输入:调用git命令时,输出都会弹出另一个窗口.我不得不键入C-x o切换回来再键入git命令.

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

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

非常感谢

Mau*_*ord 6

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

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

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

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

有时,当我通过 Magit 进行推送时会返回错误,通常是由于远程存储库中的新代码导致我必须在推送之前拉取。在这种情况下F,先拉动更改,然后P再次推送。老实说,由于某种原因,我通常不会通过magit,而是Ctrl-z在这种情况下,下降到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")))
Run Code Online (Sandbox Code Playgroud)


Bri*_*ell 2

当我使用 Magit 时,我通常使用 Magit 的内置命令来完成大部分工作,而当我需要执行 Magit 内置命令无法完成的操作时,只需使用常规终端即可。Magit内置了几乎适合我所有日常使用的命令;你经常使用哪些 Magit 不提供的功能,而且你无论如何也不会在成熟的终端中使用?