我试图从MSBuild(VS2015,来自.target
文件)执行这个简单命令来生成当前git提交的日期:
git show -s --format=%cd --date=format:%d.%m.%Y
所以在MSBuild中我尝试过:
<Exec Command="git show -s --format=%25cd --date=format:%25d.%25m.%25Y" ConsoleToMSBuild="true">
<Output TaskParameter="ConsoleOutput" PropertyName="BuildDate" />
</Exec>
但它只会产生错误:
1>------ Build started: Project: example, Configuration: Release Dll Win32 ------
1> fatal: invalid --pretty format: d.Y
1>D:\example\gitversion.targets(26,5): error MSB3073: The command "git show -s --format=%cd --date=format:%d.%m.%Y" exited with code 128.
如果我在引号中将命令发布到控制台,它就像一个魅力并打印19.12.2016
。
我尝试了以下事项:
同时逃离=
标志,:
,......仍然无效
仅使用Command="git show -s --format=%25ci"
- &gt;产生错误fatal: invalid --pretty format: ci
但在控制台中工作正常。
使用引号"--format=%25ci"
环绕 - >同样的错误
使用Command="git --version"
调用,这可以正常工作并返回git版本(与控制台上相同)
我怀疑它以某种方式不接受=
来指定参数,但是git不会让我将它作为单独的参数传递,例如被空格隔开。
答案 0 :(得分:3)
您希望%25
转义%
,因此您的命令将变为
<Exec Command="git show -s --format=%25%25cd --date=format:%25%25d.%25%25m.%25%25Y" ConsoleToMSBuild="true">
<Output TaskParameter="ConsoleOutput" PropertyName="BuildDate" />
</Exec>
请参阅此处查看MSBuild escape characters
答案 1 :(得分:0)
另一个答案对我有帮助,但我有一个稍微复杂的情况。这是我自己的解决方案,有一些补充说明:
<Exec Command="git log -1 --oneline --pretty="%25%25h %25%25ad <%25%25ae>" > $(OutputPath)/git-info.txt" />
这将执行此命令:
git log -1 --oneline --pretty='%h %ad <%ae>' > bin/debug/git-info.txt
以下是我理解为什么需要每次逃生的原因:
%25
是%
符号的MSBuild Special Characters escape %25%25
然后会创建两个百分号,即cmd escape for percent "
是双引号的xml attribute value escape >
是>
字符