2016-08-05 7 views
1

Я разрабатываю приложение, в котором используется JGit.Как получить противоречивые строки с JGit

После натяжения у меня конфликтующие файлы. Я могу получить его от

List<String> list = git.status().call().getConflicting(); 

Список содержит конфликтующие файлы.

Я знаю, что я могу получить конфликтующие файлы из

Map<String, int[][]> conflicts = git.pull().call().getMergeResult().getConflicts(); 

, но он не работает, если я перезагрузить приложение. После перезагрузки у меня будет пустая карта, потому что я не могу повторить попытку, когда репозиторий находится в состоянии объединения.

Как получить конфликтующие строки по имени файла через API JGit?

ответ

1

Вы можете попробовать использовать ResolveMerger повторно запустить слияние как так:

ThreeWayMerger merger = StrategyResolve.newMerger(repository, true); 
merger.merge(headCommit, fetchedCommit); 

Обратите внимание, что MergeCommand, который вызывается во время тяги может использовать другую стратегию слияния. Подробнее см. В строке 337 MergeCommand. Однако не забудьте создать слияние в ядре (второй аргумент должен быть true).

С merger.getMergeResults() вы должны быть способны получить конфликтующие линии.

Весь подход, однако, может произойти сбой, потому что ваш рабочий каталог уже загрязнен с маркерами конфликта (< < < < < < < <). В зависимости от вашей общей цели я предлагаю пересмотреть свой подход к вытаскиванию.

Если вы извлекаете изменения из восходящего репозитория (без немедленного слияния), вы можете сушить слияние, как описано выше, настолько часто, насколько это необходимо. FetchResult, возвращаемый FetchCommand::call(), содержит информацию о принятых (-их) фиксациях.

+0

Спасибо за ваш ответ. Я проверю его, чтобы он написал и написал сообщение. –

+0

Это работа. Теперь я пытаюсь понять API для MergeResult . большое спасибо –