2

Gitフェッチの概念を理解しています。JGitAPIの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

デスクトップ上にあるクローンリポジトリをどのように設定すれば、フェッチが呼び出されたときにこのリポジトリにフェッチすることがわかります。

私は以下の1つを含むいくつかのウェブサイトを見ましたが、それでも立ち往生しています。

jgitを使用したGitフェッチの失敗:リモートでフェッチに使用できる<branchname>がありません

4

2 に答える 2

1

私はあなたが何かを逃したと思います。Git / jGitでは、ローカルコピーはpath(ファイルシステムのように)とremote、離れたリポジトリであるによって決定されます。

あなたの場合、デスクトップのクローンリポジトリにリポジトリへのリンクが必要ですjGitClone/jGit。したがって、最初に、クローン作成がすでに行われている場合、デスクトップリポジトリはそのリモートリポジトリを認識します。したがって、コードでは、デスクトップリポジトリがどこにあるかを伝える必要があります。

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

コードは直接機能していない可能性があります(私はそれをテストしませんでした、私が与える道にある疑問、および使用するオブジェクト:BuilderGit)、しかしそれは私があなたを助けると思うこの答えに基づいています:JGitと頭を見つける

ちなみに、あなたの質問はそれほど明確ではありません:あなたはすでにすべてを複製しましたか、それともあなたがやりたいことですか?あなたのコードであなたは言及しますrepository:あなたは私が提案したものと同様のコードを使用してそれを入手しましたか?選択した名前もあまり明確ではありません。レポjGitを呼び出すと、jGitソースコードが含まれていない限り、少し不器用に聞こえます。さらに、理解を深めるために、さまざまなリポジトリ(A、B、C)に名前を付けます。

于 2012-09-17T11:36:41.527 に答える
0

コミットをフェッチできるリポジトリを追跡するリモートを定義する必要があります。valinagitを使用すると、次のことができます。

# 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を試してみたい場合は、valina gitの場合と同じように、Javaでこれを行うことができます。

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");

2つnullsは、フェッチするrefspecとオプション(資格情報などを設定できる場所)を定義するパラメーターです。

于 2020-09-15T04:09:55.633 に答える