获取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)
相关推荐
不老刘14 小时前
Antigravity 的 New Worktree 模式:给 AI 代理一个安全的“平行工位”
人工智能·git·ai编程·antigravity
光谱SpectrAI15 小时前
Windows 也中招:Git Bash 和 Node 仍信任泄露的 eMudhra 证书
git
YIN_尹15 小时前
【git原理与使用】git初识与安装
大数据·git·elasticsearch
Leo_Mr19 小时前
Vue3 项目配置 Git 提交规范(企业通用方案:husky + commitlint + cz-git + lint-staged)
git
jyOverQ20 小时前
Git rebase 和 merge 有什么区别?什么时候该用哪个?
git
晗夜未央20 小时前
跨仓库 Skill 换台电脑就失效?用 Git remote 校验项目
人工智能·git·python
Lsetea20 小时前
Git访问HTTPS证书不受信任:用URL级sslCAInfo限定私有CA范围
git·https·开发工具·ssl证书·ca证书
এ慕ོ冬℘゜1 天前
Git 基础入门|和 SVN 对比 + 四大区域 + 常用命令详解
git·svn
DevLoom_2 天前
macOS 命令行 curl/git 报 SSL 证书错误?eMudhra 事件完整修复指南
git·macos·ssl
keyipatience2 天前
Git学习(4)Git分布式优势与实战配置全解析
git·学习