在 Dulwich 中使用分支机构(访问对象/结帐)
Working with branches in Dulwich (access objects / checkout)
我有 Dulwich 的问题(从 GitPython 切换到它,因为 .git 文件夹中打开的文件存在众所周知的 Windows 错误) .
我正在尝试从当前打开的 repo 的另一个分支获取文件(上次提交的状态)。在 GitPython 中,这个任务可以很容易地解决:
file_object = repo.heads[BRANCH].commit.tree[FILENAME]
但我没有找到任何舒适的方式来处理 Dulwich 的分支机构。
在写这个问题时,我发现了一个 get_refs
方法,其中 returns 字典包含所有引用和它们所指向的提交。现在我想我可以获得最后一次提交的 SHA,但是使用 refs 非常不友好 - 我需要使用这样的形式来获得提交:
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")方法来获取所需的文件版本而无需完全检出分支?某些 staged/unstaged 文件可以在程序 运行 时存储在 repo 中,我想它们会中断结帐过程。
现在对我来说主要的问题是需要 "pack" 通常的分支名称到 "refs/heads/" 形式。
如果没有更准确的方法来获取此信息 - 我希望我的问题可以帮助将来的人:)
Python: 3.6.1
德威:0.19.6
在最新版本的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
我有 Dulwich 的问题(从 GitPython 切换到它,因为 .git 文件夹中打开的文件存在众所周知的 Windows 错误) .
我正在尝试从当前打开的 repo 的另一个分支获取文件(上次提交的状态)。在 GitPython 中,这个任务可以很容易地解决:
file_object = repo.heads[BRANCH].commit.tree[FILENAME]
但我没有找到任何舒适的方式来处理 Dulwich 的分支机构。
在写这个问题时,我发现了一个 get_refs
方法,其中 returns 字典包含所有引用和它们所指向的提交。现在我想我可以获得最后一次提交的 SHA,但是使用 refs 非常不友好 - 我需要使用这样的形式来获得提交:
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")方法来获取所需的文件版本而无需完全检出分支?某些 staged/unstaged 文件可以在程序 运行 时存储在 repo 中,我想它们会中断结帐过程。
现在对我来说主要的问题是需要 "pack" 通常的分支名称到 "refs/heads/" 形式。
如果没有更准确的方法来获取此信息 - 我希望我的问题可以帮助将来的人:)
Python: 3.6.1
德威:0.19.6
在最新版本的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