如何提取Git仓库指定日期后变更的文件并打包迁移
Git 指定日期后变更文件批量迁移方案
方案1:直接打包为压缩包(推荐,保留完整目录结构)
无需生成中间文件列表,可直接将变更文件打包为tar包:
git log --since="2021-10-21" --name-only --pretty=format: | sort | uniq | tar -cf changed-files.tar -T -
参数说明:
uniq:对重复出现的文件路径去重,避免同一个文件多次被打包-T -:指定tar从标准输入读取待打包的文件列表- 生成的
changed-files.tar直接解压到目标仓库根目录,即可完整还原所有变更文件的相对路径
方案2:直接批量拷贝到目标仓库
如果不需要打包,想直接把文件同步到目标仓库路径,使用以下命令(替换/path/to/target-repo为你的目标仓库实际路径):
git log --since="2021-10-21" --name-only --pretty=format: | sort | uniq | xargs cp --parents -t /path/to/target-repo
参数说明:
--parents:自动创建文件对应的父级目录,避免所有文件被堆放到目标仓库根目录- macOS系统下
cp没有--parents参数,可替换为rsync版本:git log --since="2021-10-21" --name-only --pretty=format: | sort | uniq | rsync -a --files-from=- ./ /path/to/target-repo
特殊情况兼容(文件名含空格)
如果你的仓库存在带空格的文件名,使用空字符分隔的版本避免解析错误:
打包命令:
git log -z --since="2021-10-21" --name-only --pretty=format: | sort -z | uniq -z | tar -cf changed-files.tar --null -T -拷贝命令:
git log -z --since="2021-10-21" --name-only --pretty=format: | sort -z | uniq -z | xargs -0 cp --parents -t /path/to/target-repo
注意事项
- 执行打包/拷贝命令前,可先单独执行
git log --since="2021-10-21" --name-only --pretty=format: | sort | uniq确认输出的文件列表符合预期,避免误操作 - 上述命令仅处理新增/修改的文件,不会同步原仓库的删除操作,需要删除的文件可在目标仓库手动处理
内容的提问来源于stack exchange,提问作者Vecta
相关产品推荐
相关产品推荐

