背景
国际化开发时,每次新功能上线,都需要对比变更的文件进行国际化处理。项目代码量小时,我们可以进行全量处理,但是岁代码量增加,就需要只对增量的部分进行过滤。
解决思路:
使用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)