当前位置: 首页 > news >正文

git比较不同分支的不同提交文件差异

背景:只想比较某2个分支的某2次提交的差异,不需要带上父提交。

以commitA为基准,用commitB去比较差异

直接上代码:


commitA=xxxx1
commitB=xxxx2
outputFile="output.txt"# 获取与第一个父提交的文件列表
filesA=$(git diff --name-only $commitA^1 $commitA)
filesB=$(git diff-tree --no-commit-id --name-only -r $commitB)# 创建关联数组来存储文件状态
declare -A fileStatus# 将 filesA 和 filesB 的文件状态存入关联数组
for file in $filesA; dofileStatus["$file"]="DELETE"
donefor file in $filesB; doif [[ -n "${fileStatus["$file"]}" ]]; thenfileStatus["$file"]="MODIFY"elsefileStatus["$file"]="ADD"fi
done# 输出文件状态
for file in "${!fileStatus[@]}"; doecho "$file (${fileStatus[$file]})" >> "$outputFile"
done

可以用python实现美化树结构

def build_tree(file_list):tree = {}for line in file_list:# 分割文件路径和状态file_path, status = line.rsplit(' ', 1)parts = file_path.split('/')current = treefor part in parts[:-1]:  # 处理目录部分if part not in current:current[part] = {}current = current[part]# 处理文件部分file_name = parts[-1]current[file_name] = status.strip('()')  # 只在文件上存储状态return treedef print_tree(node, prefix='', is_last=True):for i, (key, value) in enumerate(node.items()):connector = '└── ' if is_last else '├── '# 判断是否是文件,最后一个文件不加 '/'if isinstance(value, str):  # 如果是文件,直接打印状态print(prefix + connector + key + ' (' + value + ')')else:  # 如果是目录,打印目录名print(prefix + connector + key + '/')if isinstance(value, dict):new_prefix = prefix + ('    ' if is_last else '│   ')print_tree(value, new_prefix, i == len(node) - 1)# 读取文件内容
with open('output.txt', 'r') as file:file_content = file.readlines()file_content = [line.strip() for line in file_content]# 构建树形结构
file_tree = build_tree(file_content)# 打印树形结构
print("文件树形结构:")
print_tree(file_tree)


http://www.mrgr.cn/news/99317.html

相关文章:

  • Java--数组的应用
  • 深入理解设计模式之模板方法模式
  • 数仓面试内容
  • Spring AI MCP
  • 字符串拼接问题的最佳解决方案
  • MetaGPT智能体框架深度解析:记忆模块设计与应用实践
  • C语言高频面试题——常量指针与指针常量区别
  • 堆栈溢出 StackOverflowError 排查
  • 辛格迪客户案例 | 浙江高跖医药委托生产质量管理协同(OWL MAH)项目
  • vue3 + element-plus中el-dialog对话框滚动条回到顶部
  • 存储器综合:内存条
  • [SpringBoot]配置文件(1)
  • 查看matlab函数帮助文档的方法
  • 嵌入式工程师( C / C++ )笔试面试题汇总
  • Python常用的第三方模块之二【openpyxl库】读写Excel文件
  • 前端笔记-Vue3(上)
  • Linux学习笔记|入门指令
  • Linux:权限相关问题
  • Linux 入门十一:Linux 网络编程
  • 辛格迪客户案例 | 上海科济药业细胞治疗生产及追溯项目(CGT)