新仓库使用SubGit配置Svn和Git同步步骤

《公司内网 Git 环境搭建》中我们选择了使用 Gitolite + SubGit 来搭建Svn和Git的同步环境。

因为同步的粒度是Git仓库,每有一个新的仓库就要配置一次,所以此处先梳理下配置的步骤。后续再在此基础上尝试自动化。

###1.新建Svn仓库

svn仓库的创建很简单,一个普通的仓库就可以。需要注意的是Svn和Git仓库模型的区别,Svn可以checkout子目录,其每个目录都可以作为一个独立的仓库来使用。

因为要和Git同步,所以我们使用推荐的Svn模型和以方便和Git保持一致:

各个仓库为平级的目录。每个目录下面有 trunk、branches、tags目录,这些目录是遵照Svn的使用约定,同时又可以对应到Git的分支。

这些目录可以不用手工创建,SubGit会帮我们创建。我们只需要记住该Svn仓库的地址就可以,比如:http://192.168.1.91:8888/svn/dev/apollo-product-basic

###2.新建Git仓库

由于是用Gitolite搭建Git服务器,Git仓库的创建方法可以通过配置gitolite-admin/conf/gitolite.conf创建,也可以使用配置中有创建权限的用户进行创建。我们选择第二种,这样新建仓库不用每次更改配置,且遵循一些配置的规范。

具体操作流程示例:

1
2
3
$ git init
$ git remote add origin git:dev/apollo-product-basic
$ git push --set-upstream origin master

如果最后有两行错误提示,可以忽略,那是因为目前本地没有任何内容,所以没有传输。只要第一行提示成功在服务端初始化仓库即可。

这样仓库已经创建在服务器上了,当然,前提要确保在gitolite.conf中已经配置了仓库创建写入的权限。

###3.配置同步

在服务器上面运行:

1
$ subgit configure --svn-url http://192.168.1.91:8888/svn/dev/apollo-product-basic /home/git/repositories/dev/apollo-product-basic.git

这样会提示subgit已经安装到git仓库,配置文件位置:/home/git/repositories/dev/apollo-product-basic.git/subgit/config

配置文件中,我们需要做如下修改:

1
2
3
4
5
6
7
8
[core]
shared = true
defaultDomain = made-in-china.com
[svn]
branches = branches/*:refs/heads/*
branches = branches/feature/*:refs/heads/feature/*
branches = branches/release/*:refs/heads/release/*
branches = branches/hotfix/*:refs/heads/hotfix/*

[core]中配置和账号相关,[svn]中配置的是svn和git分支对应关系
这里要特别说明的是,在SubGit3.0之前的通配符只支持最后一个,而3.0之后支持更加强大的通配符。可以配置如下形式的映射关系:

1
branches = branches/feature/2015_C_*/cars:refs/heads/feature/*

接下来需要在/home/git/repositories/dev/apollo-product-basic.git/subgit/中配置访问Svn的账号和密码。最好能和所有仓库的可能的提交者一一对应,不然在提交到Git中的commit同步到svn的时候提交者变成默认的了。

如果想要一一对应,你可能需要在同步录的authors.txt中配置svn user到git user的对应关系。

最后,执行:

1
$ subgit install /home/git/repositories/dev/apollo-product-basic.git

提示成功,即可。接下来就可以正常的提交代码了。

关于SubGit的配置可以参考《SubGit中文手册:获取一个远程subversion库镜像》SUBGIT REMOTE BOOK

谢谢鼓励