我试图让GitPython 0.3将文件提交到存储库。粗略地说,我这样做如下:裸仓库可以有索引吗?这是一个错误?
data = ...
istream = repo.odb.store(gitdb.IStream(git.Blob.type, len(data), StringIO(data)))
entry = git.BaseIndexEntry((stat.S_IFREG | 0644, istream.binsha, 0, path))
index = git.IndexFile.from_tree(repo, repo.heads['master'])
index.add([entry])
index.commit(commit_message)
对于非裸存储库,这可以按预期工作。请注意,我从不明确触摸文件系统,只有Git的对象数据库。
与裸仓库,但是,这并不工作:IndexFile.add
功能则饰以git_working_dir
装饰:
@git_working_dir
def add(self, items, force=True, fprogress=lambda *args: None, path_rewriter=None,
write=True):
"""Add files from the working tree, specific blobs or BaseIndexEntries
to the index.
这个装饰试图CHDIR到回购的working_tree_dir
,使路径引用可以解决正确。但是,working_tree_dir
对裸仓库无效,因此产生AssertionError
。
有没有人有一个想法,为什么这个装饰器在这里?它只是用于路径解析,还是不可能在裸仓库中创建索引?这是GitPython中的错误,还是我对Git的理解?
编辑:同样,IndexFile.remove
功能声称(通过default_index
装饰),我们是默认的索引。裸仓库当然没有默认索引,但它们可以根本没有索引对象吗?
@post_clear_cache
@default_index
def remove(self, items, working_tree=False, **kwargs):
"""Remove the given items from the index and optionally from
the working tree as well.
我会说这很好。无论如何,如果您要直接在裸回购库中发送这些斑点,则无需“更改”更改。 – anarcat 2015-03-30 19:53:22