在Dulwich中使用分支(访问对象/签出)

时间:2018-08-21 15:16:56

标签: python python-3.x git gitpython dulwich

我的Dulwich遇到了问题(由于众所周知的Windows错误,在.git文件夹中打开了文件,因此从GitPython切换到了它)。

我正在尝试从当前打开的存储库的另一个分支中获取文件(其最近一次提交的状态)。在GitPython中,可以轻松便捷地解决此任务:

ContractState

但是我没有找到任何一种便捷的方式来处理在德威的分支机构。

在编写此问题时,我发现了一个Receive方法,该方法返回包含所有引用和指向的提交的字典。现在,我认为我可以获取上一次提交的SHA,但是引用非常不友好-我需要使用以下形式来获取提交:

signature

之后,我可以通过这种方式获取文件:

file_object = repo.heads[BRANCH].commit.tree[FILENAME]

是否有适当的(更“ pythonic” /“ gitonic”)方式来获取所需的文件版本,而无需完全检出分支?在程序运行时,某些已上载/未上载的文件可以存储在repo中,我想它们会中断检出过程。
现在,对我来说,主要问题是需要将通常的分支名称“打包”为“ refs / heads /”形式。
而且,如果没有更准确的方法来获取此信息-希望我的问题将来对某人有所帮助:)

Python:3.6.1
德威:0.19.6

1 个答案:

答案 0 :(得分:0)

在最新版的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].data