VSTS - 防止提交到根路径
VSTS - Prevent commit to root path
我正在尝试找到一种方法来防止将文件提交到存储库的根目录。找不到直接通过分支策略执行此操作的方法。在 /* 上设置所需的审阅者,例如,将一个组添加到正在签入回购的任何文件中。如果有人试图将文件 仅 签入到根目录(/) 的回购协议。
唯一的其他选项似乎是添加一个运行自定义脚本的构建定义,如果 PR 包含添加到 root 的文件,则构建失败。是否有可能对此有帮助的 vsts 构建任务?
您可以在您的 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
}
}
此外,你可以在本地repo中使用pre-commit hook,这样你就可以检测根目录下是否有文件要提交在提交和推送之前。该脚本可用于 pre-commit 挂钩,如下所示:
#!/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
我正在尝试找到一种方法来防止将文件提交到存储库的根目录。找不到直接通过分支策略执行此操作的方法。在 /* 上设置所需的审阅者,例如,将一个组添加到正在签入回购的任何文件中。如果有人试图将文件 仅 签入到根目录(/) 的回购协议。
唯一的其他选项似乎是添加一个运行自定义脚本的构建定义,如果 PR 包含添加到 root 的文件,则构建失败。是否有可能对此有帮助的 vsts 构建任务?
您可以在您的 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
}
}
此外,你可以在本地repo中使用pre-commit hook,这样你就可以检测根目录下是否有文件要提交在提交和推送之前。该脚本可用于 pre-commit 挂钩,如下所示:
#!/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