Не удается выйти из состояния REBASING_MERGE с помощью JGit

Я использую JGit (v4.10.0.201712302008-r) для автоматизации задач, которые взаимодействуют с нашим репозиторием git.

Некоторые задачи по какой-то причине оставляют репо в состоянии REBASING_MERGE. Теперь, когда я в следующий раз обрабатываю задачу, мне нужно попробовать «починить» репозиторий. Я уже удалил потенциально конфликтующие / измененные / добавленные, но репо все еще находится в состоянии REBASING_MERGE.

Я пробовал то, что упоминается там (отмена слияния), но безрезультатно - статус репозитория все тот же, и я не могу тянуть:

org.eclipse.jgit.api.errors.WrongRepositoryStateException: Cannot pull into a repository with state: REBASING_MERGE

Есть идеи, как это исправить с помощью JGit?


person Vincent F    schedule 06.03.2018    source источник


Ответы (2)


Некоторые команды перед продолжением проверяют состояние репозитория, возвращенное из Repository::getRepositoryState.

Состояние REBASING_MRGE возвращается, если в каталоге .git есть файл или каталог rebase-merge. Если вы уверены, что вернуться в нормальное состояние безопасно, вы можете просто удалить каталог fire /.

person Rüdiger Herrmann    schedule 06.03.2018
comment
да, я думал об этом, но я хотел избежать этого, чтобы мне не пришлось снова проверять все репо. - person Vincent F; 07.03.2018
comment
Я не понимаю вашего комментария. Зачем вам снова оформлять заказ? Для работы PullCommand вам уже понадобится репозиторий. - person Rüdiger Herrmann; 07.03.2018
comment
извините, я не понял - я попытался очистить локальный репозиторий, выполнив git.status (). call () и сбросив конфликтующие / добавленные файлы и вернув измененные. Возможно, мне что-то не хватало, но общий статус все еще был REBASING_MERGE. Поэтому я подумал, что в худшем случае я смогу удалить локальный репозиторий и проверить новую копию. - person Vincent F; 08.03.2018
comment
Спасибо за разъяснение. - person Rüdiger Herrmann; 08.03.2018

На самом деле я нашел здесь ответ: https://github.com/centic9/jgit-cookbook/blob/master/src/main/java/org/dstadler/jgit/porcelain/RebaseToOriginMaster.java#L78 (I адаптировал код):

 if(!result.getStatus().isSuccessful()) {
 // if rebasing stopped or failed, you can get back to the original state by running it with setOperation(RebaseCommand.Operation.ABORT)
    result = git.rebase().setUpstream("origin/master").setOperation(RebaseCommand.Operation.ABORT).call();
    System.out.println("Aborted rebase with state: " + result.getStatus() + ": " + result.getConflicts());
 }

Мне все еще нужно понять, почему перебазировать не удалось, потому что изначально конфликтов не было.

person Vincent F    schedule 07.03.2018
comment
Чтобы понять, почему перебазирование не удалось, вы можете проверить RebaseResult, возвращаемый RebaseCommand::call. - person Rüdiger Herrmann; 08.03.2018