2012-04-24 4 views
7

Чтобы реализовать функцию github как функцию fork/pull request в моем проекте, функция автоматического слияния должна каждый раз обнаруживать конфликт между исходным/целевым репозиторием при просмотре запроса на pull.Как обнаружить конфликт между двумя репозиториями git.

Одним из решений для меня является анализ вывода «git request-pull». Есть ли более простой способ обнаружения конфликта?

+0

Что здесь задают? Вы реализуете инструмент слияния? Или инструмент для просмотра diff? Или просто любопытно, что делать git push? –

+0

В github запрос на конфликтный конфликт можно объединить, просто нажав кнопку в Интернете. Поскольку исходный/целевой репозиторий может продолжать совершать, обнаружение конфликта является обязательным в этом процессе. Я прошу более простой способ обнаружить конфликт. – stcatz

ответ

-2

Наконец я написал свою собственную функцию для обнаружения конфликта.

Это довольно просто, просто возьмите все линии дифференциала и сравните, если есть такие же модификации.

+2

Было бы здорово разместить его здесь для дальнейшего использования – CharlesB

2

Я удалил свой предыдущий ответ, я не понял вопроса ...

Теперь вот новенький ответ:

git merge --ff-only <branch> 

Если нет конфликтов, он будет делать слияние , В конфликте он дает вам сообщение: Not possible to fast-forward. В этой ситуации код возврата консоли (echo $?) Равен 128.

+0

Это не имеет большого значения для вопроса, но хорошо, сливаясь после извлечения. –

0

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

Было указано в: How to test a merge without actually merging first.

Итак, чтобы ответить на ваш вопрос, если вам нужно реализовать эту функцию, вы, скорее всего, попытаетесь объединить свой источник/цель и отменить действие слияния (используя git reset --hard).

Я никогда не использовал git request-pull, но, глядя на выход, я не вижу никакой информации, которая могла бы помочь вам решить вашу проблему. Вероятно, вы можете получить тот же результат, используя git diff, git wtf, git remote show <name>.

Ссылки:

1

Мы создали детектор git-conflict, который проверяет последнюю нажатую фиксацию против всех существующих ветвей.

Это простой однострочный скрипт, инициированный URL-адресом GitHub WebHook, и даже известно, что отправлено уведомление HiChat при обнаружении конфликта.

Мы основывали наши решения на анализ git merge --ff-only <branch> выхода, как вы можете увидеть here

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

Смежные вопросы