Bazaar 是一个和 Git 非常类似的分布式版本控制系统(DVCS),因此将 Bazzar 仓库转换成 Git 仓库是非常简单易懂的。想要完成转换,你需要安装 bzr-fastimport 插件。
安装 bzr-fastimport 插件
安装 fastimport 插件的步骤在类 UNIX 操作系统和 Windows 上是不一样的。在类 UNIX 系统上,最简单的办法就是安装 bzr-fastimport
包,这种方法将会自动安装所有需要的依赖。
例如,使用 Debian 及其派生系统,你只需要进行以下操作:
$ sudo apt-get install bzr-fastimport
红帽企业版系统(RHEL),使用以下命令:
$ sudo yum install bzr-fastimport
Fedora 从 22 版本开始,采用了新的包管理器 dnf,使用以下命令:
$ sudo dnf install bzr-fastimport
如果直接安装包的方法不行,你可能需要使用安装插件的方法:
$ mkdir --parents ~/.bazaar/plugins # 为插件创建必要的文件夹
$ cd ~/.bazaar/plugins
$ bzr branch lp:bzr-fastimport fastimport # 引入 fastimport 插件
$ cd fastimport
$ sudo python setup.py install --record=files.txt # 安装插件
为了确保插件工作,你同时也需要安装有 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 使用脱机安装并保持默认安装选项不变(可选框全部选中)的情况下是自动安装的。在这种情况下,你什么都不用做。
接下来,导入 Bazaar 仓库的方法根据你的仓库是有一个分支还是有多个分支而不同。
单分支项目
cd
到包含你的 Bazaar 仓库的路径,然后初始化 Git 仓库:
$ cd /path/to/the/bzr/repository
$ git init
现在你可以使用以下命令轻松地导出你的 Bazaar 仓库并把它转化成 Git 仓库:
$ bzr fast-export --plain . | git fast-import
根据项目的大小,Git 仓库会在几秒钟到几分钟之间构建。
多分支项目
你同样也能够导入包含多个分支的 Bazaar 仓库。让我们假设你有两个分支,一个代表主分支(myProject.trunk),另一个是工作分支(myProject.work)。
$ ls
myProject.trunk myProject.work
创建一个 Git 仓库并 cd
进去:
$ git init git-repo
$ cd git-repo
将 master
分支拉入 Git:
$ bzr fast-export --export-marks=../marks.bzr ../myProject.trunk | \
git fast-import --export-marks=../marks.git
将工作分支拉入 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
会同时显示 master
分支和 work
分支。检查日志以确保它们是完整的,并删除 marks.bzr
和 marks.git
文件。
同步暂存区
无论你有多少分支以及使用的导入方法如何,你的暂存区都不会与 HEAD
同步,并且在导入多个分支时,你的工作目录也不会同步。这种情况使用下面的命令可以轻松解决:
$ git reset --hard HEAD
忽略被 .bzrignore 文件指明忽略的文件
现在让我们看看要忽略的文件。第一件事情就是将 .bzrignore
重命名为 .gitignore
。如果 .bzrignore
文件里面有一行或数行以“!!”或“RE:”开头的内容,你必须修改它,并且可能还要创建几个 .gitignore
文件,以便忽略与 Bazaar 忽略的文件完全相同的文件。
最后,你必须创建一个提交,其中包含此次迁移的修改。
$ git mv .bzrignore .gitignore
$ # modify .gitignore if needed
$ git commit -am 'Migration from Bazaar to Git'
推送你的仓库到服务器
终于到这一步了! 现在你可以推送仓库到它的“云端新家”了:
$ git remote add origin git@my-git-server:mygitrepository.git
$ git push origin --all
$ git push origin --tags
你的 Git 仓库准备就绪。
下一节:下一个将要看到导入的系统是 Perforce。 就像我们之前讨论过的,有两种方式让 Git 与 Perforce 互相通信:git-p4 与 Perforce Git Fusion。