VSTS - 阻止提交根路径

时间:2018-03-10 22:13:57

标签: azure-devops azure-pipelines azure-pipelines-build-task build-definition

我正试图找到一种方法来阻止文件被提交到repo的根目录。无法直接通过分支政策找到解决方法。在/ *上设置所需的审阅者,例如将一个组添加到正在检入仓库的任何文件中。如果有人试图将文件签入回购的根目录( / ),是否可以将特定的组/个人添加为审阅者。

唯一的另一个选择似乎是添加一个运行自定义脚本的构建定义,以便在PR包含root的文件添加时使构建失败。是否有可能对此有帮助的vsts构建任务?

1 个答案:

答案 0 :(得分:0)

您可以在PR验证构建定义中使用 PowerShell任务来检查repo根目录中是否有文件,脚本如下:

$files=$(git ls-files)
echo $files
echo $files.length
for ($i=0; $i -lt $files.Length; $i++)
{
  $file = $files[$i]
  if ($file -match "/")
  { echo "the file $file in subdir" }
  else
  { 
    echo "the file $file in root dir"
    exit 1
  }
}

此外,您可以在本地仓库中使用预提交挂钩,这样您就可以检测在提交和推送之前是否在根目录中提交了文件。该脚本可用于预提交挂钩,如下所示:

#!/bin/sh

for sfile in $(git diff --name-only --cached)
do
{
  if [[ $sfile =~ "/" ]]; then
    echo "the file $sfile in subdir"
  else
    echo "the file $sfile in root, stop to commit!"
    exit 1
  fi
}
done
for ufile in $(git diff --name-only)
do
{
  if [[ $ufile =~ "/" ]]; then
    echo "the file $ufile in subdir"
  else
    echo "the file $ufile in root, stop to commit!"
    exit 1
  fi
}
done