У меня есть задача переместить мою команду & источник от git to Perforce, и я ищу идеи о том, как переместить историю git в p4.Миграция с git на Perforce
Я был бы счастлив, если бы переехал только ветвь. Однако это даже проблематично.
Я использую замечательный инструмент git-p4. Я создаю область назначения в моей рабочей области p4 и использую git p4 clone //depot/StuffFromGit
, чтобы начать отслеживать ее в git-p4. Я перенесил все изменения моего git-репозитория в клон git-p4. Тогда я могу сделать git p4 submit
и все изменения будут перенесены на p4.
Это прекрасно работает, когда история мерзавец выглядит так, красиво и линейна:
A---B---C---D
Проблема возникает с несколькими людьми, работающими над проектом. Несмотря на то, что они работают над мастером, это все еще создает ветви, которые разделяют и объединяются. Тем не менее, ГИТ-p4 смело решает эту проблему:
A---B---C---E
\--D--/
мерзавец p4 траверсы OK, совершая ABCDE в порядке (или история ABDCE, будь то человека первым).
Проблема возникает, когда, например, C и D меняют один и тот же файл, а E - это слияние реального честного и доброго. git p4 rebase
здесь не работает; он будет перематывать коммиты, но во время воспроизведения он сначала применит C, затем попытается выполнить D и найти конфликт. Затем он остановится и попросит меня слиться. Ну, E содержит слияние, но он просит меня слить! 'git p4 submit' провалится аналогичным образом, только теперь p4 отклоняет предварительное слияние.
Using index info to reconstruct a base tree... Falling back to patching base and 3-way merge... Auto-merging main.cpp CONFLICT (content): Merge conflict in main.cpp Failed to merge in the changes. Patch failed at 0005 Changing main
Так что теперь я застрял. Есть ли способ дезинформировать историю Git или получить git-p4, чтобы понять это? Это расстраивает, так как слияния есть.
Мысли у меня были:
- Используйте мерзавец фильтр-ветви, чтобы удалить все упоминания о конфликтующих файлов. Я бы получил комментарии к истории, хотя и отсутствовал много изменений в файлах. Когда в истории было около 3000 записей, я бы удалил всю историю ключевых (занятых) файлов. В конце импорта отфильтрованных файлов я добавлю недостающие файлы, выполнив окончательную фиксацию HEAD.
- Дампируйте историю, сделайте одиночный p4-фиксацию HEAD (простой, но грустный).
- Не двигайтесь к p4: Я проработал эту идею как можно дольше.
Ничего из того, что действительно здорово. Любые идеи о том, как git 'gt p4 rebase' или 'git p4 submit' работать?
Учитывая историю git, это своего рода смешное направление для миграции. –
Похоже, что git-p4 пытается объединить C, D ** и ** E и, конечно же, неудачно. Вы проверили, что вы используете последнюю версию git-p4, и если есть некоторые исправления или другие люди видели ту же проблему? –
Ничего себе, мужик, извините. Похоже, вы двигаетесь, как 10-15 лет назад. – Jonathan