У меня есть задача переноса моей команды и источника из git в Perforce, и я ищу идеи о том, как переместить историю git в p4.
Я был бы счастлив, если бы перешел только мастер-ветвь. Однако это даже проблематично.
Я использую замечательный инструмент git -p4. Я создаю область назначения в моей рабочей области p4 и использую git p4 clone //depot/StuffFromGit
, чтобы начать отслеживать ее в git -p4. Я перехватываю все мои репозитории git в клон git -p4. Тогда я могу git p4 submit
и все изменения будут перенесены на p4.
Он отлично работает, когда история git выглядит так: nice и linear:
A---B---C---D
Проблема связана с несколькими людьми, работающими над проектом. Несмотря на то, что они работают над мастером, это все еще создает ветки, которые разделяют и объединяются. Тем не менее, git -p4 храбро справляется с этим:
A---B---C---E
\--D--/
git 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, чтобы понять это? Это разочаровывает, поскольку существуют слияния.
Мысли, которые у меня были:
- Используйте ветвь фильтра git, чтобы удалить все упоминания конфликтующих файлов. Я бы получил комментарии к истории, хотя и отсутствовал много изменений в файлах. Когда в истории было около 3000 записей, я бы удалил всю историю ключевых (занятых) файлов. В конце импорта отфильтрованных файлов я добавлю недостающие файлы, выполнив окончательную фиксацию HEAD.
- Дампируйте историю, сделайте один p4-фиксацию HEAD (простой, но грустный).
- Не переходите к p4: я проработал эту идею как можно дольше.
Ничего из того, что действительно здорово. Любые идеи о том, как git 'gt p4 rebase' или 'git p4 submit' работать?