代码之家  ›  专栏  ›  技术社区  ›  Cranialsurge

VSTS-防止提交到根路径

  •  0
  • Cranialsurge  · 技术社区  · 7 年前

    我正在试图找到一种方法来防止文件被提交到回购的根目录。无法找到直接通过分支策略执行此操作的方法。例如,在/*上设置所需的审阅者会将组添加到要签入到repo的任何文件中。如果有人试图签入文件,是否有方法将特定的组/个人添加为审阅者 只有 到根( / )回购协议。

    唯一的其他选择似乎是添加一个生成定义,如果PR包含根目录中的文件添加,则该定义将运行自定义脚本以使生成失败。是否有可能对此有所帮助的vsts构建任务?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Marina Liu    7 年前

    您可以使用 PowerShell任务 在PR validation build定义中,检查回购根目录中是否有文件,脚本如下:

    $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
      }
    }
    

    此外,您可以使用 预提交挂钩 在本地repo中,以便检测根目录中是否有要提交的文件 提交和推送之前 。该脚本可用于预提交挂钩,如下所示:

    #!/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