可通过svn pre-commit钩子拦截超限视频提交:先用不区分大小写的扩展名白名单(.mp4/.avi/.mkv/.mov/.wmv/.flv/.webm/.m4v/.3gp)匹配,再用svnlook filesize获取文件字节数,超过10mb即exit 1并输出具体错误提示。

可以通过 SVN 的 pre-commit 钩子脚本,在提交前检查新增或修改的文件:若文件是视频格式(如 .mp4、.avi、.mov 等)且体积超过设定阈值(例如 10MB),就拒绝提交,并提示用户先压缩。
识别视频文件类型
不能只靠后缀名判断,但 SVN 提交时无法获取 MIME 类型,所以优先用扩展名白名单匹配常见视频格式。建议包含:.mp4 .avi .mkv .mov .wmv .flv .webm .m4v .3gp。注意大小写(如 .MP4 也应匹配),可用 shell 的 [[ $filename =~ \.(?i)mp4|avi|mkv|mov|wmv|flv|webm|m4v|3gp$ ]] 实现不区分大小写的匹配。
获取并校验文件大小
在 pre-commit 钩子中,通过 svnlook changed -t "$TXN" "$REPOS" 获取本次提交的变更列表,再用 svnlook cat 或临时导出方式获取文件内容长度。更稳妥的做法是:对每个新增/修改的文件,用 svnlook filesize -t "$TXN" "$REPOS" "$filepath" 直接获取其提交时的字节数。设置合理阈值(如 10485760 字节 = 10MB),超过即拦截。
阻止违规提交并给出明确提示
一旦发现超限视频文件,立即 exit 1 中断提交,并向标准错误输出清晰提示,例如:
ERROR: Video file '$filename' is too large ($size bytes). Please compress it to under 10MB before committing.
避免只写“提交被拒绝”,要说明原因、文件名、当前大小和要求,方便用户快速处理。
兼顾性能与兼容性
pre-commit 脚本需轻量执行,避免调用耗时命令(如 ffmpeg 分析)。仅做扩展名 + 文件大小判断即可。
- 确保脚本有可执行权限(chmod +x hooks/pre-commit)
- 在 Linux 下使用 #!/bin/bash,避免用 #!/usr/bin/env bash 导致路径问题
- 测试时用真实大视频文件模拟提交,验证拦截是否生效且不误伤其他类型文件











