使用 JGit 从 Git 存储库中查看特定修订

Posted

技术标签:

【中文标题】使用 JGit 从 Git 存储库中查看特定修订【英文标题】:Check out specific revision from Git repository with JGit 【发布时间】:2014-09-13 14:10:23 【问题描述】:

我正在尝试使用 jGit 克隆存储库并签出特定的提交。

假设提交哈希为:1e9ae842ca94f326215358917c620ac407323c81。

我的第一步是:

// Cloning the repository
    Git.cloneRepository()
        .setURI(remotePath)
        .setDirectory(localPath)
        .call();

然后我发现了另一个建议这种方法的问题:

git.checkout().
                setCreateBranch(true).
                setName("branchName").
                setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK).
                setStartPoint("origin/" + branchName).
                call();

但我不确定如何将两者联系在一起?

有什么想法吗?

【问题讨论】:

【参考方案1】:

您必须先克隆存储库,因此您的第一步是正确的:

Git.cloneRepository().setURI(remotePath).setDirectory(localPath).call();

要通过 id 签出提交,您可以像这样调用checkout

git.checkout().setName("<id-to-commit>").call();

但请注意,这将导致detached HEAD。为避免这种情况,您可以告诉checkout 首先创建一个指向提交的新分支,然后签出该分支。

git.checkout().setCreateBranch(true).setName("new-branch").setStartPoint("<id-to-commit>").call();

API 不是很直观,但它可以做它应该做的事情。

【讨论】:

谢谢,这正是我所需要的! @rüdiger-herrmann 如何在结帐后删除新分支? @AnaSustic 见这里:***.com/questions/24055688/… @Rüdiger Herrmann 如果我想检查提交中的特定路径。那我该怎么做呢? 您是否尝试过使用addPath,例如git.setName("&lt;commit-id&gt;").addPath("path/to/file").call()?

以上是关于使用 JGit 从 Git 存储库中查看特定修订的主要内容,如果未能解决你的问题,请参考以下文章

如何 git-svn 从 Subversion 存储库克隆最后 n 个修订?

JGit 中的 git diff 等价物

如何使用 Java 代码从 Git 存储库下载文件

如何使用 JGit 找到提交的分支?

如何从 git 存储库中删除源

如何转换 git 存储库中的大量提交 [重复]