gpt4 book ai didi

git - 防止 git 提交者创建某些目录

转载 作者:太空狗 更新时间:2023-10-29 13:30:12 24 4
gpt4 key购买 nike

有没有办法阻止 git 提交者在存储库中创建目录。

我们有一些开发人员总是在目录结构中错放文件。应该在的文件

 a/b/c/file

结束于

 a/a/b/c/file

我只是想阻止创建

 a/a/*

它显然需要适本地发生,以便他们知道他们的文件没有提交......因此,仅仅忽略 a/a/* 是不够的。

有办法吗?

编辑

一些人指出,应该“培训”提交者不要这样做。这里有一些缺陷:

  • 提交者也是人,也会犯错;培训不会阻止这种情况的发生
  • 这不是那种在培训期间会牢记在心的信息(waaay 细化细节)
  • 大多数情况下,这发生在从一个分支 merge 到另一个分支的过程中,因此文件不是手动创建的,而是在更大的变更集中 pull 过来的。

因此,需要一种自动化方法。

最佳答案

使用 2x4 线索棒的用户教育应该是首选。对于技术解决方案,您可以使用合适的提交 Hook 阻止他们在本地进行此类提交。但是,他们也可能无法安装 Hook 。所以你只剩下实现一个拒绝他们推送的钩子(Hook)。您可以使用更新 Hook 来执行此操作,该 Hook 可以在提交写入中央存储库之前拒绝提交。这是一个钩子(Hook)脚本:

#!/bin/sh
#
# update hook - args: refname sha1-old sha1-new

ref="$1"
old="$2"
new="$3"
if [ -z "$ref" -o -z "$old" -o -z "$new" ]; then
echo >&2 "usage: $0 <ref> <oldrev> <newrev>"
exit 1
fi

for badpath in a/a a/z/x; do
if git ls-tree $new:$badpath >/dev/null; then
bogus=$(git ls-tree -r --name-only $new $badpath)
echo >&2 "REJECTED DUE TO BOGUS PATH \"$bogus\""
exit 1
fi
done

exit 0

如果我们创建一个简单的裸存储库并将其添加为 hooks/update 并使其可执行(在 Windows 上,我们不需要这样做 - 无论如何都会执行 hooks)。然后克隆存储库并添加一个禁止的路径(如您的示例中的 a/b/c/file )。这是我推送此提交时得到的:

C:\Users\Pat\AppData\Local\Temp\x\L>git push origin master
Counting objects: 9, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (7/7), 423 bytes | 0 bytes/s, done.
Total 7 (delta 0), reused 0 (delta 0)
remote: REJECTED DUE TO BOGUS PATH "a/a/b/c/file"
remote: error: hook declined to update refs/heads/master
To C:/Users/Pat/AppData/Local/Temp/x/R
! [remote rejected] master -> master (hook declined)
error: failed to push some refs to 'C:/Users/Pat/AppData/Local/Temp/x/R'

这说明了两件事。首先,这些钩子(Hook)脚本实际上很容易创建并在一些临时存储库中进行测试。您回显到 stderr 或 stdout 的任何内容都会被复制到推送用户。其次 - 这一切都适用于 Windows(至少在 Windows 上使用 Git 时)。

提交 Hook 适用于用户的本地存储库并且不会那么令人讨厌,但是您随后会遇到确保所有本地克隆都具有正确 Hook 的问题。这在服务器端处理起来要简单得多。

关于git - 防止 git 提交者创建某些目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17176286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com