git - 如何更有效地使用 Magit?

标签 git emacs elisp magit

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

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

但是我还是发现了一个比较shell命令行的缺点

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

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

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

非常感谢

最佳答案

我同意 Brian 的观点,你想做什么而 magit 不能通过简单的按键触发器来做?可能已经有一个键绑定(bind)了。如果不是,我只是 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. 我向下滚动到“更改”部分,然后在每个文件旁边按 Tab 以查看每个更改的差异。我要么按 s 暂存这些更改,要么按 u 取消暂存这些更改。
  6. 可选地,我可以查看差异代码并执行相同的 su 来暂存和取消暂存代码部分。如果我在某处有一些调试代码并想终止它,这很有用。
  7. 在我确认我的所有更改看起来不错并已准备就绪后,我键入 c 以打开 magit-edit-log。我键入我的提交消息,然后键入 C-c C-c 来提交它。然后 P 推送它。完成!

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

有时,当我通过 Magit 进行推送时会返回一个错误,通常是由于在推送之前我必须 pull 远程仓库中的新代码。在这种情况下,F pull 更改,然后 P 再次推送。老实说,出于某种原因,在这种情况下,我通常只是Ctrl-z,而不是通过 magit pull ,下 pull 到 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")))

关于git - 如何更有效地使用 Magit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5676977/

相关文章:

Emacs24 不会下载 marmalade-repo.org 文件

Git merge : why do I get a lot of merge conflicts after modifying the source on both linux and windows?

git - 是否可以使用 Ansible 在没有 "git submodule update"或 "command:"的情况下执行 "shell:"?

git - 找出哪些文件是版本控制的,现在匹配当前的 .gitignore

git - 删除远程仓库

Emacs 在 LaTeX 模式下更改字体

python - Emacs 24.3 python 模式在函数结束后错误地缩进代码

django - 小马模式可以与 django-html-mumamo-mode 一起使用吗?

c++ - 如何将 Emacs 24 配置为 K&R(或 Stroutrup)风格?

elisp - 转换十进制<->十六进制