python - 与德威的分支机构合作(访问对象/结帐)
问题描述
我对 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
解决方案
在最新版本的德威,您可以使用get_object_by_path
(from 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
推荐阅读
- javascript - 如何禁用按钮 - HTML/Javascript
- docker - 通过 docker 镜像运行时,Webpack 站点不会显示
- python - 有什么方法可以使用 python 将 Pdf 文件转换为 Docx
- ios - 从 Mac 读取 iPhone 日志文件内容
- powershell - 如何使用调整后的设置在 /silent 模式下运行安装
- angular - 如何将 Angular 6 部署到 Azure Web App - 您没有权限
- xml - 通过匹配标签值删除xml中的前/后行
- ios - 如何使用 Firestore 中的集合和子集合在数组中创建数组?
- java - 调用访问器方法的方法可以是访问器方法吗
- java - 制作字符串所需的旋转次数