2013-10-11 6 views
1

У меня есть родительское хранилище A.Синхронизация переходит из детского ртутного репозитория, созданный с преобразовать обратно рт.ст. к родительскому ртутному хранилищу

Я создал небольшое хранилище ребенка B родительского хранилища, содержащий вишневый взяли маленькие список подпапок для доступа другой команды с помощью HG-преобразования

hg convert A B --filemap filemap.txt 

где filemap.txt не делает никакого переименования. Он включает или исключает папки. Такие как:

exclude * 
include folder1 
include folder2/subfolder1 
include folder2/subfolder2 
include folder2/subfolder3 
exclude folder3_that_was_pulled_in_for_some_reason 

Преобразование из A в B отлично работает. Я также могу повторно запустить команду hg convert, чтобы «нажимать» последующие изменения на A-B (я использую здесь термин «толкнуть здесь свободно» ...)

Но как насчет того, когда я хочу «нажать» изменения с B назад к A? Запуск hg convert B A без filemap воссоздает все коммиты в B назад в A, поэтому у меня есть множество дублированных коммитов в A.

Есть ли разумный способ синхронизации A и B в будущем? Возможно, это будет невозможно, если изменения применяются к A и B в разных заказах?

ответ

2

Нет никакого хорошего способа сделать это, поэтому convert не должен быть частью двунаправленного рабочего процесса. Можно использовать convert поэтапно, так что вы можете много раз переходить от A до B, но вы не можете перейти на B до A. Вы можете попробовать hg export патчи с B и hg import их в A, и это, вероятно, будет работать, но когда вы затем hg convert A в B снова удвоятся, и слияние, вероятно, будет трудным.

Рассмотрите разделение репо на два отдельных соглашения с общественным материалом как субрепозитором всего репо.

/projectname 
    stuff.txt 
    /folder1 
    /folder3_that_was_pulled_in_for_some_reason 
    /projectname-public 
     /folder2/subfolder1 
     /folder2/subfolder2 

Когда projectname-public является суб-репозиторий, то он может быть клонирована отдельно, выпущенный отдельно, и вы можете принять тянуть запросы и исправлен и объединить их в легко.

Subrepos не для новичков, но они легче, чем круговое отключение на convert.

+0

Спасибо за прямой ответ. Думаю, мои выборы - либо реорганизовать мое репо, либо отказаться от простой синхронизации. Вероятно, последнее будет связано с тем, что синхронизация B с A до не столь важна, как нажатие новых изменений с A на B. – persiflage

+0

@persiflage, вы можете пожалеть об этом решении, если команда, работающая в B, начнет посылать вам много изменений, которые не могут быть тривиально интегрированным: в вашей настройке нет управления общей версией - есть одно репо для вас и другое для другой команды, и вы поручаете себе синхронизировать их внешними средствами. – alexis

+0

@alexis. Спасибо, я понимаю, что ты говоришь. Если интегрирование изменений B в A было приоритетом бизнеса, я бы пошел на подрепозитивный подход. В этом случае бизнес-приоритет передает изменения от A до B. В конце проекта B изменения B _might_ будут интегрированы обратно в A, но, скорее всего, проект B будет потерян или движется в независимом направлении. – persiflage