2016-12-19 4 views
1

Я пытаюсь выполнить эту простую команду из MSBuild (VS2015, из .target файла), чтобы создать дату текущего мерзавца фиксации:команды MSBuild Exec всегда терпит неудачу

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" -> дает также ошибки fatal: invalid --pretty format: ci, но работает отлично в консоли.

  • окружают кавычки &quot;--format=%25ci&quot; -> та же ошибка

  • вызовов с Command="git --version", это работает, как ожидалось, и возвращает версию GIT (так же, как и на консоли)

Я подозреваю, что это как-то делает не принимайте значение =, чтобы указать аргумент, но git не позволяет передавать его в виде отдельных аргументов, например разделенных пробелом.

ответ

2

Вы хотите %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

+0

Он по-прежнему не имеет смысла для меня, почему мне нужно бежать дважды, но он работает как шарм. – kiki

0

Другой ответ помог мне, но я был немного более сложный сценарий.Вот мое собственное решение, с некоторым дополнительным объяснением:

<Exec Command="git log -1 --oneline --pretty=&quot;%25%25h %25%25ad &lt;%25%25ae&gt;&quot; &gt; $(OutputPath)/git-info.txt" /> 

Это будет выполнить следующую команду:

git log -1 --oneline --pretty='%h %ad <%ae>' > bin/debug/git-info.txt 

Вот что я понял, почему нужно каждый побег:

Смежные вопросы