搭建Git服务器并将现有SVN代码仓库迁移

大概两周前我来到一家新的用人单位开始试用期,在来之前我想应该会有大牛来指导培训一下,果然刚到的第一天就坐在那边负责后台开发的大牛旁边,心想真是幸运。谁知来的第二天就爆出了大牛要离职的消息,之前心中的窃喜又消散一空。不得不说在与大牛的交谈中,我变得愈来愈发地佩服起他,不仅由于他在技术方面深厚的功底和积累,更因为他乐观开朗的性格所具有的感染力。我决心与他保持长久稳定的联系。
将话题转回到刚刚入职这点,在他离开的前一天,我正好与他聊到Git和SVN,他问到我Git和SVN的区别,然后Git有什么优势等等。我觉得可以回答出个大概,但还是不够准确具体详细。聊完以后他说干脆让我用现成的资源搭一个Git服务器。我想之前自己对Git有一定了解,但搭建服务器确实没有干过,应该会是个不错的学习机会,就决定试试。
首先,在准备搭建服务器之前,还是应该分析下这样做的好处和可行性。先说说好处,在上篇博文里已经对Git和SVN做了详细的对比,在其中也提到了一些Git的优点,在这里处于完整性的考虑将它们也一并汇总起来。
大体来看,Git的优点[1]主要是以下几个方面:

  1. Git是分布式的,开发者只需要在首次与代码仓库交互时将仓库克隆到本地,接下来的提交、新建分支、合并的操作都可以在本地完成,只有在最后提交新版本时需要与中央服务器交互,极大降低了与中央服务器的耦合程度,从而做到在中央服务器不可用时仍然不影响开发进展。
  2. 自动化地管理分支与合并
  3. 常用操作(提交、查看历史、撤销修改)比中心化的版本控制系统高效,这是因为在进行这些操作时不需要与中央服务器通信
  4. Git拥有更好的内容完整性检验机制 (SHA-1)

下面看看具体进行迁移的流程,按照直觉第一步应该是搭建一个Git服务器。由于单位的应用环境为Windows,所以这里选用GitBlit[2]作为首选。如果操作系统是MacOS,可以参考这篇教程在MacOS上搭建Git服务器

在安装完服务器并顺利使其运行后,我们就可以开始迁移了,大致流程可以表示如下:
建立一个空的Git仓库 -> 修改远程SVN仓库的URL -> 检查远程SVN仓库的URL是否正确 -> 正确 -> 从远程SVN仓库获取内容到Git仓库 -> 将本地代码提交到Git服务器 不正确 -> 将Git服务器上的URL地址设置为本地Git仓库的远程地址 -> 正确 -> 将本地代码提交到Git服务器

下面详细说明一下具体步骤:

  1. 建立一个空的Git仓库 git init -bare 或者 git svn init <svnRepoUrl> --tags=/ --branches=/ --trunk / (Windows)
    命令执行完后检查SVN仓库地址是否正确git config --list

  2. 从远程SVN仓库获取内容到Git仓库 git svn fetch 或者 git svn clone --tags=/ --branches=/ --trunk / --authors-file=<name_of_author_file> <svn-repo>/<project> <git-repo-name>

  3. 将服务器上的Git仓库地址添加到本地仓库,作为与其同步的远程仓库的源路径
    git remote add -f origin <remoteURL>
    添加后检查远程仓库的URL是否正确:git remote show origin 修改已添加过的远程仓库URL:git remote set-url origin <remoteURL>

  4. 将本地仓库的更新推送到远程git服务器
    git add . -> git status -> git commit -> git push origin master

可能遇到的问题:

在执行完上述步骤以后,如果需要将另一开发者添加为仓库贡献者的话,需要在GitBlit里的控制界面内创建新用户,并且赋予其对代码仓库相应的读写权限。

以上就是自己对Windows平台上Git服务器搭建和将SVN代码仓库迁移到Git的一些经验总结,今后可能还会更新在其他平台(诸如MacOS、Linux)上如何搭建Git服务器的一些经验汇总。大体来说,这不算是一个很复杂的过程,不过中间会碰到一些小问题需要解决,如果对Git有一定程度的了解的话解决这些问题会更加得心应手些。

#引用来源: [1] - Wikipedia_DVCS [2] - GitBlit