获取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)
相关推荐
南果梨18 小时前
OpenClaw 完整教程!从安装到使用(官方脚本版)
前端·git·开源
Selicens2 天前
git批量删除本地多余分支
前端·git·后端
闲云一鹤3 天前
Git LFS 扫盲教程 - 你不会还在用 Git 管理大文件吧?
前端·git·前端工程化
vibecoding日记6 天前
为什么我就想要「线性历史 + Signed Commits」,GitHub 却把我当猴耍 🤬🎙️
git·编程工具
程序员小崔日记6 天前
如何将代码轻松上传到 Gitee?Git 使用全攻略!
git·gitee·上传
Bigger7 天前
为什么你的 Git 提交需要签名?—— Git Commit Signing 完全指南
git·开源·github
DianSan_ERP8 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
红豆子不相思8 天前
Tomcat 环境搭建与集群实战
服务器·git·tomcat
杰哥技术分享8 天前
Git 仓库迁移技术文档:从 CODING.net 迁移至腾讯云 CNB
git