如何使magit pull默认具有rebase选项?

时间:2013-11-23 03:15:37

标签: git emacs magit gnu-global

我最近开始在emacs中使用magit包,它非常实用且方便。我想做几个调整。

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

我使用gtags + global进行代码浏览。在magit pull,如果我能有一个钩子再次重建gtags那将是很好的。 git拉成功后有钩子吗?。

3 个答案:

答案 0 :(得分:3)

我不知道任何特定于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

答案 1 :(得分:2)

将以下内容添加到.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)

答案 2 :(得分: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的答案,通过使代码更清晰和可扩展来改进它,并花费我自己宝贵的时间将改进贡献给社区,只是为了拍摄那些甚至不知道自己在做什么的人都会失望。每当这种情况发生时(而且,到目前为止,它每次都发生过),我想知道为什么我在浪费时间为这个网站做贡献。