背景
国际化开发时,每次新功能上线,都需要对比变更的文件进行国际化处理。项目代码量小时,我们可以进行全量处理,但是岁代码量增加,就需要只对增量的部分进行过滤。
解决思路:
使用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/HEADfrom git import Repo
from loguru import loggerclass GitDiffFiles:# 特殊的分支SPECIAL_BRANCHES = ["master", "develop", "env/dev", "env/test"]def __init__(self, git_dir):self.git_dir = git_dirself.check_git_dir()def check_git_dir(self):# 检查是否是git目录self.repo = Repo(self.git_dir)if self.repo.bare:logger.warning("当前目录不是一个有效的Git仓库。")return Falseif self.repo.is_dirty():logger.warning("当前目录有未提交的变更,请先提交或暂存变更。")return Falseif self.repo.active_branch.name in self.SPECIAL_BRANCHES:logger.warning(f"当前分支不能是{self.SPECIAL_BRANCHES}分支,请切换到你的开发分支。")return Falsedef 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_filesif __name__ == '__main__':repository = r'D:\work\frontEnd\admin-monorepo'gd = GitDiffFiles(repository)diff_files = gd.get_diff_files()print(diff_files)