我正在研究一個將在git回購中添加和更新文件的程序。由於我無法確定我正在使用的文件是否正在回購,我需要檢查它的存在 - 這似乎比我想象的要難。檢查一個對象是否在gitpython的回購中
'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中的任何庫/方法)檢查提交樹中是否存在文件?
自答
OK,我在Tree class周圍挖,看看__contains__做什麼。原來,在子文件夾中搜索時,必須使用回購根的完整相對路徑來檢查文件是否存在。所以,檢查我上面做的工作版本是:
>>> 'documents/A' in hct['documents']
True