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

背景

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

解决思路:

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

实现代码:

python 复制代码
# -*- 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)
相关推荐
克里斯蒂亚诺更新20 小时前
云效和IDEA关于git的相通使用
git
Gavynlee20 小时前
Git 操作问题排查与解决方案记录(Gitee 实战)
git·elasticsearch·gitee
邪修king20 小时前
Re:Linux系统篇(十):从零上手 Git + GitHub(Ubuntu 环境实操完整版|个人代码归档必备)
linux·git·github
李可以量化20 小时前
Redis 从了解到精通(三)下:性能基准测试与量化场景性能避坑指南
redis·git·python·量化交易·qmt·ptrade
青 春 记 忆1 天前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
牢姐与蒯1 天前
Linux基础开发工具之版本控制器git
git
云原生指北1 天前
Docker Sandboxes 工作区怎么接:Direct、Clone 和它们的边界
git·docker·agent
菠萝猫yena1 天前
【git】git 命令常用组合
大数据·git·elasticsearch
Liekkas Kono2 天前
aicommits 工具接入 Codex CLI 使用
git·swhl·aicommits
KieranYin2 天前
Git | WorkTree(工作树)
git