如何下载GitHub拉取请求中变更文件的压缩包?
批量下载GitHub拉取请求中修改的文件
针对你提到的场景,有几种可行的方法来批量获取PR中修改的文件,以下是具体操作:
方法一:使用git archive结合差异文件列表
这是最直接的本地Git命令方案,适合已克隆仓库的情况:
- 克隆目标仓库(未克隆的话执行):
git clone <你的仓库地址> cd <仓库目录> - 获取PR的基准提交(base)和头部提交(head)哈希:
你可以在GitHub PR页面的「Commits」标签下找到这两个提交的哈希值——base是PR创建时主分支的对应提交,head是PR分支的最新提交。 - 生成PR中所有修改文件的列表:
git diff --name-only <base-提交哈希> <head-提交哈希> > modified-files.txt - 用
git archive打包这些文件:
执行后会生成一个包含所有修改文件的zip包,文件结构和仓库内保持一致。git archive -o pr-modified-files.zip <head-提交哈希> $(cat modified-files.txt)
方法二:临时目录检出文件后打包
如果需要更灵活的文件处理,可以先将修改文件单独检出到临时目录再打包:
- 在仓库外创建临时目录:
mkdir pr-temp-files cd pr-temp-files - 从原仓库检出PR修改的文件:
git --git-dir=../<原仓库目录>/.git checkout <head-提交哈希> -- $(cat ../modified-files.txt) - 打包临时目录内的文件:
zip -r pr-modified-files.zip .
方法三:通过GitHub API批量下载(无需克隆仓库)
如果不想克隆WebKit这类体积较大的仓库,可以用GitHub API直接批量下载文件:
- 生成一个具有
repo权限的GitHub个人访问令牌(在GitHub设置的「Developer settings」中创建)。 - 执行命令获取并下载所有修改文件:
替换命令中的curl -H "Authorization: token <你的GitHub令牌>" https://api.github.com/repos/<用户名>/<仓库名>/pulls/<PR编号>/files | awk '/"raw_url":/ {print $2}' | tr -d '",' | xargs -n 1 curl -O<用户名>、<仓库名>、<PR编号>和<你的GitHub令牌>为实际信息。 - 下载完成后打包:
zip pr-modified-files.zip *
内容的提问来源于stack exchange,提问作者Javier Steinaker
相关产品推荐
相关产品推荐

