2017-02-20 18 views
0

В настоящее время я работаю над проектом, который должен изменить исходный код git. Я хочу изменить исходный код, потому что, когда вы устанавливаете драйвер слияния, git всегда запускает алгоритм diff сначала, но алгоритм git diff не обнаруживает некоторые конфликты, которые обнаруживает мой инструмент слияния.Как отладить исходный код git?

Итак, мне нужно изменить исходный код, чтобы git всегда использовал мой инструмент слияния. Для этого мне нужно лучше понять рабочий процесс слияния git, но чтение миллионов строк исходного кода git не является вариантом. Мне нужно скомпилировать и отладить исходный код git, но я понятия не имею, какой из них лучше и как это сделать.

Пожалуйста, помогите :)

+1

Чрезвычайно маловероятно, что вам нужно изменить сам Git, чтобы добиться этого, особенно потому, что Git был разработан с учетом этого конкретного случая использования. Пожалуйста, объясните, как ['git mergetool'] (https://git-scm.com/docs/git-mergetool) не удовлетворяет вашим потребностям. – Pockets

+0

Инструмент слияния, который мы разработали, основан на концепции полуструктурированного слияния (то есть обнаруживает конфликты через дерево синтаксиса, а не через разницу в тексте, как инструменты неструктурированного слияния). Инструмент слияния вызывается, когда git обнаруживает конфликты через свой алгоритм diff (который основан на неструктурированном слиянии), и этот алгоритм не обнаруживает конфликтов, которые обнаруживает наш инструмент слияния. Поэтому нам нужно всегда использовать наш инструмент слияния –

+0

О, я вижу - это определенно более необычный случай использования. Помогает ли установка 'git difftool'? (Я предполагаю, что ваш инструмент слияния можно адаптировать для сообщения об этом). Запрет на то, что вам, возможно, придется обратиться к списку рассылки ([email protected]), чтобы получить представление о том, как это сделать. – Pockets

ответ

0

Таким образом, через некоторое время, я понял, как решить мою проблему без возни с исходным кодом мерзавца. Что я наделал?

  • Моя основная проблема заключалась в том, что алгоритм git diff не находит конфликтов, которые может найти созданный нами инструмент полуструктурированного слияния. Итак, чтобы решить, что я создал собственный поддельный драйвер diff, так что мой инструмент слияния всегда вызывается для анализа текущего слияния.

Чтобы сделать это, я редактировал файл .gitconfig и добавил этот фальшивый драйвер дифф:

[diff "fake"] command = false

Это решает мою проблему, потому что теперь водитель слияния всегда называется :)