【问题标题】:Check out specific revision from Git repository with JGit使用 JGit 从 Git 存储库中查看特定修订
【发布时间】: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();

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

有什么想法吗?

【问题讨论】:

    标签: java jgit


    【解决方案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 如何在结帐后删除新分支?
    • @Rüdiger Herrmann 如果我想检查提交中的特定路径。那我该怎么做呢?
    • 您是否尝试过使用addPath,例如git.setName("&lt;commit-id&gt;").addPath("path/to/file").call()?
    猜你喜欢
    • 2016-01-22
    • 2021-03-09
    • 2016-10-06
    • 2020-09-13
    • 2011-03-30
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多