2013-11-23 66 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的回答,通過使代碼更清晰和可擴展性提高了,花了我自己寶貴的時間奉獻的改進回饋給社會,只有把它拍甚至不知道他們在做什麼的人。每次發生這種情況(到目前爲止,每次都發生這種情況),我想知道爲什麼我會浪費我的時間爲這個網站做出貢獻。