(let ((default-directory "/home/vision/"))
(magit-pull)
(magit-fetch "upstream")
(magit-merge "upstream/master")
(magit-push))
我得到了:
Running git fetch upstream
Git is already running
我如何等待获取结束?
答案 0 :(得分:5)
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))
(你可以建议一个补丁来添加一个可选的flag参数,但这似乎是交互式工具的一个iffy功能...)
答案 1 :(得分:0)
这个问题似乎与您的previous question有关。 您正试图通过两种方法解决在emacs中使用git的问题:
你的第一种方法显然不起作用,你的第二种方法似乎更好。但是,不能在代码中使用magit。由于magit只对前端感兴趣,因此功能可能随时发生变化。任何不破坏功能的更改都将被视为安全。
如果你解释了你的最终目标是什么,这将是有用的,这样你就可以得到更好的答案。 你需要的可能是一个简单的git别名,你可以从emacs调用。