2013-05-09 5 views
0

Мы работаем с несколькими рабочими процессами в течение нескольких месяцев, когда разработчики SVN создают ветви связывания SVN, которые объединены в ветку интеграции с использованием git и переданы обратно в SVN, объединить за раз, с dcommit. В этом потоке работы было выполнено единственное git-svn repo, выполняющее всю работу слияния.git-svn: сохранение объединяется в двух разных репозиториях git-svn

Этот рабочий процесс работал довольно хорошо, и слияние git обычно добросовестно сохраняется в исходном репозитории git-svn.

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

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

Есть ли у кого-нибудь какие-либо действия, которые помогают избежать обстоятельств, из-за которых история слияния может быть повреждена в одном или нескольких репозиториях git-svn, которые синхронизируются с общим SVN-репо?

+0

Я использую git-svn в течение довольно долгого времени и не встречал эту проблему. Возможно, я следую простому рабочему процессу. Разве «ветви» вы упомянули всю ветвь git? Вы можете более подробно описать свой рабочий процесс. –

+0

Ветви являются ветвями SVN. Слияние git всегда находится между двумя git-коммитами, соответствующими советам двух ветвей SVN, и всегда после этого происходит немедленное dcommit'd в SVN после успешного слияния. Как я уже сказал, это работает очень хорошо, когда я был тем, кто объединяет интеграцию. Однако теперь коллега начал брать на себя часть объёмной нагрузки, и я иногда теряю второго родителя слияний, которые он делает, и наоборот - он иногда теряет 2-го родителя от слияний, которые я делаю. – jonseymour

+0

BTW: У нас есть 341 SVN теги и 560 ветвей SVN. В результате значения свойства svn: mergeinfo на вершине интеграционной ветви довольно сложны и велики. – jonseymour

ответ

0

Я не совсем уверен, что причины этой проблемы, но я обнаружил, что приемлемое решение является воссоздание слияния в мерзавце с использованием трансплантатов в соответствии с методикой, описанные здесь:

Fixing SVN Merge History in Git Repositories

хотя Я еще не потрудился с ветвью фильтра, так как я не совсем уверен, что он отлично играет с картами svn rev, которые git-svn использует для отслеживания сопоставления между SVN и git commits.

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