我对Dulwich有一个问题(从GitPython切换到它,因为.git文件夹中打开的文件是众所周知的Windows )。
我正在尝试从当前打开的repo的另一个分支获取一个文件(它的状态从上次提交开始)。在GitPython中,这个任务可以很好地以轻松的方式解决:
file_object = repo.heads[BRANCH].commit.tree[FILENAME]但我没有找到任何舒适的方法来处理杜尔威奇的分支机构。
在编写这个问题时,我发现了一个get_refs方法,它返回字典,其中包含所有参考文献以及它们所指向的提交。现在我想我可以得到上一次提交的SHA,但是裁判非常不友好地使用--我需要使用这样的形式来获得一个commit:
commit_id = repo.get_refs()[b"refs/heads/develop"]在此之后,我可以这样获得我的文件:
tree_path = porcelain.path_to_tree_path(REPO_ROOT, os.path.join(REPO_ROOT, FILENAME))
_, object_sha = tree_lookup_path(repo.get_object, repo[commit_id].tree, tree_path)
file_object = repo[object_sha].data是否有一种正确的(更多的"pythonic"/"gitonic")方法可以在不完全签出分支的情况下获得所需的文件版本?在程序运行时,可以将一些分阶段/未分阶段的文件存储在repo中,我认为它们会中断结帐过程。
现在,对我来说,主要的问题是需要“打包”通常的分支名称为“form /head/”表单。
如果没有更准确的方法来获取这些信息,我希望我的问题将来能帮助到某人:)
Python: 3.6.1
杜尔威奇: 0.19.6
发布于 2018-10-20 18:58:25
在最近版本的dulwich中,您可以使用get_object_by_path (来自dulwich.porcelain):
print get_object_by_path(x, "some/file/path", "somebranch").data在旧版本中,最短的方法是(其中x是存储库):
mode, object_sha = tree_lookup_path(
x.__getitem__, x['refs/heads/master'].tree, 'some/file/path')
x[object_sha].datahttps://stackoverflow.com/questions/51951853
复制相似问题