2012-06-21 68 views
3
(let ((default-directory "/home/vision/")) 
    (magit-pull) 
    (magit-fetch "upstream") 
    (magit-merge "upstream/master") 
    (magit-push)) 

我越來越:如何運行magit同步

Running git fetch upstream 
Git is already running 

我如何可以等待取完嗎?

回答

6

Magit旨在作爲git的交互式前端,因此諸如magit-fetch之類的東西並不真正用於從您的代碼運行......但是如果您真的堅持,快速查看代碼會告訴您magit-process是一個在進程運行時保存進程的變量,並在完成時清除。因此,您可以使用一個循環,等待,直到出現這種情況使用它:

(progn 
    (magit-fetch "upstream") 
    (while magit-process (sleep-for 0.25)) 
    (magit-fetch "upstream")) 

但是這真的推動它 - 例如,當抓取失敗會發生什麼?

BTW,還有一點,你可以做的是看看源是在magit-fetch時的單線功能:

(apply 'magit-run-git-async "fetch" remote magit-custom-options) 

,寫代碼,使用非異步版本:

(progn 
    (apply 'magit-run-git "fetch" "upstream" magit-custom-options) 
    (apply 'magit-run-git "fetch" "upstream" magit-custom-options)) 

(你可以提出一個補丁添加一個可選的標誌參數,但是這似乎是一個互動的工具,一個不確定的特徵...)

0

這個問題似乎是與您的previous question相關。 你試圖用兩種方法來解決你使用Git從emacs的範圍內的問題:

  • 轉換bash腳本逐行在使用現有庫與git的互動來的Emacs Lisp

你的第一種方法顯然不起作用,你的第二種方法似乎更好。但是,magit並不意味着從您的代碼中使用。由於magit只對前端感興趣,因此這些功能可以隨時更改。任何不會中斷功能的更改都將被視爲安全。

如果你解釋了你的最終目標是什麼,這樣你可以得到更好的答案將是有用的。 您需要的可能是一個簡單的git別名,您可以從emacs調用。

+0

我想我必須在這裏使用一些沒有異步的東西,magit並非像@Eli Barzilay所說的那樣設計的。沒有概念性的最終目標,我只需要同步一些git存儲庫,也許添加一些額外的腳本,但它很簡單,直到我發現如何使用elisp改進它,例如購買添加配置文件。 – Cynede