【问题标题】:Getting git branch name inside TFS build在 TFS 构建中获取 git 分支名称
【发布时间】:2014-02-12 23:10:16
【问题描述】:

我有一个 CI 构建定义 (TFS 2013),由多个分支的提交触发(它是一个 git 存储库)。我想在构建过程中使用分支名称将结果复制到正确的位置。我该怎么做?

【问题讨论】:

    标签: git msbuild


    【解决方案1】:

    像这样制作自己的 CodeActivity...

    您需要 IBuildDetail BuildDetail 作为 InArgument。

    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));
    

    【讨论】:

    • 感谢您的回答!我想这会奏效。最后,我选择了脚本,但如果我们决定更多地使用 TFS 基础架构,我会很乐意使用您的解决方案。
    • 这很好用。在 F# 中,我使用了let _, branch, commit = BuildSourceVersion.TryParseGit x.SourceGetVersion。在 SourceLink.Tfs 中作为扩展添加。 github.com/ctaggart/SourceLink/commit/…
    • 你打开GitTemplate.xaml并添加一个代码活动然后把这段代码放在那里吗?
    【解决方案2】:

    在构建过程中可以访问整个 .git 文件夹,因此我可以使用 PowerShell 查看文件 .git/HEAD。可能只有提交哈希(分离的 HEAD 机制),然后需要更多的 git 调用才能找出我真正的位置。总而言之,另一个答案可能更干净。

    【讨论】:

    • 嗨 Lukáš,您是否设法从 .git/HEAD 中找到分支名称?如果创建自己的 CodeActivity,我更喜欢这个解决方案。谢谢。
    • 您好,您可以使用git branch --all --contains 获取当前提交中的所有分支名称,这对于您的用例来说已经足够了。
    猜你喜欢
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多