首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同步运行magit

如何同步运行magit
EN

Stack Overflow用户
提问于 2012-06-21 13:00:57
回答 2查看 420关注 0票数 2
代码语言:javascript
复制
(let ((default-directory "/home/vision/"))
  (magit-pull)
  (magit-fetch "upstream")
  (magit-merge "upstream/master")
  (magit-push))

我得到了:

代码语言:javascript
复制
Running git fetch upstream
Git is already running

如何等待获取完成?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-21 13:39:35

Magit旨在作为git的交互式前端,所以像magit-fetch这样的东西并不是真的打算从你的代码中运行...但是,如果您真的坚持,快速浏览一下代码就会发现,magit-process是一个变量,它在进程运行时保存它,当它完成时,它会被清除。因此,您可以将其与一个循环一起使用,该循环将等待该事件发生:

代码语言:javascript
复制
(progn
  (magit-fetch "upstream")
  (while magit-process (sleep-for 0.25))
  (magit-fetch "upstream"))

但这实际上是在推动它--例如,当fetch失败时会发生什么?

顺便说一句,你可以做的另一件事是查看源代码,它是magit-fetch中的一行函数:

代码语言:javascript
复制
(apply 'magit-run-git-async "fetch" remote magit-custom-options)

并编写使用非异步版本的代码:

代码语言:javascript
复制
(progn
  (apply 'magit-run-git "fetch" "upstream" magit-custom-options)
  (apply 'magit-run-git "fetch" "upstream" magit-custom-options))

(您可以建议一个补丁来添加一个可选的标志参数,但对于交互式工具来说,这似乎是一个可疑的功能……)

票数 5
EN

Stack Overflow用户

发布于 2012-06-21 22:35:07

这个问题似乎与你的previous question有关。您正在尝试通过两种方法来解决在emacs中使用git的问题:

  • 使用现有库将bash脚本逐行转换为emacs lisp
  • 与git

进行交互

你的第一种方法显然不起作用,而你的第二种方法似乎更好。但是,magit并不是要在代码中使用的。这些函数随时都可能改变,因为magit只对前端感兴趣。任何不破坏功能的更改都将被认为是安全的。

如果你解释了你的最终目标是什么,这样你就可以得到一个更好的答案,这将是有用的。您需要的可能是一个简单的git别名,您可以从emacs调用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11131749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档