Bazaar is een DVCS tool die veel op Git lijkt, en als gevolg is het redelijk probleemloos om een Bazaar repository in een van Git te converteren.
Om dit voor elkaar te krijgen, moet je de bzr-fastimport
-plugin importeren.
De procedure om de fastimport plugin te installeren verschilt op een UNIX-achtige besturingssysteem en op Windows.
In het eerste geval, is het het eenvoudigste om het bzr-fastimport
-pakket te installeren, en dat zal alle benodigde afhankelijkheden installeren.
Bijvoorbeeld, met Debian en afgeleiden, zou je het volgende doen:
$ sudo apt-get install bzr-fastimport
Met RHEL, zou je het volgende doen:
$ sudo yum install bzr-fastimport
Met Fedora, vanaf release 22, is dnf de nieuwe package manager:
$ sudo dnf install bzr-fastimport
Als het pakket niet beschikbaar is, kan je het als een plugin installeren:
$ mkdir --parents ~/.bazaar/plugins # maakt de benodigde folders voor de plugins
$ cd ~/.bazaar/plugins
$ bzr branch lp:bzr-fastimport fastimport # iumporteert de fastimport plugin
$ cd fastimport
$ sudo python setup.py install --record=files.txt # installeert de plugin
Om deze plugin te laten werken, heb je ook de fastimport
Python module nodig.
Je kunt controleren of deze aanwezig is of niet en het installeren met de volgende commando’s:
$ python -c "import fastimport"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named fastimport
$ pip install fastimport
Als het niet beschikbaar is, kan je hte downloaden van het adres https://pypi.python.org/pypi/fastimport/.
In het tweede geval (op Windows), wordt bzr-fastimport
automatisch geinstalleerd met de standalone versie en de standaard installatie (laat alle checkboxen aangevinkt).
Dus in dit geval hoef je niets te doen.
Vanaf dat moment, is de manier waarop je een Bazaar repository afhankelijk van of je een enkele branch hebt, of dat je op een repository werkt die meerdere branches heeft.
Ga met cd
in de directory die jouw Bazaar repository bevat en initialiseer de Git repository:
$ cd /path/to/the/bzr/repository
$ git init
Nu kan je eenvoudigweg je Bazaar repository exporteren en converteren in een Git repository met het volgende commando:
$ bzr fast-export --plain . | git fast-import
Afhankelijk van de grootte van het project, wordt jouw Git repository gebouwd in een periode varierend van een paar seconden tot een paar minuten.
Je kunt ook een Bazaar repository importeren dat branches bevat. Laten we aannemen dat je twee branches hebt: een vertegenwoordigt de hoofd-branch (myProject.trunk), de andere is de werk-branch (myProject.work).
$ ls
myProject.trunk myProject.work
Maak de Git repository en ga er met cd
erheen:
$ git init git-repo
$ cd git-repo
Pull de master-branch in git:
$ bzr fast-export --export-marks=../marks.bzr ../myProject.trunk | \
git fast-import --export-marks=../marks.git
Pull de werk-branch in Git:
$ bzr fast-export --marks=../marks.bzr --git-branch=work ../myProject.work | \
git fast-import --import-marks=../marks.git --export-marks=../marks.git
git branch
zal je nu de master
-branch alsook de work
-branch laten zien.
Controleer de logs om je ervan te vergewissen dat ze volledig zijn en verwijder de marks.bzr
en de marks.git
bestanden.
Onafhankelijk van het aantal branches die je had en de import-methode die je gebruikt hebt, is je staging area niet gesynchroniseerd met HEAD
, en met het importeren van verschillende branches, is je werk-directory ook niet gesynchroniseerd.
Deze situatie is eenvoudig op te lossen met het volgende commando:
$ git reset --hard HEAD
Laten we nu eens kijken naar de te negeren bestanden.
Het eerste wat we moeten doen is .bzrignore
naar .gitignore
hernoemen.
Als het .bzrignore
bestand een of meerdere regels bevat die beginnen met "!!" of "RE:", zal je deze moetten wijzigen en misschien verscheidene .gitignore
-bestanden maken om precies dezelfde bestanden te negerern die Bazaar ook negeerde.
Uiteindelijk zal je een commit moeten maken die deze wijziging voor de migratie bevat:
$ git mv .bzrignore .gitignore
$ # modify .gitignore if needed
$ git commit -am 'Migration from Bazaar to Git'