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

获取git分支间差异文件列表

背景

国际化开发时,每次新功能上线,都需要对比变更的文件进行国际化处理。项目代码量小时,我们可以进行全量处理,但是岁代码量增加,就需要只对增量的部分进行过滤。

解决思路:

使用gitPython,对新功能分支和主干分支比较,获取变更的文件列表。然后使用国际化替换脚本,完成国际化的支持。

实现代码:

# -*- coding:UTF-8 -*-

"""
 @FileName     : git_diff_files
 @Description  : 获取本次变更的文件列表
 @Time         : 2025/3/31 15:58
 @Author       : Qredsun
 """

# 切换至master分支
#
# 获取指定分支和master分支的差异文件列表
# git diff --name-only origin/master..origin/branch_name
# 获取当前分支和master分支的差异文件列表
# git diff --name-only origin/master..origin/HEAD

from git import Repo
from loguru import logger

class GitDiffFiles:
    # 特殊的分支
    SPECIAL_BRANCHES = ["master", "develop", "env/dev", "env/test"]
    def __init__(self, git_dir):
        self.git_dir = git_dir

        self.check_git_dir()

    def check_git_dir(self):
        # 检查是否是git目录
        self.repo = Repo(self.git_dir)
        if self.repo.bare:
            logger.warning("当前目录不是一个有效的Git仓库。")
            return False
        if self.repo.is_dirty():
            logger.warning("当前目录有未提交的变更,请先提交或暂存变更。")
            return False
        if self.repo.active_branch.name in self.SPECIAL_BRANCHES:
            logger.warning(f"当前分支不能是{self.SPECIAL_BRANCHES}分支,请切换到你的开发分支。")
            return False

    def update_dir(self):
        # 拉取最新代码
        self.repo.remote().pull()

    def diff_branch(self, branch_name="develop"):
        # 和指定分支比较差异, 默认和develop分支比较
        return self.repo.active_branch.commit.diff(branch_name)

    def get_diff_files(self):
        # 获取本次变更的文件列表
        diff_files = [item.a_path for item in self.diff_branch()]
        return diff_files

if __name__ == '__main__':
    repository = r'D:\work\frontEnd\admin-monorepo'
    gd = GitDiffFiles(repository)
    diff_files = gd.get_diff_files()
    print(diff_files)

相关文章:

  • QEMU学习之路(6)— RISC-V 启动Linux
  • 技术分享|iTOP-RK3588开发板Ubuntu20系统旋转屏幕方案
  • 蓝桥杯 15g
  • Matlab 电机激励模型和仿真
  • Linux上位机开发实践(mcu模块的补充应用)
  • 【常用功能】下载文件和复制到剪切板
  • Flink的 RecordWriter 数据通道 详解
  • vue2 el-element中el-select选中值,数据已经改变但选择框中不显示值,需要其他输入框输入值才显示这个选择框才会显示刚才选中的值
  • 【2】安装Nodejs-Nodejs开发入门
  • 直播电商革命:东南亚市场的“人货场”重构方程式
  • GNSS静态数据处理
  • 如何将网页保存为pdf
  • 【后端开发】Spring MVC-计算器、用户登录、留言板
  • TaskFlow开发日记 #1 - 原生JS实现智能Todo组件
  • C++ I/O 性能优化指南
  • my2sql工具恢复误删数据
  • 蓝桥杯知识总结
  • Python及Javascript的map 、 filter 、reduce类似函数的对比汇总
  • python 办公自动化------ excel文件的操作,读取、写入
  • 大模型上下文协议MCP详解(2)—核心功能
  • 建设完网站成功后需要注意什么问题/商业软文代写
  • 麻涌做网站/谷歌怎么投放广告
  • 怎样做免费网站/seo优化师
  • 怎么做自己的微信网站/国际新闻头条
  • 家居网站建设全网营销/网络优化工程师为什么都说坑人
  • 新注册的公司怎么做网站/seo在线优化网站