web-dev-qa-db-ja.com

JGit:リモートブランチをチェックアウトする

JGitを使用してリモートトラッキングブランチをチェックアウトしています。

Git binrepository = cloneCmd.call()

CheckoutCommand checkoutCmd = binrepository.checkout();
checkoutCmd.setName( "Origin/" + branchName);
checkoutCmd.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK );
checkoutCmd.setStartPoint( "Origin/" + branchName );

Ref ref = checkoutCmd.call();

ファイルはチェックアウトされていますが、HEADはブランチを指していません。以下はgit status出力、

$ git status
# Not currently on any branch.
nothing to commit (working directory clean)

同じ操作をgitコマンドラインで簡単に実行でき、機能します。

git checkout -t Origin/mybranch

このJGitを行う方法は?

22
Nambi

ブランチを作成するには、setCreateBranchを使用する必要があります。

Ref ref = git.checkout().
        setCreateBranch(true).
        setName("branchName").
        setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK).
        setStartPoint("Origin/" + branchName).
        call();

最初のコマンドはgit checkout Origin/mybranchと同等でした。

(編集:CheckoutCommandのドキュメントを改善するためにJGitにパッチを送信しました: https://git.Eclipse.org/r/8259

36
robinst

なんらかの理由で、robinstが投稿したコードは私には機能しませんでした。特に、作成されたローカルブランチはリモートブランチを追跡しませんでした。これは私が私のために働いたものです(jgit 2.0.0.201206130900-rを使用):

git.pull().setCredentialsProvider(user).call();
git.branchCreate().setForce(true).setName(branch).setStartPoint("Origin/" + branch).call();
git.checkout().setName(branch).call();
5
Jason Wheeler

CheckoutCommand のコードに示されているように、ローカルブランチを作成するには、ブール値createBranchtrueに設定する必要があります。

CheckoutCommandTest --testCreateBranchOnCheckout() に例があります。

@Test
public void testCreateBranchOnCheckout() throws Exception {
  git.checkout().setCreateBranch(true).setName("test2").call();
  assertNotNull(db.getRef("test2"));
}
4
VonC

あなたもこれを好きになることができます

git.checkout().setName(remoteBranch).setForce(true).call();
                logger.info("Checkout to remote branch:" + remoteBranch);
                git.branchCreate() 
                   .setName(branchName)
                   .setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM)
                   .setStartPoint(remoteBranch)
                   .setForce(true)
                   .call(); 
                logger.info("create new locale branch:" + branchName + "set_upstream with:" + remoteBranch);
                git.checkout().setName(branchName).setForce(true).call();
                logger.info("Checkout to locale branch:" + branchName);
1
徐诗云