Если у вас все в порядке с изменением истории (т.е. недействительными клонами всех остальных этого проекта), вы можете использовать расширение 'convert'.
Создать текстовый файл, мы назовем его rename-map-a.txt
thisстрока в нем:
rename . Source/Project_A
Затем перейдите в Source
и выполните команду:
hg convert --filemap rename-map-a.txt Project_A new-Project_A
Повторите тот же процесс для B, так что теперь у вас есть:
SolutionFolder
|---.hg
+---Lib
| ∟ dlls
+---Source
| ∟ Project_A
| ∟--.hg
| ∟ Project_B
| ∟--.hg
| ∟ new-Project_A
| ∟--.hg
| ∟ new-Project_B
| ∟--.hg
+---OverarchingSolution.sln
Затем перейдите в SolutionFolder
и выполните следующие команды:
hg init # creates a new, empty repo
hg pull Source/new-Project_A # pulls in changesets from A
hg pull --force Source/new-Project_B # pulls in changesets from A
Если это сработало, вы можете удалить (или лучше переместить куда-нибудь для резервного копирования следующие каталоги:
SolutionFolder/Source/Project_A/.hg
SolutionFolder/Source/Project_B/.hg
SolutionFolder/Source/new-Project_A
SolutionFilder/Source/new-Project_B
, оставив вас сименно то, что у вас есть в качестве цели в вашем вопросе, с учетом всей истории и всего прослеженного. Тем не менее, посмотрите мой другой ответ, потому что я думаю, что это лучшая идея.