2014-09-18 3 views
3

msbuild와 git에 이상한 문제가 있습니다. gbu에게 커밋을 포함하는 파일을 만드는 msbuild의 대상이 있지만 msbuild가 실행 중일 때 대상이 작동하지 않습니다 ... msbuild에서 자식 로그 만들기

<GitLogFormat>%25H:%25an:%25cd:%25B</GitLogFormat> 
<GitLogPath>gitlog.xml</GitLogPath> 

<Exec 
    Command='&quot;$(GitRunner)&quot; log --full-history --pretty=format:&quot;$(GitLogFormat)&quot; > $(GitLogPath)' 
    WorkingDirectory="$(GlobalRootPath)"  
</Exec> 

이 출력됩니다에게 명령 : 나는 명령 줄에서이 작업을 실행하면

"C:\Program Files (x86)\Git\bin\git.exe" log --full-history --pretty=format:"%H:%an:%cd:%B" > gitlog.xml 

이 (MSBUILD되지 않음)의 다음 출력을 난 내가 뭐하는 거지 보여주기 위해 작업에서 조각을 모금 gitlog 파일은 다음과 같습니다 :

35b833f0133cee6bd749be6cc4dbb40c15ab1ff2:rewso:Sun Sep 14 12:16:51 2014 +0200:Main release_ContractManagement was commited local v: 0.17.2 
0ca16d0c60768879cb876c1da8e9fb2e76ef6074:rewso:Sun Sep 14 11:29:16 2014 +0200:Main release_ContractManagement was commited local v: 0.16.2 
fe14af5547f458dab069aa862c304e03136f0a94:rewso:Sun Sep 14 01:08:15 2014 +0200:Main release_ContractManagement was commited local v: 0.15.2 

하지만은 MSBuild에서이 작업을 수행 할 경우 gitlog 파일의 출력은 다음과 같습니다 내가 msbuild를 사용할 때

an:B 
an:B 
an:B 

가 어떻게 같은 출력을 얻을 수 있습니까 ??

답변

3

% 문자를 두 번 이스케이프 처리해야합니다. 한 번 같은 문제가 있었는데 정확히 두 번 필요하다는 것을 기억하지 못합니다. Exec 또는 환경 변수에 사용되는 문자를 %로 간주하는 기본 cmd와 관련이있을 수 있습니다.

어쨌든,이 그것을 수행해야 Exec에서 작업 임시 배치 파일에 명령을 쓰기 때문에

<PropertyGroup> 
    <GitLogFormat>%25%25H:%25%25an:%25%25cd:%25%25B</GitLogFormat> 
</PropertyGroup> 
+4

당신이'더블'%를 필요로하는 이유는. 배치 파일에서'% '문자를 해석하는 규칙은 cmd.exe에서 동일한 명령을 입력하는 것과 다릅니다. 배치 파일에서 %를 매개 변수 한정자로 해석하지 못하게하려면 두 개의'%% '를 사용할 수 있습니다. 또는'^ %'도 잘 작동해야합니다. –

+0

@SevaTitov는 그것을 지워 줘서 고마워 !! – stijn

+0

감사합니다. –