【问题标题】:How to use Repository::resolve(String) in JGit如何在 JGit 中使用 Repository::resolve(String)
【发布时间】:2016-06-01 13:58:19
【问题描述】:

我正在使用 JGit 的 Class Repository 用 Ja​​va 编写程序。

这个类有方法resolve(String revstr)。

基本上这个方法解析一个 git 修订字符串并返回一个对象 id。支持这些运算符的特定组合:

HEAD、MERGE_HEAD、FETCH_HEAD
SHA-1:完整或缩写的 SHA-1
refs/...:完整的参考名称
short-name:在 refs/heads、refs/tags 或 refs/remotes 命名空间下的短引用名称
tag-NN-gABBREV:describe 的输出,通过将 ABBREV 视为缩写 SHA-1 进行解析。
id^:commit id 的第一个父级,与 id^1 相同
id^0:确保 id 是一个提交
id^n:提交 id 的第 n 个父级
id~n: id 的第 n 个历史祖先,由第一个父代。 id~3 等价于 id^1^1^1 或 id^^^.
id:path: 以 id 命名的树下的查找路径
id^{commit}:确保 id 是一个提交
id^{tree}:确保 id 是一棵树
id^{tag}:确保 id 是一个标签
id^{blob}:确保 id 是一个 blob

我想用这个方法

Repository repo;
ObjectId commit = repo.resolve("cnfuwfxmiazsdixfnsdiufsdhfiusfhsfisfh^{tree}");
System.out.println(commit );

预期输出:

cnfuwfxmiazsdixfnsdiufsdhfiusfhsfisfh

输出:

sjakfshdofcsmdfocsdfjdofdjgdhgfdgfhgf
//Output is another commit in project.

我想要我插入的提交,但它显示了另一个提交。 我认为是因为它是提交 id 的第一个父级。

有什么方法可以得到我在方法resolve()中放入的相同提交ID?

【问题讨论】:

    标签: java jgit


    【解决方案1】:

    您传递给resolve() 的表达式要求cnf...tree id(顺便说一句,Git 对象ID 仅包含十六进制字符)。这很可能是你得到的,你指定的提交的树 id。

    为了将字符串转换为 JGit ObjectId,请使用

    ObjectId objectId = ObjectId.fromString( "..." );
    

    另见:How to obtain the RevCommit or ObjectId from a SHA1 ID string with JGit?

    【讨论】:

    • 非常感谢。我正在阅读您的 JGit 食谱,并希望在“显示两次提交之间所有文件的更改差异”命令中了解您的代码。接下来的步骤将是实例化一个读取器以从 Git 数据库中读取数据并为每个提交创建树迭代器。我试过测试它,但它不起作用。你能帮帮我吗?
    • 我没有写 JGit 食谱,我不确定你在说什么。如果您有不同的问题,请在没有找到解决方案的情况下进行深入研究,然后写一个新的 SO 帖子。
    • 谢谢。我以为你写了 JGit 食谱。我会写一篇新的 SO 帖子。
    • 别介意。我写了几篇关于 JGit 的博文(见这里:codeaffine.com/?s=jgit),但没有写过 JGit 食谱。
    • 我之前阅读了你所有关于 JGit 的博客文章,它们对我帮助很大。谢谢;)
    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多