【问题标题】:How to make magit pull to have rebase option by default?如何使 magit pull 默认具有 rebase 选项?
【发布时间】:2013-11-23 03:15:37
【问题描述】:

我最近开始在 emacs 中使用 magit 包,它非常有用和方便。我想做一些调整。

如何使 magit pull 始终具有变基选项?目前它显示开关,我必须选择 -r --rebase。在我的开发过程中,我们总是变基。

我使用 gtags+global 进行代码浏览。在 magit pull 之后,如果我能有一个钩子来再次重建 gtags,那就太好了。 git pull 成功后有钩子吗?

【问题讨论】:

  • 有人可能会争辩说,你应该改变你的开发过程,几乎不需要合并/重新基于git pull。不要在共享分支上工作,而是创建自己的功能分支。
  • 注意,在 Magit 2 中,这是所有命令的内置功能。只需打开该模式的弹出窗口,设置选项,然后C-x C-s 将它们保存为默认值。

标签: git emacs magit gnu-global


【解决方案1】:

我不知道任何特定于 Magit 的设置,但您可以相应地配置 git 本身:

git config --global pull.rebase true

我强烈建议反对全局启用此设置。

正如我在评论中所说,你应该真正改变你的开发过程,这样就不需要在git pull 上进行合并/重新定位。不要在共享分支上工作,而是始终为您的工作创建自己的功能分支,并在需要时显式合并。

然后您可以显式配置存储库中的各个共享分支以进行变基,例如

git config --local branch.my-fancy-feature.rebase true

关于钩子,git pull 没有特定的钩子。但是,在树的其他更改上更新标记文件也没有什么害处,因此您可以只使用 post-rewrite(对于 git rebase)和 post-merge(对于 git merge)挂钩。

有关此类设置的详细信息,请参阅 Tim Pope 的帖子 Effortless Ctags with Git

【讨论】:

  • 感谢您的意见。我正在寻找 magit 解决方案,因为我在 emacs 中经常使用它。关于 gtags 更新,我找到了这个解决方案。 github.com/rvoicilas/inotify-tools/wiki如果有任何文件被修改,它可以更新。
  • 这里是 Magit 的维护者。对此没有特定于 magit 的选项,我认为添加一个不是一个好主意。 (如果我们在这里添加一个 elisp 选项,为什么不为每个其他 git 变量添加一个?)。按照@lunaryorn 的建议,使用 git-config 在本地进行设置是一个很好的解决方案。或者,您应该只使用 rebase 命令 (R)。就像默认从配置的上游分支引入更改的合并命令 (m)。
  • 我有一个问题,我认为是相关的。在 l(og) 调用的弹出窗口中,有“-al: All (--all)”开关。有没有办法通过配置默认启用它?我可以通过在 magit-key-mode.el 中编辑 magit-key-mode-generate 函数来做到这一点,例如 (logging '(list "--graph" "--all")) 但我想避免编辑原始文件。
  • 我实际上能够通过在我的 init.el 中重新定义弹出功能 (magit-key-mode-popup-logging) 以稍微更好的方式做到这一点。但我认为为这些硬编码(如我所想)选项进行切换很不错。 github.com/kaz-yos/emacs/blob/master/init.el#L1879..L1887
【解决方案2】:

这段代码会做你想做的事,并且可以很容易地为更多模式添加默认选项:

(defun magit-key-mode--add-default-options (arguments)
  (let* ((mode (car arguments))
         (options (cadr arguments))
         (default-options (cdr (assoc mode my/magit-default-options))))
    (list mode (delete-dups (delq nil (append options default-options))))))

(setq my/magit-default-options
      `(
        (pulling "--rebase")
        ))

(advice-add 'magit-key-mode :filter-args #'magit-key-mode--add-default-options)

注意:这应该是对doublep's answer 的编辑,但 4 人中有 3 人拒绝了该编辑。他们中没有一个人甚至没有接触过 Emacs.SE,他们的 SO 或 LinkedIn 个人资料中也没有提到 Emacs 或 Lisp。显然,不应该赋予不懂相关语言的人拒绝编辑的权力。

我来这里是为了寻找这个问题的答案,找到了 doublep 的答案,通过使代码更清晰和可扩展来改进它,并花费我自己宝贵的时间将改进回馈给社区,只是为了让它成功被那些甚至不知道自己在做什么的人打倒。每次发生这种情况(到目前为止,每次都发生),我想知道为什么我要浪费时间为这个网站做贡献。

【讨论】:

    【解决方案3】:

    将以下内容添加到您的.emacs

    (defun magit-key-mode--add-default-options (arguments)
      (if (eq (car arguments) 'pulling)
          (list 'pulling (list "--rebase"))
        arguments))
    (advice-add 'magit-key-mode :filter-args #'magit-key-mode--add-default-options)
    

    【讨论】:

      猜你喜欢
      • 2018-06-29
      • 2012-11-30
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2016-10-27
      • 2021-11-17
      • 2021-08-16
      相关资源
      最近更新 更多