Ceci est voulu. Les branches Git importées sont seulement étiquetées dans Mercurial, et hg heads
devrait vous donner le nombre correct de «branches» importées.
Comme mentionné dans this thread:
Tenir compte d'un arbre qui ressemble à ceci:
o-o-o-o-o-o-b <- branch foo
/
-o-o-a
\
o-o-c <- branch bar
Quelle branche sont "a" et ses ancêtres sur?
Nous n'avons pas la moindre idée. En fait, les seuls changements dont nous avons la certitude sont b nd c parce que les noms de branches ne font pas partie de l'histoire.
Alors:
avère que c'est en fait impossible de faire de ce droit, parce que git ne stocke pas assez d'informations.
Considérons un dépôt avec deux branches dans git, chacune avec un nombre de commits.
Étant donné que git n'enregistre pas la branche sur laquelle chaque commit a pris naissance, il n'y a pas suffisamment d'informations dans l'arbre pour marquer chaque changeset.
Un utilisateur git peut échanger les noms des deux branches et rien n'est enregistré pour dire qu'il était toujours différent. Si deux branches ont un ancêtre commun (et elles le feront presque certainement), quelle branche est cet ancêtre? Nous ne savons pas. Le meilleur que nous pouvons faire dans le cas général est d'étiqueter chaque tête de branche comme étant sur cette branche. Ensuite, si vous faites une conversion incrémentielle, nous ferons probablement la bonne chose. Mais le concept de branches de git ne correspond pas parfaitement à celui de hg, donc cette conversion ne sera pas parfaite non plus.
Vous pouvez le tester avec un petit repo 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"
Faire un tas de modifications dans trois branches distinctes:
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"
clone alors que repo Git (juste au cas où, à des tests masculins autres)
PS [...]\gitRepoToImport> cd ..
PS C:\Prog\Git\tests\hgimport> git clone .\gitRepoToImport gitRepoToImport1
Configurer votre ~/.hgrc
avec un format UTF-8
sans nomenclature(m'a pris un certain temps pour le faire correctement!)
[extensions]
hgext.convert =
ensuite effectuer la conversion
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
Vous obtiendrez les trois attendus "branches"
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
* Nice réponse *. – quark
Le terme «branche» est trop surchargé en termes DVCS. Ce serait formidable si nous avions un langage convenu pour distinguer facilement les différentes significations (par exemple, les fourches de graphes, les têtes étiquetées, les révisions étiquetées). – quark