使用 JGit 按分支或提交 ID 签出 Git 存储库

Checking out a Git repository by branch or commit ID using JGit

我目前正在使用以下方法使用 JGit 克隆存储库:

Git.cloneRepository()
    .setURI(uri)
    .setDirectory(createTempDir())
    .setBranchesToClone(singleton("refs/heads/" + branch))
    .setBranch("refs/heads/" + branch)
    .call();

不过我想允许 branch 也是一个提交 ID。我该如何实施?

克隆 Git 存储库时,您只能指定要克隆的分支(或更一般的引用)。这不是 JGit 特有的,也适用于 CLI Git.

可以查询远程存储库以获取可用引用及其提交 ID,但无法克隆任意提交 ID。

使用 JGit,LsRemoteCommand 可用于获取所有可用的参考文献,而无需实际下载相应的历史记录。或者您可以使用 CloneCommand 指定一个已知的引用,以便克隆给定的引用及其历史记录。

如果性能和带宽不是问题,您当然可以克隆一个存储库及其所有引用 (cloneCommand.setCloneAllBranches( true )),一旦它在本地可用,检查所需的提交。