织梦CMS - 轻松建站从此开始!

罗索

从SVN到git仓库的移植

落鹤生 发布于 2013-01-18 10:36 点击:次 
公司本来有一个项目,里面有从客户clone下来的git仓库sdk,我们自己在windows下建立的svn仓库seu_code,现在要做的事情是, 把这两个仓库都移植到我们公司内部的git服务器,原来sdk的log可以忽略丢失,但是原来svn的log希望保留,以方便后续跟踪调试。两个仓库移植 后,
TAG:

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. 其他

(ttxgz)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201301/16470.html]
本文出处:CSDN博客 作者:ttxgz 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容