【问题标题】:MSBuild exec task never completes when executing git submodule执行 git 子模块时,MSBuild exec 任务永远不会完成
【发布时间】:2014-08-11 22:04:45
【问题描述】:

在 git 存储库中,我想通过 MSBuild 添加一个子模块。我认为类似以下的内容可以让我这样做。

<Exec Command='git submodule add -f git@clone-url.git "sub/module/folder"' />

不幸的是,执行命令永远不会完成。以下消息会出现并一直存在,直到我终止脚本。

Cloning into 'sub/module/folder'...

我的猜测是 git 正在询问我的用户名和密码。出于某种原因,输出从未传递到主命令窗口,因此我可以输入存储库的用户名和密码。

到底有没有看看为什么它会暂停或允许执行命令输出到主窗口?

【问题讨论】:

  • 您可以尝试将命令放在批处理文件中,然后从 Exec 调用它。

标签: git msbuild git-submodules


【解决方案1】:

Exec 任务继承自 Microsoft.Build.Utilities.ToolTask,后者在设计创建时关闭输入流,例如在 Visual Studio 而不是 MSBuild 下执行时没有输入。

proc.Start();
proc.StandardInput.Close();
proc.BeginErrorReadLine();
proc.BeginOutputReadLine();

要“接受”输入,您必须在其中输入管道,或者让您自己的自定义/内联任务创建 Process 或在您的命令前添加 start 以通过新的 cmd 窗口转义重定向。

或者使用 ssh 密钥文件。

【讨论】:

  • 这似乎比我的回答更准确。 +1
【解决方案2】:

之前有人尝试使用Exec task 命令询问密码,但这很复杂,因为:

但是,Exec 任务与更具体的任务不同,它无法从它运行的工具或命令中收集输出。

但请参阅“Exec task in msbuild TFS won't execute exe properly”),如cmd /c git submodule...,以防万一。

【讨论】:

    猜你喜欢
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多