获取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)
相关推荐
西西偷西瓜3 小时前
Soybean Admin移除git-hooks永久关闭git校验
git·vue
Archie_IT4 小时前
修图自由!自建IOPaint服务器,手机平板随时随地远程调用在线P图
运维·服务器·前端·git·深度学习·npm·conda
黑眼圈的小熊猫6 小时前
Git开发
大数据·git·elasticsearch
小镇敲码人12 小时前
【深入浅出 Git】:从入门到精通
git
gqkmiss16 小时前
Git 常用命令集与实际使用 Demo
大数据·git·elasticsearch·git 命令·git 命令大全
yantuguiguziPGJ17 小时前
Windows 下搭建 Git 本地服务器并进行开发
git
程序猿chen21 小时前
安全岗の夺命连环问:(第壹篇)从XSS到0day的灵魂拷问
前端·git·安全·面试·跳槽·xss·改行学it
ducking__1 天前
git基本使用
git
xujiangyan_1 天前
MySQL的半同步模式
数据库·git·mysql