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();
Файлы извлечены, но ГОЛОВА не указывает на ветку. Ниже приводится git status
выход,
$ git status
# Not currently on any branch.
nothing to commit (working directory clean)
Эта же операция может быть выполнена в командной строке git, легко и работает,
git checkout -t origin/mybranch
Как это сделать JGit?
4 ответа
Вы должны использовать setCreateBranch
создать ветку:
Ref ref = git.checkout().
setCreateBranch(true).
setName("branchName").
setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK).
setStartPoint("origin/" + branchName).
call();
Ваша первая команда была эквивалентом git checkout origin/mybranch
,
(Изменить: я отправил патч в JGit для улучшения документации CheckoutCommand: 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);