2016-12-19 3 views
1

Ich versuche, von MSBuild diesen einfachen Befehl auszuführen (VS2015, aus einer .target-Datei) das Datum des aktuellen git zu erzeugen begehen:MSBuild Exec-Befehl schlägt immer

git show -s --format=%cd --date=format:%d.%m.%Y 

So in MSBuild ich versucht habe:

<Exec Command="git show -s --format=%25cd --date=format:%25d.%25m.%25Y" ConsoleToMSBuild="true"> 
    <Output TaskParameter="ConsoleOutput" PropertyName="BuildDate" /> 
</Exec> 

Aber es ergibt sich nur ein Fehler:

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. 

Wenn ich den Befehl in der Post Anführungszeichen auf der Konsole, es funktioniert wie ein Charme und druckt 19.12.2016.

ich folgende Dinge ausprobiert haben:

  • Flucht auch die = Zeichen, :, ... noch nicht

  • Nutzung funktioniert nur Command="git show -s --format=%25ci" -> Erträge auch ein Fehler fatal: invalid --pretty format: ci aber funktioniert gut in der Konsole.

  • Surround mit Zitaten &quot;--format=%25ci&quot; -> gleiche Fehler

  • Anruf mit Command="git --version", das funktioniert wie erwartet und gibt die git-Version (die gleiche wie auf der Konsole)

Ich vermute, dass es irgendwie tut akzeptiere nicht die =, um das Argument anzugeben, aber git lässt mich nicht als separate Argumente übergeben, z durch ein Leerzeichen getrennt.

Antwort

2

Sie wollen %25% zu entkommen, so dass Ihr Befehl

<Exec Command="git show -s --format=%25%25cd --date=format:%25%25d.%25%25m.%25%25Y" ConsoleToMSBuild="true"> 
    <Output TaskParameter="ConsoleOutput" PropertyName="BuildDate" /> 
</Exec> 

hier wird Siehe MSBuild escape characters

+0

Es ist noch nicht wirklich Sinn für mich, warum ich es zweimal entkommen müssen, aber es funktioniert wie ein Zauber. – kiki

0

Die andere Antwort hat mir geholfen, aber ich hatte ein etwas komplexeres Szenario.Hier ist meine eigene Lösung, mit einigen zusätzlichen Erklärung:

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

Dieser diesen Befehl ausführen wird:

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

Hier ist, was ich von zu verstehen, warum jede Flucht gebraucht wird:

Verwandte Themen