2011-04-15 59 views
8

經過幾個小時的使用shell的git試用後,我切換到了magit如何更有效地使用Magit?

它非常整齊有效:我不需要輸入「git」來調用git命令了!

但我還是發現了一個缺點比較shell命令行

每次我輸入調用git的命令,輸出中的其他窗口彈出。我必須鍵入C-x o才能切換回來,然後再次鍵入git命令。

在emacs中,除了shell模式以外,是否還有更好的方法可以在輸出中同時輸入和查看輸出?

我應該重新綁定輸出到其他模式嗎?哪一個?還是更優雅的解決方案?

非常感謝

回答

2

我通常使用Magit內置在我的大部分工作的命令時,我使用Magit,只是使用普通的終端,當我需要做的事情,我不能從Magit的做內置命令。幾乎所有的日常使用都有Magit的built in commands;你經常使用什麼,Magit不提供,你不會在一個完整的終端無論如何做?

+0

唉,我想這是因爲Magit是如此之大,我不想回去終端了。在emacs中完成所有事情: - ]謝謝 – sfszh 2011-04-16 11:14:24

4

我同意Brian的看法,你想通過一個簡單的按鍵觸發器做什麼?它可能已經是一個鍵綁定了。如果不是,我只需要C-z放到shell並運行該命令,然後鍵入fg將emacs恢復到前臺。

編輯:我的流程是這樣的。

  1. 我開始工作的一天。我在命令行中輸入git diff只是爲了查看是否有前一天有任何未提交的更改(不要忘記enabled colors!)我在命令行中執行此操作的原因是由於我不在emacs中。
  2. 我要麼在emacs emacs file1 file2中打開未編譯的文件,要麼打開一些我正要處理的文件。
  3. 我編碼,直到我修復了一個錯誤或完成了一項新功能。
  4. 在emacs中輸入C-c i打開Magit狀態窗口。
  5. 我向下滾動到更改部分,並在每個文件旁邊按下標籤以查看每個更改的差異。我要麼按s來進行這些更改,要麼按u來取消這些更改。
  6. 或者,我可以查看diffs代碼,並執行相同的su來暫停和取消代碼段。有用的,如果我有一些調試代碼的地方,並希望殺死它。
  7. 當我確認我的所有變化看起來不錯,並且正在上演後,我輸入c打開magit-edit-log。我輸入我的提交信息,然後輸入C-c C-c來提交它。然後P推它。完成!

請注意,這聽起來像很多步驟,但它變得非常自然,整個過程需要30秒來區分我的整個變更集,階段和提交消息。同時留在Emacs。比下降到命令行要容易得多。

當我通過Magit進行推送時,有時會出現錯誤,通常是由於我在推送之前必須拉動的遠程回購中的新代碼造成的。在這種情況下,F再次推動更改然後P推。老實說,由於某種原因,而不是拉動magit,我通常只是Ctrl-z在這種情況下,下降到殼,git pull,和git 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"))) 
0

的建議上magit-run*解決這個問題。可能破壞其他調用magit-run*,我沒有測試這進一步...

(defadvice magit-run* (around stay-in-magit activate) 
    (flet ((pop-to-buffer (buf &optional act rec) (display-buffer buf act))) 
    ad-do-it))