我正在开发一个将在 git repo 中添加和更新文件的程序。由于我无法确定我正在使用的文件当前是否在 repo 中,我需要检查它的存在 - 这个操作似乎比我想象的要难。
'in' 比较似乎不适用于 gitpython 中树的非根级别。前任。
>>> repo = Repo(path)
>>> hct = repo.head.commit.tree
>>>> 'A' in hct['documents']
False
>>> hct['documents']['A']
<git.Tree "8c74cba527a814a3700a96d8b168715684013857">
所以我想知道,人们如何在尝试处理给定文件之前检查给定文件是否在 git 树中?尝试访问不在树中的文件的对象将引发 KeyError,因此我可以尝试捕获。但这感觉像是在例行存在检查中使用异常处理很糟糕。
我错过了一些非常明显的事情吗?如何使用 gitpython(或 Python 中的任何库/方法)检查提交树中是否存在文件?
自我回答
好的,我在Tree 类中四处挖掘,看看 __contains__ 做了什么。事实证明,在子文件夹中搜索时,必须使用来自 repo 根目录的完整相对路径来检查文件是否存在。所以我上面所做的检查的工作版本是:
>>> 'documents/A' in hct['documents']
True