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を行う方法は?
ブランチを作成するには、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 )
なんらかの理由で、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();
CheckoutCommand
のコードに示されているように、ローカルブランチを作成するには、ブール値createBranch
をtrue
に設定する必要があります。
CheckoutCommandTest
--testCreateBranchOnCheckout()
に例があります。
@Test
public void testCreateBranchOnCheckout() throws Exception {
git.checkout().setCreateBranch(true).setName("test2").call();
assertNotNull(db.getRef("test2"));
}
あなたもこれを好きになることができます
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);