【发布时间】:2014-02-12 23:10:16
【问题描述】:
我有一个 CI 构建定义 (TFS 2013),由多个分支的提交触发(它是一个 git 存储库)。我想在构建过程中使用分支名称将结果复制到正确的位置。我该怎么做?
【问题讨论】:
我有一个 CI 构建定义 (TFS 2013),由多个分支的提交触发(它是一个 git 存储库)。我想在构建过程中使用分支名称将结果复制到正确的位置。我该怎么做?
【问题讨论】:
像这样制作自己的 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));
【讨论】:
let _, branch, commit = BuildSourceVersion.TryParseGit x.SourceGetVersion。在 SourceLink.Tfs 中作为扩展添加。 github.com/ctaggart/SourceLink/commit/…
GitTemplate.xaml并添加一个代码活动然后把这段代码放在那里吗?
在构建过程中可以访问整个 .git 文件夹,因此我可以使用 PowerShell 查看文件 .git/HEAD。可能只有提交哈希(分离的 HEAD 机制),然后需要更多的 git 调用才能找出我真正的位置。总而言之,另一个答案可能更干净。
【讨论】:
git branch --all --contains 获取当前提交中的所有分支名称,这对于您的用例来说已经足够了。