我正在使用JGit中的Class Repository在java中编写我的程序。
此类的方法为resolve(String revstr)。
基本上这个方法解析一个git修订字符串并返回一个对象id。支持这些运算符的特定组合:
HEAD,MERGE_HEAD,FETCH_HEAD
SHA-1:完整或缩写的SHA-1
refs / ...:完整的参考名称
短名称:refs / heads,refs / tags或refs / remotes namespace下的简短引用名称 tag-NN-gABBREV:describe的输出,通过将ABBREV视为缩写的SHA-1进行解析。
id ^:commit id的第一个parent,这与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?
答案 0 :(得分:1)
您传递给resolve()
的表达式要求cnf...
的{{3}}(BTW,Git对象ID仅包含十六进制字符)。这很可能是你得到的,你指定的提交的树ID。
要将字符串转换为JGit ObjectId,请使用
ObjectId objectId = ObjectId.fromString( "..." );
另请参阅:tree id