Bazaar 또한 Git과 비슷한 DVCS 도구이기 때문에 Bazaar 저장소를 Git 저장소로 변환하는 것은 쉬운편이다.
우선 이 작업을 하려면 bzr-fastimport
플러그인이 필요하다.
bzr-fastimport
플러그인을 설치하는 방식은 Unix 비슷한 환경과 Windows 환경이 매우 다르다. 우선 Unix 비슷한 환경에서는 운영체제에서 제공하는 패키지 관리자를 통해 bzr-fastimport
패키지를 설치하는 방법이 가장 쉽다.
예를 들어 Debian 이나 파생 Linux라면 다음과 같이 bzr-fastimport
를 설치할 수 있다.
$ sudo apt-get install bzr-fastimport
RHEL이나 파생 Linux라면 다음과 같이 bzr-fastimport
를 설치할 수 있다.
$ sudo yum install bzr-fastimport
Fedora release 22 이상이라면 dnf를 사용하여 bzr-fastimport
를 설치할 수 있다.
$ sudo dnf install bzr-fastimport
패키지 관리자 도구가 없는 경우라면 다음과 같이 Python을 이용하여 플러그인을 설치할 수 있다.
$ mkdir --parents ~/.bazaar/plugins # creates the necessary folders for the plugins
$ cd ~/.bazaar/plugins
$ bzr branch lp:bzr-fastimport fastimport # imports the fastimport plugin
$ cd fastimport
$ sudo python setup.py install --record=files.txt # installs the plugin
bzr-fastimport
플러그인을 사용하려면 Python의 fastimport
모듈 또한 필요하다.
다음과 같은 명령으로 fastimport
Python 모듈이 설치되어 있는지, 설치를 어떻게 하는지 살펴볼 수 있다.
$ python -c "import fastimport"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named fastimport
$ pip install fastimport
위 방식이 잘 동작하지 않는 경우 https://pypi.python.org/pypi/fastimport/ 에서 바로 내려 받거나 도움을 얻을 수 있다.
Windows 에서 bzr-fastimport
는 Git 설치시 Standalone 버전이나 기본 설치(모든 체크박스가 설정되)의 경우 함께 설치된다.
따라서 따로 더 설치 작업이 필요하지 않다.
이 시점에서 Bazaar 저장소를 Git 저장소로 변환할 때 브랜치를 하나만 사용하는지 혹은 브랜치를 여러개 사용하는지에 따라 변환 작업이 달라진다.
cd
명령으로 Bazaar 저장소가 위치한 디렉토리로 이동하고, Git 저장소를 init 한다.
$ cd /path/to/the/bzr/repository
$ git init
다음과 같이 간단한 명령으로 Bazaar 저장소를 Git 저장소로 변환할 수 있다.
$ bzr fast-export --plain . | git fast-import
프로젝트 크기에 따라 수 초 혹은 수 분 내에 Bazaar 저장소의 내용이 Git 저장소에 담길 것이다.
여러 브랜치를 사용하는 Bazaar 저장소도 Git 저장소로 변환할 수 있다. 예를 들어 두 개의 브랜치를 사용한다고 가정해보자. 한 브랜치는 메인 브랜치 (myProject.trunk), 다른 브랜치는 작업 브랜치 (myProject.work) 인 경우가 있을 수 있다.
$ ls
myProject.trunk myProject.work
이 위치에서 새로 Git 저장소를 init 하고 cd
명령으로 이동한다.
$ git init git-repo
$ cd git-repo
trunk 브랜치의 내용을 master 브랜치로 가져온다.
$ bzr fast-export --export-marks=../marks.bzr ../myProject.trunk | \
git fast-import --export-marks=../marks.git
work 브랜치의 내용을 work 브랜치로 가져온다.
$ bzr fast-export --marks=../marks.bzr --git-branch=work ../myProject.work | \
git fast-import --import-marks=../marks.git --export-marks=../marks.git
git branch
명령으로 master
브랜치와 work
브랜치를 확인할 수 있다.
히스토리를 확인하여 완전히 저장소와 브랜치의 내용이 변환된 것을 확인한 후 위 과정에서 생성된 marks.bzr
, marks.git
파일을 삭제한다.
위 과정을 실행하고 나면 하나 혹은 여러 브랜치의 히스토리가 Git 저장소 히스토리로 변환되었지만 Staging Area와 워킹 디렉토리가 HEAD
와 동기화가 이루어지지 않은 상태이다.
다음 명령으로 쉽게 HEAD
와 동기화를 시킬 수 있다.
$ git reset --hard HEAD
파일 무시하기 내용을 살펴볼 차례이다.
우선 먼저 해야 할 일은 .bzrignore
파일을 .gitignore
파일로 이름을 변경하는 것이다.
.bzrignore
파일이 "!!", "RE:" 문자열로 시작하는 패턴을 포함한다면 이를 적절한 Git 패턴으로 변경하여 .gitignore
파일에 작성해야 한다.
위 작업을 마치고 난 후 이제 이 변경사항에 대한 커밋을 작성할 차례이다.
$ git mv .bzrignore .gitignore
$ # modify .gitignore if needed
$ git commit -am 'Migration from Bazaar to Git'