从SVN到git仓库的移植

1. 目的   

    公司本来有一个项目,里面有从客户clone下来的git仓库sdk,我们自己在windows下建立的svn仓库seu_code,现在要做的事情是,把这两个仓库都移植到我们公司内部的git服务器,原来sdk的log可以忽略丢失,但是原来svn的log希望保留,以方便后续跟踪调试。两个仓库移植后,都用git管理,不需要svn管理。

2.移植

2.1 总体布局

      这两个仓库其实属于同一个项目,所以,在布局上,希望把这两个仓库归一放置。在服务器上新增仓库,有两种方法,一种是通过在git管理员客户端修改gitolite-admin/conf/gitolite.conf来新增repo,文件Push后会自动创建仓库(查看服务器端的Repository/*.git),另外一种方法,是在gitolite.conf的repo后面用通配符,然后在客户端先生成好git仓库,然后再上传本地的git仓库到服务器。我们采用后面一种方法。

      首先修改git管理员客户端 gitolite-admin/conf/gitolite.conf,增加下面几行:

    repo    seu_ccplayer_all/.+$
         RW+C = @media
         RW+ = i5_admin
         C = i5_admin
         RW+ = litong


          上面的repo使用了通配符,这需要在服务器端Gitolite的安装用户(如git)主目录下,修改配置文件.gitolite.rc,使其包含如下配置:

        $GL_WILDREPOS = 1;

       上传push gitlotie.conf,这个时候可以查看服务器端的Repository目录,多了一个seu_ccplayer_all的目录,目录下面为空。可知这里repo里seu_ccplayer_all这个目录,指的是服务器端的Repository(存放所有.git目录)的子目录结构。同时可以从文件里看到,用户i5_admin和组media有在这个目录下创建git库的权利,而用户litong只有读写和推送权。


2.2 git到git

        下面的操作在i5_admin客户端进行。首先创建目录sdk,进入目录sdk, 并进行本地git初始化。

         mkdir sdk;

         cd sdk;

         git init;

         把原来的仓库sdk所有内容拷贝到这个目录下,注意不要拷贝.git。然后在本地add,commit。

         git add ./

         git commit ./ -m “add sdk from origin”

         如果想创建一个空的sdk仓库,git init之后也要在本地先commit一下,用下面参数:

         git commit --allow-empty

         然后使用git remote指令设置远程版本库。

         git remote add origin gitolite:seu_ccplayer_all/sdk.git

         使用完这个命令后,在服务器端Repository/seu_ccplayer_all/下面不会看到任何新添的.git,因为这一步只是告诉本地库,我要把本地的仓库匹配添加到远程对应的哪个地方而已,并没有涉及到任何于服务器有关的操作。所以这一步,即使ssh别名(gitolite)有误,也不会在这里报错,因为这一步只是设置本地仓库,根本没有去联网。

         如果我们发现这一步目录打错了或者设置错了,在重新git remote add之前,需要先删除掉这个匹配,用如下命令:

         git remote rm origin

      

         然后,我们用git push完成在服务器端版本库的创建

         git push origin master

         这一步才真正地联到服务器创建seu_ccplayer_all/sdk.git。如果上一步设置有错,或者目录或名字写错,会在这一步报错,报没有这个权限或者没有这个仓库路径等等,大家可自行灵活观察调试。这一步完成以后,我们的git仓库就创建好了,这个时候看服务器端的Repository/seu_ccplayer_all/下面,就出现了sdk.git了。


2.3 svn到git

          下面的也是在i5_admin的客户端做的事情。

          首先,这个要先安装git-svn:

          apt-get install git-svn

          然后,把windows上的svn仓库seu_ccplayer拷到本地 /home/liaowm/git_i5/seu_ccplayer_all/from_svn/seu_ccplayer, ls可知这个目录里包含了5个目录:conf  dav  db  hooks  locks 和2个文件format README.txt。然后进行本地转换:       

          git svn clone -s file:///home/liaowm/git_i5/seu_ccplayer_all/from_svn/seu_ccplayer seu_code

          注意这里file://指的是本地文件协议的意思,而且要留意,这里要写绝对路径,不能写相对路径(我还第一次知道了fiel://这个协议)。如果i5_admin服务器可以通过远程访问到原来windows的svn服务器,那么我猜这里就不用先拷贝到本机这么麻烦了,直接 git svn clone -s http://window-server/seu_ccplayer seu_code就可以了。看打印信息及结果,生成了seu_code文件夹,里面就是对应的svn的内容(是svn本身的内容,不是仓库hooks等文件)以及对应的.git目录。到seu_code里,用git log,可以看到原来svn里的所有提交记录,并且每条记录都有一行git-svn-id作标记,以说明这个记录是原来由svn产生的。想不要这条标记,可以在git svn clone 时添加 --no-metadata参数。

         git svn clone, 其实就是做了 git svn init + git svn fetch的工作,因此,想把这个本地库提交到服务器,跟上面做的一样就可以了:

        git remote add origin gitolite:seu_ccplayer_all/seu_code.git

        git push origin master

        大功告成。


3. 其他


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值