Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

version_diff_output

一个简单的命令行工具:根据版本控制系统(Git 或 SVN)在两次提交/版本之间的差异,批量把发生变化的文件复制到指定目录,并输出统计信息(文件总数、各扩展名分布、跳过数等)。

  • 支持:Git / SVN
  • 平台:Linux / macOS / Windows
  • 用途:做差异包、代码审计提取、增量发布素材打包等

✨ 功能

  • 读取指定 起始结束 提交(或 SVN 修订号)之间的差异文件列表

    • Git:git diff --name-only <start_parent>..\<end>(若 start 没父提交,自动用空树)
    • SVN:svn diff --summarize -r <start-1>:<end>(忽略删除项)
  • 将这些文件从 当前工作区 复制到指定输出目录(保持原有相对路径层级)

  • 输出统计:总文件数、按扩展名分类计数、跳过文件数(不存在/已删)

  • 打印起止提交的简要信息与操作完成时间

  • 进度提示(每 10 个文件一条)


🧰 使用方法

version_diff_output \
  --start <START> \
  --end <END> \
  --output <OUTPUT_DIR> \
  [--repo <REPO_DIR>] \
  [--type <git|svn>]

参数说明

选项 必填 说明 默认值
-s, --start 起始提交哈希 / 版本号(Git 提交、tag、分支名;SVN 修订号)
-e, --end 结束提交哈希 / 版本号
-o, --output 输出目录路径(会自动创建子目录)
-r, --repo 仓库路径(含 .git 或可执行 svn 的工作副本) .
-t, --type 版本控制系统类型:git / svn git

❶ 非必填,有默认值。

重要行为说明(请务必阅读)

  • 复制来源是你当前工作区中的文件内容,而不是直接从历史对象导出。 👉 如果你希望复制的内容和 end 完全一致,请先在仓库中 检出到 end

    # Git
    git switch --detach <END>   # 或:git checkout <END>
    # 然后再运行 version_diff_output ...
  • 删除项不会被复制:Git/SVN 中被删除的文件会被统计为“跳过”(若路径已不存在)。

  • Git 起始为首次提交 时,工具会自动用“空树”作为起点,拿 <empty_tree>..end 计算差异。

  • SVNstart-1 : end 作为对比区间,并忽略以 D(删除)标记的条目。


🧪 示例

Git 示例

./version_diff_output -s c8defaec -e 71ef0123 -r '/Volumes/user/JavaProjects/CentralizedSystem/project' -o '/Volumes/user/临时文件/临时同步用'

Windows PowerShell 中路径带空格时请使用引号:"C:\Path With Space\out"


⚠️ 注意事项

  • 请确保本机已安装并可执行相应命令:gitsvn
  • 若你希望复制的文件版本与 end 完全一致,请先把工作区切到 end(见上文)。
  • 重命名 的感知取决于底层 diff:当前命令使用 --name-only,不会额外启用 Git 的重命名检测参数(-M)。在某些历史中,重命名可能被视作“删除+新增”。
  • 已删除/不存在的文件会被跳过并计入“跳过数”,控制台会打印警告。
  • 复制需要对源文件有读权限、对输出目录有写权限。

About

将Svn或Git仓库指定两次提交之间的差异按照结构进行输出

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages