在VSTS上,我们要在 某些 分支上保护一些文件。如果特定文件发生了变化,怎么会失败合并/构建?
一等奖是在构建服务器上配置它,在本例中是VisualStudio.com(VSTS / GIT)。
场景:我们有各种版本分支v1,v2,v3。我们希望保护packages.json文件,以防止任何人更新这些分支上的Nuget包。因此,如果package.json文件已经在拉取请求中更改为" v3",则不允许合并。
答案 0 :(得分:1)
对于 Git ,您可以保护某个分支(不是某个文件),然后分支中存在的所有文件都将受到保护。
您可以使用分支机构安全哪些用户/群组可以为分支做出贡献。
或者您可以使用分支政策来保护分支机构不直接提交更改,但使用pull请求进行更改等。
或者您可以锁定分支以防止更新。
扩大Starain的答案:
首先为要保护的分支创建构建定义 n(例如在获取源步骤中选择V3
分支)。并使用以下内容添加powershell任务:
$head=$(git rev-parse HEAD)
$parents=$(git rev-list --parents -n 1 $head)
$p1,$p2,$p3=$parents.split(' ')
If ($p1 = $head)
{
$parent1=$p2
$parent2=$p3
}
ElseIf ($p2 = $head)
{
$parent1=$p1
$parent2=$p3
}
Else
{
$parent1=$p1
$parent2=$p2
}
$outp1=$(git diff $head $parent1 --name-only)
$outp2=$(git diff $head $parent2 --name-only)
If ($outp1 -contains 'package.json')
{
echo "changed the specified file on the branch which contains commit $parent1"
exit 1
}
If ($outp2 -contains 'package.json')
{
echo "changed the specified file on the branch which contains commit $parent2"
exit 1
}
因此,当文件package.json
发生变化时,powershell脚本将失败构建结果。
然后为要保护的分支添加分支策略。
添加构建政策 - >选择刚刚创建的构建定义 - >政策要求为必需 - >构建到期时间为0.1小时(6分钟)或其他值,因为每次快速排队使用PowerShell任务排队 - >保存。
答案 1 :(得分:0)
答案 2 :(得分:0)
Git并没有真正这样做;个别文件不具备任何安全性。
您可以使用pre-commit hook
,但重要的是要注意这些挂钩是客户端,而不是服务器端 - 每个用户都必须设置预提交挂钩。< / p>
VSTS / TFS不支持Git服务器挂钩(至少,它不能阻止推送),否则pre-receive
或update
挂钩就是你的想。
答案 3 :(得分:0)
您可以尝试在构建,简单的工作流程中执行此操作: