(let ((default-directory "/home/vision/"))
(magit-pull)
(magit-fetch "upstream")
(magit-merge "upstream/master")
(magit-push))我得到了:
Running git fetch upstream
Git is already running如何等待获取完成?
发布于 2012-06-21 13:39:35
Magit旨在作为git的交互式前端,所以像magit-fetch这样的东西并不是真的打算从你的代码中运行...但是,如果您真的坚持,快速浏览一下代码就会发现,magit-process是一个变量,它在进程运行时保存它,当它完成时,它会被清除。因此,您可以将其与一个循环一起使用,该循环将等待该事件发生:
(progn
(magit-fetch "upstream")
(while magit-process (sleep-for 0.25))
(magit-fetch "upstream"))但这实际上是在推动它--例如,当fetch失败时会发生什么?
顺便说一句,你可以做的另一件事是查看源代码,它是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))(您可以建议一个补丁来添加一个可选的标志参数,但对于交互式工具来说,这似乎是一个可疑的功能……)
发布于 2012-06-21 22:35:07
这个问题似乎与你的previous question有关。您正在尝试通过两种方法来解决在emacs中使用git的问题:
进行交互
你的第一种方法显然不起作用,而你的第二种方法似乎更好。但是,magit并不是要在代码中使用的。这些函数随时都可能改变,因为magit只对前端感兴趣。任何不破坏功能的更改都将被认为是安全的。
如果你解释了你的最终目标是什么,这样你就可以得到一个更好的答案,这将是有用的。您需要的可能是一个简单的git别名,您可以从emacs调用它。
https://stackoverflow.com/questions/11131749
复制相似问题