2014-01-22 4 views

답변

3

당신이 InArgument로 IBuildDetail BuildDetail 필요 ...이처럼 자신의 CodeActivity를 확인합니다.

string branch = null; 
string commit; 

var environmentVariable = BuildDetail.Get(context); 
if (environmentVariable != null && !BuildSourceVersion.TryParseGit(environmentVariable.SourceGetVersion, out branch, out commit)) 
{ 
    var defaultSourceProvider = environmentVariable.BuildDefinition.GetDefaultSourceProvider(); 
    if (BuildSourceProviders.IsGit(defaultSourceProvider.Name)) 
    { 
     branch = BuildSourceProviders.GetProperty(defaultSourceProvider.Fields, BuildSourceProviders.GitProperties.DefaultBranch); 
    } 
} 

if (string.IsNullOrEmpty(branch)) 
{ 
    throw new Exception("Could not find Branch"); 
} 

Branch.Set(context, branch.Substring(branch.LastIndexOf("/", StringComparison.InvariantCultureIgnoreCase) + 1)); 
+0

답변 해 주셔서 감사합니다. 나는 이것이 효과가있을 것 같아요. 결국 스크립팅을 선택하지만, TFS 인프라를 더 많이 사용하기로 결정하면 솔루션을 사용하게 될 것입니다. –

+0

위대한 작품. F #에서는'let _, branch, commit = BuildSourceVersion.TryParseGit x.SourceGetVersion'을 사용했습니다. SourceLink.Tfs의 확장 기능으로 추가되었습니다. https://github.com/ctaggart/SourceLink/commit/058e071583578d22bcb2e0a87ede4c7b382b4279 –

+0

'GitTemplate.xaml'을 열고 코드 활동을 추가하고 거기에이 코드를 올리시겠습니까? –

1

빌드시 .git 폴더에 액세스 할 전체가, 그래서 PowerShell을 사용하여 파일 .git/HEAD로 볼 수있다. 해시 (분리 된 HEAD 영역) 만 커밋 할 수 있으며, 내가 실제로있는 곳을 찾으려면 더 많은 자식 호출이 필요합니다. 결국, 다른 대답은 아마 더 깨끗합니다.

+0

안녕하세요 Lukáš, 당신은 .git/HEAD에서 지점 이름을 찾을 수 있었습니까? 나 자신의 CodeActivity를 만드는 대신이 솔루션을 선호합니다. 감사. – Chatumbabub

+1

안녕하세요, 당신은'git branch --all --contains'를 사용하여 현재 커밋중인 모든 브랜치 이름을 얻을 수 있습니다. 이것은 여러분의 유즈 케이스에 충분할 수 있습니다. –