Git merge - ручное слияние - форсирование конфликта, имеющего ВСЕ старые и новые версии файлов - PullRequest
0 голосов
/ 23 января 2012

Как заставить git merge генерировать конфликт для всего файла или всех файлов, которые отличаются, чтобы генерировать конфликт, имеющий полностью старую и совершенно новую версию, пример такого файла:

<<<<<<<<<<A
A
B
C
D
OLD
OLD
OLD
E
F
G
...
Z
============
A
B
C
D
NEW
NEW
NEW
EEEEEEE
FFFFF
GGG
...
Z

>>>>>>>>>>B

Идея состоит в том, что я хотел бы объединить вручную все содержимое двух файлов, без метра, если строки совпадают или одна ветвь наследует от всего предыдущего, пример:

$ echo ABC > file
$ git add file
$ git commit -m '+) file = ABC'
[master 6e91bce] +) file += ABC
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file
$ git checkout -b new_branch
Switched to a new branch 'new_branch'
$ echo DEF >> file 
$ git add file
$ git commit -m '+) file += DEF'
[new_branch 27e29bf] +) file += DEF
 1 files changed, 1 insertions(+), 0 deletions(-)
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff new_branch
Automatic merge went well
$ cat file
ABC                                         
DEF

Я понимаю причину, по которой git автоматически добавляет "DEF" в "файл". Но я хотел бы заставить git «думать»:

  • master / file и new_branch / file отличаются
  • Я создам конфликт со всей старой и всей новой версией, чтобы позволить пользователям разрешить ее вручную

Я читал другие посты о создании "драйвера слияния", но мне далеко не ясно, как сделать git с его помощью. (Сценарий очевиден, всего несколько строк).

P.S. Для заинтересованных людей: я не использую инструмент слияния. Я хотел бы объединить таблицы TSV с наборами данных и результирующими наборами. Во всех случаях, когда они различаются (даже если редактирование выполняется только в одной ветви), я бы хотел обработать их вручную с помощью собственной цепочки инструментов для обработки этих наборов данных.

1 Ответ

2 голосов
/ 23 января 2012

Вам все еще нужно сказать Git, что они должны рассматриваться как двоичные файлы, что приведет к конфликту, если есть какая-либо разницаТеперь вам нужно самим исследовать файлы, например, git show otherbranch:thefile и git show HEAD:thefile.После редактирования файла вы добавляете его и git commit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...