You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置Git策略,禁止删除指定目录下文件且允许增改?

如何在Git仓库中禁止删除指定目录下的文件(允许创建/修改)

要在Git仓库里强制执行这个策略,最可靠的方式是用服务器端的pre-receive钩子——客户端钩子可以被用户绕过,而服务器端钩子能确保所有推送的提交都遵守规则。

具体步骤:

  1. 登录Git仓库的服务器,找到仓库根目录,进入hooks子文件夹。
  2. 创建一个名为pre-receive的文件,粘贴以下脚本:
#!/bin/bash

# 替换成你要保护的目录,比如"docs/"或"src/static/"
PROTECTED_DIR="指定目录路径/"

# 遍历推送的所有引用变更
while read oldrev newrev refname; do
    # 对比新旧版本的文件状态变更
    git diff --name-status "$oldrev" "$newrev" | while read status file; do
        # 检查是否是保护目录下的文件被删除
        if [[ "$file" == "$PROTECTED_DIR"* && "$status" == "D" ]]; then
            echo "❌ 禁止删除目录 $PROTECTED_DIR 下的文件:$file"
            exit 1
        fi
    done
done

# 所有检查通过,允许推送
exit 0
  1. 给脚本添加执行权限:
chmod +x pre-receive

补充说明:

  • 这个钩子会在每次推送时扫描所有提交的文件变更,只要发现保护目录下有文件被标记为删除(状态D),就会直接拒绝推送并给出提示。
  • 如果需要保护多个目录,可以修改条件判断,比如:
    if [[ ( "$file" == "dir1/"* || "$file" == "dir2/"* ) && "$status" == "D" ]]; then
    
  • 客户端的pre-commit钩子可以用来本地提醒用户,但无法强制(用户可以用git commit --no-verify跳过),所以如果要严格强制执行,必须用服务器端的pre-receive钩子。

内容的提问来源于stack exchange,提问作者Mukti Desai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:24:55