2013-11-23 62 views
5

我最近开始在emacs中使用magit包,它非常实用且方便。我想做一些调整。默认情况下,如何让magit pull有rebase选项?

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

我使用gtags + global来进行代码浏览。如果我能够再次重建gtags,那就太棒了。 git pull成功后有没有钩子?

+0

有人可能会争辩说,你应该改变你的开发过程,以便接近不需要在'git pull'上合并/重新绑定。不要在共享分支上工作,但要创建自己的功能分支。 – lunaryorn

+0

请注意,在Magit 2中,这是内置于所有命令。只需打开该模式的弹出窗口,设置选项,然后选择'C-x C-s'将其保存为默认值。 – blujay

回答

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

+0

感谢您的输入。我正在寻找magit解决方案,因为我在emacs中使用它很多。关于gtags更新,我找到了这个解决方案。 https://github.com/rvoicilas/inotify-tools/wiki它可以更新如果任何修改的文件。 – sudurais

+0

Magit维护者在这里。对此,没有特定于磁道的选项,我认为不应该添加一个。 (如果我们在这里添加一个elisp选项,为什么不为其他每个git变量?)。使用git-config作为@lunaryorn进行本地设置是一个很好的解决方案。另外,你应该使用rebase命令('R')。就像合并命令('m')一样,它默认从配置的上游分支引入更改。 – tarsius

+0

我有一个问题,我认为这是相关的。在l(og)调用的弹出框中,有“-al:All(--all)”开关。有没有办法通过配置默认进行此操作?我可以通过编辑magit-key-mode.el中的magit-key-mode-generate函数来做到这一点,如 (logging'(list“--graph”“--all”)) 但是我会喜欢避免编辑原始文件。 –

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

该代码会做你想要什么,并可以很容易地添加默认选项为更多模式:

(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的回答,通过使代码更清晰和可扩展性提高了,花了我自己宝贵的时间奉献的改进回馈给社会,只有把它拍甚至不知道他们在做什么的人。每次发生这种情况(到目前为止,每次都发生这种情况),我想知道为什么我会浪费我的时间为这个网站做出贡献。