2016-11-04 2 views
1

Я использую Mageploy для управления версиями. Изменения в Admin Panel между разработчиками, но похоже, что Git не может объединить даже совершенно разные строк в файле CSV, который содержит записи о том, какие действия были выполнены выполнено.Git merge не может добавить новые строки

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

На рисунке ниже вы можете увидеть CSV филиала test1 и CSV филиала test2. Строки совершенно разные, но даже ни одна из доступных стратегий слияния не работает (ось осьюса наш рекурсивный разрешает поддерево).

Mageploy CSV in Notepad++ compare mode

Я просто нужно линия от test2 быть добавлены ко всем линиям в test1. И, в идеале, сливаться должным образом без конфликта, был ли он добавлен test2 к test1 или test1, добавленному в test2 (так как добавление строк обычно помещает их внизу).

Пример:

test1.csv

old-entry 
old-entry 
old-entry 
test1-a 
test1-b 

test2.csv

old-entry 
old-entry 
old-entry 
test2-c 

Разработчик один сливается test2 в их test1

old-entry 
old-entry 
old-entry 
test1-a 
test1-b 
test2-c 

Разработчик два сливает тест 1 в их test2

old-entry 
old-entry 
old-entry 
test2-c 
test1-a 
test1-b 
+0

Является ли ваша проблема, что данные удаляются во время слияния или что вы/не получаете конфликт слияния? –

+0

Я всегда получаю конфликт слияния, который просит меня выбрать строки, добавленные в test1, или строки, добавленные в test2, а не оба. –

+0

Если Git не может автоматически разрешить слияние, он не может автоматически разрешить слияние. На самом деле, худшей проблемой было бы автоматическое разрешение, которое также отбрасывает то, что вы хотите сохранить. Но это не кажется вашей проблемой. –

ответ

0

Я не мог найти способ сделать Git сохранить все строки в файле CSV во время слияния без конфликта. Согласно комментариям @ tim-biegelesein и @torek, нет способа заставить Git взять линии из обеих ветвей.

Я буду использовать что-то подобное, чтобы обойти это в моем сценарии автоматизации разработки. Он просто удаляет метки слияния и фиксирует слияние.

git merge $targetBranch 
sed -i -e "/<<<<<<<\|=======\|>>>>>>>/d" /path/to/mageploy_all.csv 
git commit --all --file .git/MERGE_MSG 

Аргумент --no-edit не работает, чтобы использовать сообщение по умолчанию слияния без открытия редактора. Вместо этого указывается файл сообщения слияния.


Это, однако, по-прежнему предрасположен к проблеме, показанной в примере на мой вопрос выше - порядка этих слияний.

Я подозреваю, что Git сделает другой конфликт, когда видит CSV другой порядок строк, поскольку test1 был объединен с test2, в то время как test2 был объединен с test1, видя, что линии поменялись местами.
Не имеет смысла вступать в конфликт с этим или, по крайней мере, для того, чтобы не иметь какой-либо стратегии слияния для этого, но кажется единственным вариантом теперь написать больше кода для работы над этими случаями.

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