2

我理解 Git fetch 的概念。我想通过 JGit API 中的 FetchCommand 类来获取对象。

我有一个 Git 存储库。例如C:\jGit\.git.

我已经克隆了这个存储库。例如:C:\jGitClone\jGit\.git

我再次克隆了这个存储库。例如C:\Users\user\Desktop\jGitClone\.git.

使用 JGit API 我有一个 Git 类:

Git git = new Git(repository); // this is the cloned repository. C:\jGitClone\jGit\.git

我将如何设置桌面上的克隆存储库,以便在调用 fetch 时知道要获取到此存储库中。

我看过一些网站,包括下面的 1,但仍然卡住。

使用 jgit 获取 Git 失败:远程没有可用于获取的 <branchname>

4

2 回答 2

1

我想你错过了什么。在 Git/jGit 中,本地副本由 a path(就像在文件系统中一样)和 a确定remote,它是一个远程仓库。

在您的情况下,您希望您的桌面克隆存储库具有指向您的存储库的链接jGitClone/jGit。所以首先,如果克隆已经完成,那么桌面存储库就会知道它的远程存储库。所以在你的代码中,你只需要告诉你的桌面仓库在哪里:

Builder builder = new FileRepositoryBuilder()
Git repo = builder.setGitDir(new File("C:\Users\user\Desktop\jGitClone.git"))
  .readEnvironment()
  .build()

该代码可能无法直接工作(我没有对其进行测试,我的疑问是在给出的路径上,以及要使用的对象:BuilderGit),但它基于这个我认为会对您有所帮助的答案:JGit 和寻找头部

顺便说一句,您的问题不是很清楚:您是否已经克隆了所有内容,还是您想要做的?在您的代码中,您提到了一个repository:您是否使用类似于我建议的代码获得它?您选择的名称也不是很清楚:调用 repo jGit,除非它包含 jGit 源代码,否则听起来有点笨拙。另外,为您的不同存储库(A,B,C)命名,以便更清晰地理解。

于 2012-09-17T11:36:41.527 回答
0

您需要定义远程,它跟踪您可以从中获取提交的存储库,使用 valina git,您可以执行以下操作:

# suppose you have cloned C:\jGitClone\jGit\.git
$ cd C:\Users\user\Desktop\jGitClone\.git
$ git remote add upstream "C:\jGitClone\jGit\.git"
$ git fetch upstream

如果您想尝试git24j,您可以在 java 中执行此操作,就像使用 valina git 一样:

Repository remote = Repository.open("C:\jGitClone\jGit\.git");
Repository local = Repository.open("C:\Users\user\Desktop\jGitClone\.git");
// set up remote
Remote upstream = Remote.create(local, "upstream", URI.create(remote.getPath()));
// fetch from remote
upstream.fetch(null, null, "reflog");

这两个nulls参数定义了要获取的 refspecs 和选项(您可以在其中设置凭据等)。

于 2020-09-15T04:09:55.633 回答