我如何使用 JGit 找到分支的第一次提交?
How can I find the first commit of a branch with JGit?
我想使用 Eclipse 的 JGit 库找到特定分支的第一个提交。例如,如果我有
master -- a -- c -- d -- e
\
feature b -- f -- g -- h
\
another j -- k -- l
// findBranchRoot() is the magic method we want to create
repository.resolve("feature").findBranchRoot().getId(); // this would return b
repository.resolve("another").findBranchRoot().getId(); // this would return j
有人知道怎么做吗?
如果first commit表示分支的最recent/youngest次提交,可以使用Repository::resolve
返回的ObjectId
获取RevCommit
(JGit 对提交对象的表示)带有 RevWalk
:
ObjectId commitId = repository.resolve("refs/heads/feature");
try(RevWalk revWalk = new RevWalk(repository)) {
RevCommit commit = revWalk.parseCommit(commitId);
}
我建议将完全限定的 ref 传递给 resolve
(如示例中所示)。否则,您可能会得到 AmbiguousObjectException
或方法 returns 具有相同短名称的注释或标签。
您将遇到的问题是——请耐心等待,在这里——提交不是 "on" 分支。要看到这一点,请考虑您绘制的图表。这是模棱两可的。难免如此。你画了
A---C---D---E master
\
B---F---G---H feature
\
J---k---L another
而且根本无法确定 B
是 "on" feature
还是 another
(或者,就此而言,三个 A
是 "on").
A---C---D---E master
\
B---J---K---L another
\
F---G---H feature
显示完全相同的历史记录。这完全取决于您选择如何解释它。
如果你想将提交绑定到一些外部管理记录,在提交消息中放置一个标记,就可以了,但在 Git 本身(以及实际工作)中它是历史重要的是结构,而不是在这个 repo 或那个中如何引用它的位。
如果到了发布 feature
或 another
的时候,您将需要以任何一种方式推送提交 B
,除非它已经作为其他一些内容的一部分被推送工作。血统很重要。分支名称没有。
我想使用 Eclipse 的 JGit 库找到特定分支的第一个提交。例如,如果我有
master -- a -- c -- d -- e
\
feature b -- f -- g -- h
\
another j -- k -- l
// findBranchRoot() is the magic method we want to create
repository.resolve("feature").findBranchRoot().getId(); // this would return b
repository.resolve("another").findBranchRoot().getId(); // this would return j
有人知道怎么做吗?
如果first commit表示分支的最recent/youngest次提交,可以使用Repository::resolve
返回的ObjectId
获取RevCommit
(JGit 对提交对象的表示)带有 RevWalk
:
ObjectId commitId = repository.resolve("refs/heads/feature");
try(RevWalk revWalk = new RevWalk(repository)) {
RevCommit commit = revWalk.parseCommit(commitId);
}
我建议将完全限定的 ref 传递给 resolve
(如示例中所示)。否则,您可能会得到 AmbiguousObjectException
或方法 returns 具有相同短名称的注释或标签。
您将遇到的问题是——请耐心等待,在这里——提交不是 "on" 分支。要看到这一点,请考虑您绘制的图表。这是模棱两可的。难免如此。你画了
A---C---D---E master
\
B---F---G---H feature
\
J---k---L another
而且根本无法确定 B
是 "on" feature
还是 another
(或者,就此而言,三个 A
是 "on").
A---C---D---E master
\
B---J---K---L another
\
F---G---H feature
显示完全相同的历史记录。这完全取决于您选择如何解释它。
如果你想将提交绑定到一些外部管理记录,在提交消息中放置一个标记,就可以了,但在 Git 本身(以及实际工作)中它是历史重要的是结构,而不是在这个 repo 或那个中如何引用它的位。
如果到了发布 feature
或 another
的时候,您将需要以任何一种方式推送提交 B
,除非它已经作为其他一些内容的一部分被推送工作。血统很重要。分支名称没有。