使用 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("<commit-id>").addPath("path/to/file").call()
?以上是关于使用 JGit 从 Git 存储库中查看特定修订的主要内容,如果未能解决你的问题,请参考以下文章