当前位置: 首页 > 面试题库 >

使用JGit从Git存储库中检出特定修订版

何骞尧
2023-03-14
问题内容

我正在尝试使用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();

但是我不确定如何将两者链接在一起?

有什么想法吗?


问题答案:

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

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

要仅通过ID检出提交,可以这样调用checkout

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

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

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

该API并不是很直观,但是可以做到。



 类似资料:
  • 我正在尝试使用jGit克隆存储库并签出特定的提交。 假设提交哈希为:1e9ae842ca94f326215358917c620ac407323c81。 我的第一步是: 然后我发现另一个问题建议这种方法: 但我不知道如何将两者联系起来? 有什么想法吗?

  • 问题内容: 我想使用Java JGit库来检索先前提交的文件修订。该文件每天都会更新,我需要从git存储库访问以前的版本。 我知道如何通过提供提交的修订我需要哈希,如所描述检出一个特定的修订版本在这里用这个命令: 当前,我克隆存储库,搜索该文件的最新提交,然后签出修订版。我现在的过程很麻烦,因为我每次都需要重新检出存储库。我宁愿只是从特定修订版(例如,master分支)中导出单个文件。 修订日志

  • 我正在使用JGit访问远程Git回购,我需要为此使用SSH。JGit使用JSch提供安全访问。但是,我不确定如何设置JGit的密钥文件和知道主机文件。我所尝试的如下。 创建SshSessionFactory的自定义配置,通过子类化JSchConfigSessionFactory使用: 在我访问远程Git回购的类中,执行了以下操作: 我不知道如何将这个JSch对象与JGit关联,以便它能够成功地连接

  • 我生成了ssh密钥并配置了git和SourceTree。我可以从git-bash进行git拉动和其他操作。注意:我在.bashrc中添加了以下内容以使其工作。 如果我在SourceTree(即git-bash)中打开终端,它会向我询问密码短语。所以,我怀疑我的。Bashrc不是由SourceTree来源的。还是我错过了什么?

  • 有人知道如何使用JGit API获取文件列表吗?我试图在本地存储库中找到类似的函数,比如使用<code>git show 我有一些类似的代码 此代码以本地存储库为目标,使用 遍历上次提交的修订树。我发现这个例子使用来获取文件的引用,但是dunno如何获取所有Java文件的列表。欢迎任何建议。

  • 问题内容: 我想使用JGit获取存储库中的最后提交元数据(按日​​期最小的提交)。 我知道我可以使用以下方式获取提交元数据 但是如何获取最新的提交哈希? 还有其他方法可以直接在存储库中按日期获取最小数据吗? 问题答案: 按所有分支中的最后提交日期进行比较。 可以更改为仅比较远程分支。或者… 可以省略流利的setter 以便从本地存储库读取。