私は、gitリポジトリでファイルを追加および更新するプログラムに取り組んでいます。作業中のファイルが現在リポジトリにあるかどうかわからないため、その存在を確認する必要があります。これは、思ったよりも難しいようです。
'in' 比較は、gitpython のツリーの非ルート レベルでは機能しないようです。元。
>>> repo = Repo(path)
>>> hct = repo.head.commit.tree
>>>> 'A' in hct['documents']
False
>>> hct['documents']['A']
<git.Tree "8c74cba527a814a3700a96d8b168715684013857">
だから私は疑問に思っています.与えられたファイルがgitツリーにあることを、作業を試みる前にどのようにチェックするのですか? ツリーにないファイルのオブジェクトにアクセスしようとすると KeyError がスローされるため、try-catch を実行できます。しかし、それは定期的な存在チェックのための例外処理の不適切な使用のように感じます.
本当に明らかなことを見逃していませんか?gitpython (または実際には Python の任意のライブラリ/メソッド) を使用して、コミット ツリー内のファイルの存在を確認するにはどうすればよいですか?
自己回答
OK、私は__contains__ が何をするかを見るためにTree クラスを掘り下げました。サブフォルダーを検索するときは、リポジトリのルートからの完全な相対パスを使用してファイルの存在を確認する必要があります。したがって、上記で行ったチェックの動作バージョンは次のとおりです。
>>> 'documents/A' in hct['documents']
True