无需克隆超20GB GitHub仓库,如何在Jenkins中删除文件并提交?
无需克隆仓库删除文件并提交变更的解决方案
用GitHub REST API 直接操作单个文件
你之前没找到合适的API用法,其实GitHub REST API 支持直接删除仓库里的文件,完全不用克隆整个仓库,步骤很清晰:
先拿目标文件的SHA值
要删除文件得先知道它当前的哈希值,用这个API请求:curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer YOUR_GITHUB_TOKEN" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/contents/PATH/TO/FILE返回结果里的
sha字段就是你要的。调用删除接口提交变更
把拿到的SHA填进去,加上提交信息,发起删除请求:curl -L \ -X DELETE \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer YOUR_GITHUB_TOKEN" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/contents/PATH/TO/FILE \ -d '{"message":"删除冗余大文件","sha":"FILE_SHA","branch":"main"}'把里面的占位符换成你自己的仓库信息、文件路径、Token和分支名就行。
Jenkins里怎么用
在Jenkins任务(不管是Pipeline还是Freestyle)里直接执行上面的curl命令就行,注意Token别硬编码,存到Jenkins的凭据管理里,用credentials()方法调用,安全又方便。
批量删文件?用Git稀疏检出省体积
如果要删一堆文件,一个个调用API太麻烦,那就用Git的稀疏检出,只克隆你要操作的目录,不用拉整个20GB的仓库:
初始化仓库并配置稀疏检出
git init git remote add origin https://github.com/OWNER/REPO.git git config core.sparseCheckout true echo "PATH/TO/TARGET_DIR/*" >> .git/info/sparse-checkout拉取指定目录
git pull origin main这时候只会拉你指定的目录,体积小很多。
删文件提交推送
rm -rf PATH/TO/TARGET_DIR/UNWANTED_FILES git add . git commit -m "批量清理冗余文件" git push origin main
几个要注意的点
- GitHub Token得有
repo权限,能读写仓库内容。 - 如果是受保护的分支,要么给Token开绕过分支保护的权限,要么先调整分支保护规则。
- 批量操作选稀疏检出,单个文件操作选API,按需来就行。
内容的提问来源于stack exchange,提问作者Gaurav Bharti
相关产品推荐
相关产品推荐

