执行git子模块时,MSBuild exec任务永远不会完成

时间:2014-08-11 13:15:29

标签: git msbuild git-submodules

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

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

不幸的是,execute命令永远不会完成。出现以下消息,直到我终止脚本为止。

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

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

无论如何都要知道它为什么暂停或允许执行命令输出到主窗口?

2 个答案:

答案 0 :(得分:1)

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

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

To&#34;接受&#34;输入你必须管道,或者让你自己的自定义/内联任务创建Process或者用start添加命令以通过新的cmd窗口转义重定向。

或使用ssh密钥文件。

答案 1 :(得分:0)

以前有人试图让Exec task命令要求输入密码,但这很复杂,因为:

  

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

请参阅&#34; Exec task in msbuild TFS won't execute exe properly&#34;),如cmd /c git submodule...中所述,以防万一可行。