Dies ist von Entwurf. Importierte Git-Zweige werden nur in Mercurial gekennzeichnet, und hg heads
sollte Ihnen die korrekte Anzahl importierter "Zweige" geben.
Wie in this thread erwähnt:
einen Baum Betrachten Sie die wie folgt aussieht: auf
o-o-o-o-o-o-b <- branch foo
/
-o-o-a
\
o-o-c <- branch bar
Welche Niederlassung sind "a" und seine Vorfahren?
Wir haben nicht die geringste Ahnung. Tatsächlich sind die einzigen Änderungssätze, über die wir Gewissheit haben, b und c, weil Zweignamen nicht Teil der Geschichte sind.
So:
Stellt sich heraus, es ist eigentlich unmöglich, dieses Recht zu tun, weil git nicht genügend Informationen speichert.
Betrachten Sie ein Repo mit zwei Zweigen in Git, jedes mit einer Anzahl von Commits.
Da git nicht aufzeichnet, aus welchem Zweig die einzelnen Commits stammen, sind nicht genügend Informationen in der Baumstruktur vorhanden, um die einzelnen Changesets zu kennzeichnen.
Ein Git Benutzer kann die Namen der beiden Zweige tauschen und nichts wird aufgezeichnet, um zu sagen, dass es jemals anders war. Wenn zwei Zweige einen gemeinsamen Vorfahren haben (und das werden sie mit ziemlicher Sicherheit tun), In welchem Zweig ist dieser Vorgänger? Wir wissen es nicht.
Das beste, was wir im allgemeinen Fall tun können, ist, jeden Zweigkopf als auf diesem Zweig zu bezeichnen. Wenn Sie eine inkrementelle Konvertierung durchführen, werden wir wahrscheinlich das Richtige tun. Aber gits Konzept von Zweigen passt nicht perfekt zu hg, also wird diese Umwandlung auch nicht perfekt sein.
Sie können es testen mit einem kleinen Git Repo (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"
Stellen eine Reihe von Änderungen in drei getrennten Zweigen:
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"
Dann Klon, der Git repo (nur für den Fall, zu männlich anderen Tests)
PS [...]\gitRepoToImport> cd ..
PS C:\Prog\Git\tests\hgimport> git clone .\gitRepoToImport gitRepoToImport1
Configure Ihre ~/.hgrc
mit einer Format UTF-8
ohne BOM(dauerte eine Weile, um es richtig zu machen!)
[extensions]
hgext.convert =
Dann
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
Sie lernen die drei erwarteten "Zweige"
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
* Nizza * Beantworten Sie die Konvertierung machen. – quark
Der Begriff "Verzweigung" ist in DVCS-Begriffen zu stark überladen. Es wäre großartig, wenn wir eine vereinbarte Sprache hätten, um leicht zwischen den verschiedenen Bedeutungen unterscheiden zu können (z. B. Graph-Gabeln, beschriftete Köpfe, markierte Revisionen). – quark