【问题标题】:How to run magit synchronously如何同步运行magit
【发布时间】:2012-06-21 05:00:57
【问题描述】:
(let ((default-directory "/home/vision/"))
  (magit-pull)
  (magit-fetch "upstream")
  (magit-merge "upstream/master")
  (magit-push))

我明白了:

Running git fetch upstream
Git is already running

如何等待获取完成?

【问题讨论】:

    标签: emacs elisp magit


    【解决方案1】:

    Magit 旨在作为 git 的交互式前端,因此 magit-fetch 之类的东西并不是真正打算从您的代码中运行...但是如果您真的坚持,快速查看代码会告诉您@ 987654322@ 是一个变量,它在进程运行时保存进程,完成后将被清除。因此,您可以将它与等待直到发生的循环一起使用:

    (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))
    

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 我想我必须在这里使用没有异步的东西,正如@Eli Barzilay 所说,magit 不是为它设计的。没有概念上的最终目标,我只需要同步一些 git 存储库并可能添加一些附加脚本,但它很简单,直到我发现如何使用 elisp 改进它,例如购买添加配置文件。
      猜你喜欢
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      相关资源
      最近更新 更多