拉取github目录的时候能跳过某些文件吗?比如https://github.com/hackerzhuli/tdoku-lib ,我不想要其中的data.zip
有几种方法可以拉取 GitHub 目录时跳过特定文件:
1. 使用 Git Sparse Checkout(推荐)
bash
# 克隆空仓库
git clone --no-checkout https://github.com/hackerzhuli/tdoku-lib.git
cd tdoku-lib
# 启用 sparse checkout
git sparse-checkout init --cone
# 设置要包含的目录/文件(排除data.zip所在目录)
git sparse-checkout set !data.zip
# 检出文件
git checkout main
2. 使用 git archive(远程过滤)
bash
# 拉取除了特定文件外的所有文件
git archive --remote=https://github.com/hackerzhuli/tdoku-lib.git HEAD -- . ":!data.zip" | tar -x
3. 克隆后删除
bash
# 先完整克隆
git clone https://github.com/hackerzhuli/tdoku-lib.git
cd tdoku-lib
# 从git中删除data.zip(同时删除工作目录文件)
git rm data.zip
# 如果要保留工作目录中的文件,只从git中移除追踪
git rm --cached data.zip
4. 使用 sparse-checkout 排除特定文件
bash
git clone --filter=blob:none --no-checkout https://github.com/hackerzhuli/tdoku-lib.git
cd tdoku-lib
# 编辑 sparse-checkout 文件
echo "/*" > .git/info/sparse-checkout
echo "!data.zip" >> .git/info/sparse-checkout
# 检出文件
git checkout main
5. 使用 GitHub API 选择性下载
bash
# 获取文件列表并过滤
curl -s https://api.github.com/repos/hackerzhuli/tdoku-lib/contents/ |
grep -v "data.zip" |
grep "download_url" |
cut -d'"' -f4 |
xargs -n1 wget
推荐方案:
- 如果要长期维护这个仓库的本地副本,使用 方法1(sparse-checkout)
- 如果只是一次性下载,使用 方法4 或 方法5
注意:对于 data.zip 这个具体案例,你可以先查看它的具体路径:
bash
# 查看仓库结构
git ls-tree -r main --name-only | grep data.zip