首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Dulwich中的分支(access对象/签出)

使用Dulwich中的分支(access对象/签出)
EN

Stack Overflow用户
提问于 2018-08-21 15:16:55
回答 1查看 437关注 0票数 2

我对Dulwich有一个问题(从GitPython切换到它,因为.git文件夹中打开的文件是众所周知的Windows )。

我正在尝试从当前打开的repo的另一个分支获取一个文件(它的状态从上次提交开始)。在GitPython中,这个任务可以很好地以轻松的方式解决:

代码语言:javascript
复制
file_object = repo.heads[BRANCH].commit.tree[FILENAME]

但我没有找到任何舒适的方法来处理杜尔威奇的分支机构。

在编写这个问题时,我发现了一个get_refs方法,它返回字典,其中包含所有参考文献以及它们所指向的提交。现在我想我可以得到上一次提交的SHA,但是裁判非常不友好地使用--我需要使用这样的形式来获得一个commit:

代码语言:javascript
复制
commit_id = repo.get_refs()[b"refs/heads/develop"]

在此之后,我可以这样获得我的文件:

代码语言:javascript
复制
    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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-20 18:58:25

在最近版本的dulwich中,您可以使用get_object_by_path (来自dulwich.porcelain):

代码语言:javascript
复制
print get_object_by_path(x, "some/file/path", "somebranch").data

在旧版本中,最短的方法是(其中x是存储库):

代码语言:javascript
复制
mode, object_sha = tree_lookup_path(
      x.__getitem__, x['refs/heads/master'].tree, 'some/file/path')
x[object_sha].data
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51951853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档