2
(let ((default-directory "/home/vision/"))
  (magit-pull)
  (magit-fetch "upstream")
  (magit-merge "upstream/master")
  (magit-push))

我越来越:

Running git fetch upstream
Git is already running

如何等待获取完成?

4

2 回答 2

5

Magit旨在作为 git 的交互式前端,因此magit-fetch并非真正打算从您的代码中运行...magit-process运行时,完成后清除。因此,您可以将它与等待直到发生这种情况的循环一起使用:

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

但这确实在推动它——例如,当获取失败时会发生什么?

顺便说一句,您可以做的另一件事是查看源代码,在这种情况下它是一个单行函数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-21T05:39:35.180 回答
0

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

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

您的第一种方法显然不起作用,而您的第二种方法似乎更好。但是,magit 并不意味着在您的代码中使用。由于 magit 只对前端感兴趣,因此功能可能随时更改。任何不破坏功能的更改都将被视为安全的。

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

于 2012-06-21T14:35:06.993 回答