You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:45:01