`

svn 迁移到git下全过程

 
阅读更多

转自:

http://www.aikaiyuan.com/6584.html

 

git的出现,让svn深受打击,大家纷纷转战git。没错,我也移情别恋了,一下就描述一下抛弃svn,迷上git的过程吧

简单粗暴,命令如下:

git svn clone https://localhost:8443/svn/www/ –-no-metadata –-trunk=trunk www

参数说明:

no metadata 参数是阻止git 导出svn包含的附加信息,这样提交到Git的记录就会显得很“干净”

trunk 主分支

www 创建的git项目名称

执行过程可能会有svn帐户的输入,反正就用户名跟密码吧

2.代码克隆下来之后,这已经是一个git下checkout的项目了,只是他还没有代码库源,简单的说就是他还没有个git下固定的家(他生母是 svn,得给他找个继母),因此要先在你的github,或者你们公司内部搭建的git平台,创建一个 属于www项目的git库,当然也可以自己本地创建,这里就不详细说了,等下说到代码部署会说到。

比如代码库如下:

git@gitlab.xxx.com:second/test.git

为了证明www确实还没有新妈,你可以用命令:

git remote -v 查看一下是否有源,执行完很明显,什么都没显示

接下来就是把你的www库领回test.git这个妈的家里,命令如下:

git remote add git@gitlab.xxx.com:second/test.git

执行完之后,你可以再执行一次git remote -v 你会发现如下:

 

origin刚才谷歌翻译了一下,是起源的意思,其实在执行git remote add 原本是需要给源取个名字的,比如发布源 release

就需要这样输入git remote add  release git@gitlab.xxx.com:second/test.git,因为www还没有源,所以添加的就变成默认的源,也就是起源了,因此省略了 origin

到这里,已经完成了认识新妈的过程,接下来干嘛,没错,所有代码领回家,命令如下

git push

代码从svn 到git 就算完成了。

其实在这个过程里似乎漏了一步,没有在git下创建分支,git branch -a  查看一下,发现已经自动创建了默认主分支master

案例:

1.物理环境
Gitserver    Centos5.8    192.168.1.245
Svnserver    Centos5.8    192.168.1.108  

2.建立SVN用户到git用户的映射文件,文件格式如下:

cat /tmp/userinfo.txt
david=sfzhang<shifeng_zhang88@163.com>
yanni=yanni<yanni_liu88@163.com>

3.通过git svn clone克隆一个git版本库,SVN里面包含trunk,branchestags

git svn clone svn://192.168.1.108:9999/yanzi/ --no-metadata --authors-file=userinfo.txt --trunk=trunkmobile --tags=tags --branches=branches --ignore-refs=refs/remotes/yanzi-.*  yanzi
  • 参数–no-metadata表示阻止git导出SVN包含的一些无用信息
  • 参数–authors-file表示SVN账号映射到git账号文件,所有svn作者都要做映射
  • 参数–trunkmobile表示主开发项目
  • 参数–branches表示分支项目,--ignore-refs表示不包含后面的分支项目
  • 参数yanzi表示git项目名称

4.通过git log 查看项目提交的历史记录,包括作者,日照,和提交注释信息等。

cd yanzi
git log
commit 3c4907782804096ea3fa3fb5419dcce610e56f1f
Author: david <shifeng_zhang88@163.com>
Date:   Fri May 10 10:27:50 2013 +0000

5.git版本库里面tag都是branches(分支),首先列出当前所有的分支。

cd yanzi
git branch -r
  tags/mobile_1.0.0
  tags/mobile_1.0.1
  trunk
  yanziios1.0.1-build-2223-branch-002

6.手动将branches分支转换为tags

git tag mobile_1.0.0 tags/mobile_1.0.0
git tag mobile_1.0.1 tags/mobile_1.0.1

7.将多余的branches删除掉

git branch -r -d tags/mobile_1.0.0
Deleted remote branch tags/mobile_1.0.0 (was d50002b).
git branch -r -d tags/mobile_1.0.1
Deleted remote branch tags/mobile_1.0.1 (was e7b78a2).

8.再次列出当前的所有分支。

git branch -r
  trunk
  yanziios1.0.1-build-2223-branch-002

9.建立git仓库并初始化版本库。

mkdir -p /data/gitdata/yanziios.git
cd /data/gitdata/yanziios.git/
git init --bare
Initialized empty Git repository in /data/gitdata/yanziios.git/

10.yanziios.git的属主修改为git用户。

chown git yanziios.git -R
ls -l yanziios.git/
total 64
drwxr-xr-x 2 git root 4096 May 22 12:25 branches
-rw-r--r-- 1 git root   66 May 22 12:25 config
-rw-r--r-- 1 git root   73 May 22 12:25 description
-rw-r--r-- 1 git root   23 May 22 12:25 HEAD
drwxr-xr-x 2 git root 4096 May 22 12:25 hooks
drwxr-xr-x 2 git root 4096 May 22 12:25 info
drwxr-xr-x 4 git root 4096 May 22 12:25 objects
drwxr-xr-x 4 git root 4096 May 22 12:25 refs

11.添加远程git服务器地址

git remote add origin git@192.168.1.245:/data/gitdata/yanziios.git

 

12.用git push命令推送全部的分支和标签信息到git服务器上面。

git push origin master --tags

13.SVN迁移到Git测试,在客户端用SourceTree工具克隆一个Git服务端仓库yanziios.git

14.SourceTree图形界面里面可以看到git用户提交的Graph信息,描述信息(Description),日期,作者和版本号等信息。

总结:

  • 在运行git svn clone svn: 命令时出现下面的错误:Can‘t locate SVN/Core.pm in @INC (@INC contains: /usr/local/git/lib/perl5/site_perl/5.8.需要安装subversion-perl软件包。
  • 在运行git pull git@192.168.1.245:/data/gitdata/yanziios.git时出现下面错误:Can’t locate Term/ReadKey.pm in @INC (@INC contains:需要运行下面命令:

Pull up the CPAN teminal:
perl -MCPAN -e shell
Once at the cpan prompt install the needed module:
cpan> install Term::ReadKey

  • 需要在本机用sshkeygen t rsa C your_email_name生成KEY认证文件,然后把公钥id_rsa.pub追加到git服务器的git用户家目录authorized_keys文件里面。
  • SVN 只有trunk,branches,没有tags导出方法。
git svn clone svn://192.168.1.10:8888/svnproject/ --no-metadata --authors-file=userinfo.txt --trunk=trunk  --branches=branches 
--ignore-refs=refs/remotes/yanziios1.* gitproject
  • git clone 远程分支git clone git@192.168.1.222:/data/gitdata/yanzi/test.gitbranch  testbuild1442branch001 test001
  • 更多的错误详见making git-svn work on mac tiger
分享到:
评论

相关推荐

    gitdocx学习学习学习学习学习学习学习学习学习学习学习学习学习学习

    Git是分布式版本控制系统,而Gitlab是一个基于Git的开源项目管理平台,提供了代码仓库、问题追踪、持续集成/持续部署(CI/CD)等功能。...无论是从SVN迁移,还是日常的开发工作,Gitlab都能提供强大支持。

    PB6.5文件转移程序

    6. **版本控制集成**:如果项目使用了版本控制系统(如SVN、Git),文件转移程序应考虑如何与版本控制工具协同工作,避免引发冲突或丢失历史信息。 7. **权限与安全**:在企业环境中,文件的访问权限和安全设置也很...

    redmine-1.3.3

    - 为了享受更多的新特性及安全更新,用户可能会考虑将1.3.3升级到更高版本,但这需要谨慎操作,因为升级过程中可能存在兼容性问题。 - 定期备份数据,防止在系统维护或升级过程中数据丢失。 综上所述,Redmine ...

    版本更新demo

    "版本更新demo"是一个典型的示例,它可能包含了如何进行有效版本更新的全过程,从规划到实施,再到用户端的无缝升级。下面将详细阐述版本更新的相关知识点: 1. 版本控制:版本控制是管理不同版本之间差异的重要...

    软件版本管理规范.doc

    本规范适用于所有类型的软件项目,无论规模大小,包括但不限于应用程序、系统软件、中间件等,覆盖了从需求分析、设计、编码、测试到发布的全过程。 1.3 术语定义 - 版本:软件的不同开发阶段或改进后形成的特定...

    java开发工具pl/sql

    用户可以在一个统一的界面内完成从编写到部署的全过程。 4. **数据操作**:用户可以直接在工具中插入、更新、删除数据库中的数据,无需通过SQL命令。此外,还可以进行数据导出和导入,方便数据迁移或备份。 5. **...

    Delphi 12 控件之dbForge Edge Enterprise 1.3.4 (4 in 1).7z

    它能够与Git、SVN等版本控制系统集成,确保数据库结构和数据的版本历史得以妥善管理。这对于团队协作和项目维护来说尤其重要,可以避免因版本冲突导致的问题。 在性能优化方面,dbForge Edge Enterprise具备分析和...

    PLSQL Developer7.1.5解压版

    8. **版本控制集成**:与其他版本控制系统(如SVN、Git)集成,方便团队协作,管理代码版本。 9. **性能分析**:通过Explain Plan功能,用户可以分析SQL语句的执行计划,了解查询性能,并优化数据库操作。 10. **...

    dbForge_Studio_for_MySQL_Enterprise_8.0.124_破解

    dbForge Studio for MySQL Enterprise 8.0.124是数据库管理员和开发者的得力助手,它提供了一站式的解决方案,涵盖了从设计、开发到维护的全过程。通过对其强大功能的深入理解和应用,用户能够更有效地管理和优化...

    plsql developer 中文版

    7. **版本控制集成**:PL/SQL Developer支持与常见的版本控制系统(如SVN、Git等)集成,便于版本管理和代码审查。 8. **性能优化**:提供性能分析工具,例如SQL解释计划、执行统计信息,帮助识别和解决性能瓶颈。 ...

    PLSQL_Developer Version 11.0.6.1776

    总之,PLSQL Developer Version 11.0.6.1776是一个为Oracle数据库开发者设计的强大工具,它提供了一站式的解决方案,涵盖了从代码编写、调试到数据库管理的全过程。对于熟悉PL/SQL的开发者来说,它是提高效率和生产...

    PLSQL12完美汉化包

    7. **版本控制集成**:与常见的版本控制系统如SVN、Git等集成,便于团队协作。 8. **脚本执行**:可以批量运行PL/SQL脚本,进行数据库维护和数据迁移工作。 9. **自定义快捷键和界面布局**:根据个人喜好定制工作...

    PL/SQL Developer

    PL/SQL Developer可以与常见的版本控制系统如SVN、Git等集成,便于团队协作和代码版本管理。这使得开发者可以方便地查看历史版本、比较差异、合并代码,确保团队的工作协同一致。 5. **数据浏览和操作** 内置的...

    plsqldev1106x64.exe含中文包

    7. **版本控制集成**:与常见的版本控制系统(如SVN、Git)集成,便于团队协作和代码管理。 8. **脚本执行**:可以运行批处理脚本,对多个数据库任务进行自动化处理。 9. **项目管理**:组织和管理数据库相关项目...

    PLSQL Developer9 绿色汉化版

    6. **版本控制集成**:与常见的版本控制系统(如SVN、Git等)集成,便于团队协作和代码版本管理。 7. **项目管理**:支持创建和管理项目,将相关的数据库对象和脚本组织起来,方便管理和查找。 8. **导出导入功能*...

    最新Devart dbForge Studio for Oracle Enterprise 4.6.15.x64

    总的来说,Devart dbForge Studio for Oracle Enterprise 是一个全面的Oracle数据库开发和管理解决方案,其强大的功能覆盖了从数据库设计、开发、调试到性能优化的全过程,为专业开发人员和DBA提供了高效的工作平台...

    pl/sqldeveloper8.0中文包

    7. **版本控制集成**:支持与常见的版本控制系统如SVN、Git等集成,便于团队协作和代码管理。 8. **PL/SQL代码分析**:提供代码质量检查,帮助开发者遵循最佳实践,避免潜在的性能问题和错误。 对于"chinese.exe...

    PLSQL Developer绿色中文版

    5. **版本控制集成**:通过与其他版本控制系统(如Git、SVN等)的集成,可以实现代码版本管理和团队协作。 6. **报表生成**:可以生成关于数据库对象的详细报告,包括对象的定义、依赖关系以及性能分析等,有助于...

    plsql developer客户端

    8. **版本控制集成**:与常见的版本控制系统(如SVN、Git)集成,便于团队协作和代码版本管理。 9. **性能优化**:通过执行计划分析、SQL调优顾问等功能,帮助提升查询性能。 10. **导入导出**:支持数据和对象的...

    PLSQLDeveloper11_x32

    - 版本控制集成:与主流的版本控制系统如SVN、Git等无缝集成,便于团队协作开发。 - 任务管理:通过内置的任务管理器跟踪工作进度,提高项目管理效率。 - 调试器:提供断点、步进执行、变量监视等功能,帮助定位...

Global site tag (gtag.js) - Google Analytics