Ответ 1
Это по дизайну. Импортированные ветки Git помечены только в Mercurial, а hg heads
должно указывать правильное количество импортированных "ветвей".
Как упоминалось в этот поток:
Рассмотрим дерево, которое выглядит так:
o-o-o-o-o-o-b <- branch foo
/
-o-o-a
\
o-o-c <- branch bar
Какая ветвь "а" и ее предки на? У нас нет ни малейшего понятия. На самом деле, единственные изменения, которые мы имеем с уверенностью, - это b nd c, потому что имена ветвей не являются частью истории.
Итак:
Оказывается, на самом деле невозможно сделать это правильно, потому что Git не хранит достаточно информации.
Рассмотрим репо с двумя ветвями в git, каждый с рядом коммитов.
Поскольку Git не записывает, к какой ветки относится каждая запись, в дереве недостаточно информации для маркировки каждого набора изменений.
Пользователь Git может менять имена двух ветвей, и ничего не записывается, чтобы сказать, что все было иначе. Если у двух ветвей есть общий предок (и они почти наверняка будут) на какой ветке этот предок? Мы не знаем.Самое лучшее, что мы можем сделать в общем случае, - обозначить каждую ветвь ветки как находящуюся на этой ветке. Тогда, если вы выполните инкрементное преобразование, мы, вероятно, поступим правильно. Но концепция ветвей Git не идеально подходит для hg, поэтому это преобразование также не будет идеальным.
Вы можете протестировать его с помощью небольшого репозитория Git (Git 1.6.5.1, Hg1.3.1):
PS C:\Prog\Git\tests> cd .\hgimport
PS C:\Prog\Git\tests\hgimport> git init gitRepoToImport
PS C:\Prog\Git\tests\hgimport> cd .\gitRepoToImport
PS [...]\gitRepoToImport> echo firstContentToBr1 > br1.txt
PS [...]\gitRepoToImport> echo firstContentToBr2 > br2.txt
PS [...]\gitRepoToImport> echo firstContentToBr3 > br3.txt
PS [...]\gitRepoToImport> git add -A
PS [...]\gitRepoToImport> git commit -a -m "first content, to be evolved in three different branches"
Сделайте кучу модификаций в трех отдельных ветвях:
PS [...]\gitRepoToImport> git checkout -b br1
PS [...]\gitRepoToImport> echo firstEvolutionInBr1 >> .\br1.txt
PS [...]\gitRepoToImport> git commit -a -m "first evolution in branch 1"
PS [...]\gitRepoToImport> echo secondEvolutionInBr1 >> .\br1.txt
PS [...]\gitRepoToImport> git commit -a -m "second evolution in branch 1"
PS [...]\gitRepoToImport> git checkout master
PS [...]\gitRepoToImport> git checkout -b br2
PS [...]\gitRepoToImport> echo firstEvolutionInBr1 >> .\br2.txt
PS [...]\gitRepoToImport> git commit -a -m "first evolution in branch 2"
PS [...]\gitRepoToImport> git checkout master
PS [...]\gitRepoToImport> git checkout -b br3
PS [...]\gitRepoToImport> echo firstEvolutionInBr3 >> .\br3.txt
PS [...]\gitRepoToImport> git commit -a -m "first evolution in branch 3"
PS [...]\gitRepoToImport> echo secondEvolutionInBr3 >> .\br3.txt
PS [...]\gitRepoToImport> git commit -a -m "second evolution in branch 3"
PS [...]\gitRepoToImport> echo thirdEvolutionInBr3 >> .\br3.txt
PS [...]\gitRepoToImport> git commit -a -m "third evolution in branch 3"
PS [...]\gitRepoToImport> git checkout br2
PS [...]\gitRepoToImport> echo secondEvolutionInBr2 >> .\br2.txt
PS [...]\gitRepoToImport> git commit -a -m "second evolution in branch 2"
PS [...]\gitRepoToImport> git checkout br1
PS [...]\gitRepoToImport> echo thirdEvolutionInBr3 >> .\br1.txt
PS [...]\gitRepoToImport> git commit -a -m "third evolution in branch 1"
PS [...]\gitRepoToImport> git checkout br2
PS [...]\gitRepoToImport> echo thirdEvolutionInBr3 >> .\br2.txt
PS [...]\gitRepoToImport> git commit -a -m "third evolution in branch 2"
Затем клонировать, что Git repo (на всякий случай, для других тестов)
PS [...]\gitRepoToImport> cd ..
PS C:\Prog\Git\tests\hgimport> git clone .\gitRepoToImport gitRepoToImport1
Настройте ~/.hgrc
с форматом UTF-8
без спецификации (мне понадобилось некоторое время, чтобы все было правильно!)
[extensions]
hgext.convert =
Затем сделайте преобразование
PS C:\Prog\Git\tests\hgimport> hg convert .\gitRepoToImport1 hgRepo
PS C:\Prog\Git\tests\hgimport> cd .\hgRepo
PS C:\Prog\Git\tests\hgimport\hgRepo> hg heads
Вы получите три ожидаемых "ветки"
changeset: 9:ad0884395ada
tag: tip
user: VonC
date: Mon Nov 16 21:45:35 2009 +0100
summary: third evolution in branch 2
changeset: 6:854bc6537c7c
user: VonC
date: Mon Nov 16 21:45:19 2009 +0100
summary: third evolution in branch 1
changeset: 3:9194cf25d3ca
user: VonC
date: Mon Nov 16 21:44:09 2009 +0100
summary: third evolution in branch 3