如何用GitPython获取最近提交中排除删除、重命名的修改文件路径
GitPython过滤最近提交中删除/重命名文件的实现方案
你原来通过commit.stats.files获取的变更列表会包含全类型变更的文件,要过滤删除、重命名的文件,可通过对比当前提交与父提交的diff记录实现,完整代码如下:
import os import sys from git import Repo repo = Repo(os.path.dirname(sys.argv[0])) latest_commit = list(repo.iter_commits(max_count=1))[0] # 处理边界:如果是仓库第一次提交,没有父提交 if not latest_commit.parents: # 初始提交所有文件都是新增 valid_files = latest_commit.stats.files.keys() else: parent_commit = latest_commit.parents[0] # 对比两个提交的差异,关闭补丁生成提升效率 diffs = latest_commit.diff(parent_commit, create_patch=False) valid_files = [] for diff_item in diffs: # 仅保留新增、修改的文件,过滤删除(D)、重命名(R)等类型 if diff_item.change_type in ('A', 'M'): valid_files.append(diff_item.b_path) # 输出结果 for filepath in valid_files: print(filepath)
补充说明
- 变更类型标识说明:
A:新增文件M:内容修改的文件D:已删除的文件(已过滤)R:重命名的文件(已过滤),若需要保留重命名后的新路径,可在判断条件中新增'R',取diff_item.b_path即可
- 如果需要保留重命名前的旧路径,可取值
diff_item.a_path
内容的提问来源于stack exchange,提问作者Helen
相关产品推荐
相关产品推荐

