svn迁移至git-创新互联

svn 版本库的迁移,只要svn 库为标准目录(trunk、branches、tags)按照git官方文档基本都可以完成。

我们一直强调成都网站建设、成都做网站对于企业的重要性,如果您也觉得重要,那么就需要我们慎重对待,选择一个安全靠谱的网站建设公司,企业网站我们建议是要么不做,要么就做好,让网站能真正成为企业发展过程中的有力推手。专业网站制作公司不一定是大公司,成都创新互联公司作为专业的网络公司选择我们就是放心。

这里说说我所迁移的非标准目录结构的svn 库

svn 库里有part1目录,part1目录下又分为:code、UI等等,对于这种非标准目录结构,主干就是part1,没有分支,没有标签。

而code下面又分为android、ios目录,目录内才分trunk、tags、branch,这种目录层级结构……

对于以上非标准目录结构,我采用的是先git svn到本地,并提交到git仓库一个完整的版本,然后再将各目录层级进行拆分为独立标准目录结构svn库,然后再将各个库git svn到本地,再提交到git库。

说的可能有些绕,具体来操作下

全局假设:

原svn库地址:file:///home/svn1/

拆分后的标准库地址:file:///home/svn2/$svn/

原svn库对应的git地址:https://git.example.com/dev/oldsvn.git

拆分后对应的git地址:git@git.example.com/dev/$svn.git

注:$svn以具体目录或库名命名

目录结构:

part1:

    code:

        android:trunk、tags、branches

        ios:trunk、tags、branches

    UI

将原svn库克隆到本地:

对于标准目录结构含有其它自定义的目录,也可采用此方式,只需将trunk设置为自定义的目录名即可

git svn clone file:///home/svn/ \
--authors-flie=users.txt  --no-metadata --trunk=part1 oldsvn

选项含义:

    --authors-file: 指定svn和git用户对应关系

    --no-metadata: 告诉 git svn 不要包括 Subversion 通常会导入的元数据

    --trunk: 主干名

注:这里没有tags和branches所以不加 --tags --branch选项,也不用-s 选项代替。非标准目录结构,实际存在什么就指定什么,不存在不指定。

        在clone过程中,可能会有含‘gc‘ 的提示,遇见则‘git gc --prune=now',然后'git svn fetch' 继续clone

成功后,克隆的git 仓库结构对应为:

    code:

        android:trunk、tags、branches

        ios:trunk、tags、branches

    UI

将此提交到git 仓库,作为旧版本库,便于查看原svn历史提交修改。

git remote add origin https://git.example.com/dev/oldsvn.git
git push origin --all

对于多层级的目录结构,如现在需要将part1:conde:ios 的库迁移到git 上

首先,将ios 目录拷贝到svn库的根目录,既与part1同级,目录机构如下:

part1:

    code:

        android:trunk、tags、branches

        ios:trunk、tags、branches

    UI

android:trunk、tags、branches

ios:trunk、tags、branches

UI:

这样在通过‘git svn clone‘ 的时候,就可以指定trunk为ios了

git svn clone file:///home/svn/ \
--authors-flie=users.txt  --no-metadata --trunk=ios --branch=branches --tags=tags ios

将标签变为合适的 Git 标签

$ cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
$ rm -Rf .git/refs/remotes/origin/tags

这会使原来在 remotes/origin/tags/ 里的远程分支引用变成真正的(轻量)标签。

接下来,将 refs/remotes 下剩余的引用移动为本地分支:

$ cp -Rf .git/refs/remotes/* .git/refs/heads/$ rm -Rf .git/refs/remotes

将你的新 Git 服务器添加为远程仓库并推送到上面

git remote add origin git@git.example.com/dev/ios.git
git branch -r
git push origin --all

在变更svn目录的过程中可能会耗费很多时间,因此也可保持原svn目录结构,进行克隆

git svn clone file:///home/svn/part1/code/android \
--authors-flie=users.txt  --no-metadata -T trunk -t tags -b branches android

使用此方式,可能会出现未知问题,我遇到的是

fatal: refs/remotes/trunk: not a valid SHA1

以上问题尚未解决

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:svn迁移至git-创新互联
文章转载:http://ybzwz.com/article/iicpd.html