2016-04-02 11 views
2

Я пытаюсь выполнить с JGit все сценарии слияния из проекта, который имел конфликты.Как получить конфликты перед слиянием с JGit?

Возможно ли получить конфликты до фактического слияния? Другими словами, можно ли моделировать слияние с JGit?

My Цель - получить доступ к конфликтующим строкам каждого файла для всех сценариев слияния проекта.

+0

Я вижу, что вы новичок в SO. Если вы чувствуете, что ответ решил проблему, отметьте ее как «принятую», нажав зеленую галочку. Это помогает сосредоточиться на старых постах, у которых до сих пор нет ответов. –

+0

Я понимаю, что @ RüdigerHerrmann, но спасибо за совет. Я еще не видел вашего ответа. Я пробовал нечто подобное, что я нашел в другом вопросе SO, в котором упоминались классы тестирования JGit. Кажется, что, пройдя по этому пути, я могу получить то, что хочу. Я отредактировал свой вопрос, поэтому представляю ближайший из моих целей. –

+0

Пожалуйста, сначала ** ** искать решения до [задавать вопросы] (http://stackoverflow.com/help/how-to-ask), ответ на который вам не нужен, чтобы не тратить время на других. На самом деле ваше редактирование - это другой вопрос. Создайте новую запись, если у вас есть другое задание. –

ответ

2

Вы можете использовать один из ThreeWayMerger s, чтобы определить, могут ли быть объединены два коммита.

По умолчанию MergeCommand использует рекурсивный метод слияния. Поэтому вы, вероятно, захотите использовать это слияние.

Убедитесь создать в ядре слияния (установить второй параметр newMerger к true). В этом режиме слияние не касается рабочего каталога.

ThreeWayMerger merger = MergeStrategy.RECURSIVE.newMerger(repository, true); 
boolean canMerge = merger.merge(headCommit, commitToMerge); 

Метод объединения возвращает true если данные фиксаций могут быть объединены и false иначе.

Базовая фиксация может быть явно задана с помощью setBase или используется общий предок.

ResolveMerger и RecursiveMerger также предоставляют методы для запроса того, какие файлы (файлы) не могут быть объединены.

+0

Привет @ Rüdiger Herrmann, как я могу найти «headCommit»? –

+0

Идентификатор фиксации ref может быть разрешен с помощью метода 'resolve'' Repository', например 'repository.resolve (" HEAD ")'. –