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