Наше приложение должно использовать различные стратегии слияния при извлечении / слиянии с JGit. Например, для любых конфликтующих файлов, которые являются файлами JSON, мы хотим отменить любые локальные изменения и получить их. Если они не являются файлами JSON, мы хотим сохранить локальные изменения и объединить их, даже сохраняя маркеры конфликтов при наличии конфликтов. Однако, независимо от того, как я установил стратегию слияния, я получаю исключение CheckoutConflictException (которое останавливает слияние), даже если бы слияние выполнял обычный git из командной строки. Что я делаю не так?
public String update() throws Exception {
// We fetch manually and do a dry-run merge to catch any conflicts, so we can reset them
fetch();
Ref fetchHead = this.repo().getRepository().findRef("FETCH_HEAD");
try {
MergeResult mergeResult = this.repo().merge()
.setStrategy(MergeStrategy.RECURSIVE)
.setCommit(false)
.setFastForward(MergeCommand.FastForwardMode.FF)
.include(fetchHead)
.call();
} catch (CheckoutConflictException cce) {
List<String> conflicts = cce.getConflictingPaths();
if (conflicts != null && conflicts.size() > 0) {
for (String file : conflicts) {
if (file.endsWith(".json")) {
revert(Paths.get(file));
}
}
}
}
/// ... and now that we've reverted any conflicted JSON files, we can try the merge for real
MergeResult mergeResult = this.repo().merge()
.setStrategy(MergeStrategy.RECURSIVE)
.setCommit(true)
.setFastForward(MergeCommand.FastForwardMode.FF)
.include(fetchHead)
.call();
return mergeResult.getMergeStatus().toString();
}