如何通过Git命令同时导出分支与master的差异文件两份副本
Git 批量导出两个分支差异对应版本文件的解决方案
你之前使用的cp命令仅能拷贝当前工作目录的实体文件,不会读取分支内的提交版本,因此交换分支对比顺序也不会改变导出结果。
可以直接在 Git Bash 中执行以下脚本完成批量导出:
# 提前创建两个版本的存储目录 mkdir -p C:/Temp/master mkdir -p C:/Temp/mybranch # 遍历所有差异文件,分别导出两个分支的对应版本 git diff MyBranch master --name-only | while read file; do # 导出 master 分支版本,自动创建对应子目录保持原结构 mkdir -p "C:/Temp/master/$(dirname "$file")" git show "master:$file" > "C:/Temp/master/$file" # 导出 MyBranch 分支版本 mkdir -p "C:/Temp/mybranch/$(dirname "$file")" git show "MyBranch:$file" > "C:/Temp/mybranch/$file" done
优化说明
- 如果差异列表中包含某一分支已删除的文件,可以添加分支文件存在性判断,避免导出时报错,调整后的循环逻辑如下:
git diff MyBranch master --name-only | while read file; do # 仅当文件在 master 分支存在时导出 if git cat-file -e "master:$file" 2>/dev/null; then mkdir -p "C:/Temp/master/$(dirname "$file")" git show "master:$file" > "C:/Temp/master/$file" fi # 仅当文件在 MyBranch 分支存在时导出 if git cat-file -e "MyBranch:$file" 2>/dev/null; then mkdir -p "C:/Temp/mybranch/$(dirname "$file")" git show "MyBranch:$file" > "C:/Temp/mybranch/$file" fi done
- 如果你不需要本地存储两份文件,仅需要对比差异,可以直接配置 Git 的外部对比工具,执行
git difftool -d MyBranch master即可直接调用你常用的 Windows 对比工具打开目录级差异对比,无需手动导出文件。
内容的提问来源于stack exchange,提问作者Rob Tyketto
相关产品推荐
相关产品推荐

