У меня есть приложение, которое не полностью поддерживает git.Требование заключается в том, что удаленный репозиторий всегда является единственным источником правды, поэтому
- Коммиты всегда отправляются сразу
- Выборка выполняется перед любым взаимодействием для обновления состояния локального репозитория
Вот так я получаю данную ветку по запросу
private void fetchBranch(String branch) throws GitAPIException {
RefSpec ref = new RefSpec().setSourceDestination(Constants.R_HEADS + branch, Constants.R_REMOTES + Constants.DEFAULT_REMOTE_NAME + "/" + branch)
.setForceUpdate(true);
RefSpec ref2 = new RefSpec().setSourceDestination(Constants.R_HEADS + branch, Constants.R_HEADS + branch)
.setForceUpdate(true);
git.fetch()
.setRemote(Constants.DEFAULT_REMOTE_NAME)
.setRefSpecs(ref2,ref)
.setCredentialsProvider(credentials.orElse(null))
.setProgressMonitor(new FetchProgressMonitor(log, configuration))
.setForceUpdate(true)
.call();
// git.branchCreate()
// .setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.SET_UPSTREAM)
// .setName(branch)
// .setStartPoint(Constants.DEFAULT_REMOTE_NAME + "/" + branch)
// .setForce(true)
// .call();
}
Здесь я намерен явно (локально) обновить удаленный заголовок и локальный заголовок до состояния, которое находится в удаленном хранилище.
Однако, обновляется только первая ссылка в setRefSpecs
Мое намерение здесь ясно, обновите 2 ссылки (remotes / origin / branchName и заголовки / branchName) однимзначение (remotes / origin / branchName) со значением.Я проверил код JGit и вижу, что есть какая-то проверка, которая пропускает ссылки на основе ссылки на источник (поэтому первый аргумент обрабатывается, а второй нет).
Как это сделать правильно, используя fetch
команда?Неужели мне действительно нужно сделать branchChreate
с setForce(true)
, чтобы обновить название заголовка / филиала?
Было бы удобно иметь несколько пунктов назначения RefSpec
, но их не существует.