当前位置:  软件>C/C++软件

迁移VSS版本库到Git VSS2Git

    来源:    发布时间:2014-12-22

    本文导语:  公司最近有意将版本控制工具从VSS和CVS切换到Git上,由于之前的项目一直是使用VSS和CVS进行版本管理,这次迁移免不了要涉及VSS和CVS版本库向Git进行转换的工作。 带着这个目的,我先尝试着找到VSS到Git迁移的可行方案,因为...

公司最近有意将版本控制工具从VSS和CVS切换到Git上,由于之前的项目一直是使用VSS和CVS进行版本管理,这次迁移免不了要涉及VSS和CVS版本库向Git进行转换的工作。

带着这个目的,我先尝试着找到VSS到Git迁移的可行方案,因为我之前的项目一直也是用VSS进行版本管理,相对于从没有使用过的CVS而言,应该更容易上手一些。至于CVS如何迁移到Git会在后面进行研究。

之前在学习使用GitStack搭建Git服务器时,在其官方网站上看到一篇讲如何迁移SVN版本库到Git的文章,文中有提到git svn命令,可见Git内部已经有了对SVN版本库进行操作的支持,继而顺着这个思路,试着去找找有没有支持对VSS和CVS的操作,结果发现Git没有对VSS的操作支持,对于CVS倒是有git cvsimport,但在Git Bash中却不认识该命令,运行git help vcsimport也没有相关的文档,而使用git help vcs-migration倒是有文档,其中也提到了git cvsimport,难道是我是在Windows上使用的Git(安装的是msysGit 1.7.10),而在Windows上还不支持该命令吗?不知道在Linux上的情况是怎么样的?

这个问题暂时先搁置,先研究一下如何将原有的VSS版本库迁移到Git上。

既然Git没有对VSS的支持,那么VSS转Git应该是需要第三方的工具来帮助实现这个转换工作(该工具要读取并分析VSS仓库的数据,然后按照Git版本库的内部结构来存放之前VSS版本库中的数据),按照这个思路,在Google上搜索了一下,果然发现有一个这样的工具,那就是vss2git,而且是个开源的项目,很对我的胃口。

下载下来并试用了一下,结果成功将之前的一个用VSS管理的项目转换为Git仓库,并且之前VSS的历史信息也被保留下来,基本是满足了要求。

VSS版本库到Git的迁移

打开VSS2Git,其界面就是一个对话框,在其中作一些必要的设置,主要是设置VSS版本库所在的路径、要转换VSS版本库中哪一个项目(也可以是整个VSS版本库中全部的项目)、转换结果的存放位置、转换Log存放的位置、转换过程中创建Git提交对象时所需的email的domain等,设置好这些之后,点击Go按键即可开始VSS到Git仓库的转换。

迁移VSS版本库到Git  VSS2Git[图片]

转换所需的时间长短取决于VSS仓库的大小,如果VSS仓库中项目众多,且开发的时间都比较久的话,那么完成整个仓库的转换应该需要的时间会比较长,但如果只是转换其中一个项目到Git,那么时候会比较短。

转换后,通过git log可以看到之前VSS仓库中的历史信息,而且这些历史信息在Git仓库中仍然是按照提交时间的先后来排列的。

在转换过程中,打开存放Git仓库的目录,你会发现工作目录随着时间会在变化,这是因为VSS2Git在转换时会先分析并收集VSS仓库中的各种信息,然后再从VSS仓库中记录的最早的时间点开始Replay(演绎)整个VSS仓库数据形成的过程。

在演绎过程中,应该是先从VSS中取出最初的版本(Git仓库最初为一个空仓库),并将其版本中的文件作为Git工作目录的文件,然后按照Git先对工作目录进行文件快照再提交到Git仓库的做法,按照时间顺序逐个版本进行提交(提交时会取出VSS中对应版本的历史信息),最终将VSS版本库转换为Git仓库。

上述的演绎过程是我自己初步推断的大概过程,实际是否这么实现,请参考VSS2Git的源代码(用C#实现的)。另外,VSS仓库内部的数据到底是如何组织的我也没有研究过。

要注意的几点:

  • 如果是要将整个VSS仓库中的所有项目都迁移到Git中,那么在VSS2Git界面的Project一项中填上$

  • 如果只是要将VSS仓库中的某一个项目迁移到Git上,则在Project一项中应填上$/Project1(其中Project1为假设的项目名),甚至可以仅转换子项目,这样$/Project1/32Bit

  • VSS2Git一次要么完成VSS仓库的整体转换,要么只能转换VSS仓库中其中一个项目,这样要实现多个项目的转换就要多次执行VSS2Git

  • VSS2Git的每一次转换会产生一个Git仓库,如果是VSS仓库一次整体转换,则生成的Git仓库中将包含VSS仓库中所有的项目,这样带来的问题是,由于Git仓库中包含了所有的项目,这样以后不同项目的开发人员无法从Git仓库中只checkout出自己负责的那个项目文件,而是要checkout出所有项目的文件,这样对于公司的代码安全是非常不利的,那么,这样就不应该一次将VSS仓库整体转换,而是应该以项目为单位进行逐个转换,这样,对于不同的项目,对其Git仓库就可以为不同的开发人员设置不同的操作权限

  • VSS2Git在生成Git提交信息所需的email时,只是根据从VSS中提取出的User名加上在界面Email domain中填写的内容组合而成,实际生成的email地址未必是有效的(不一定能用来发送email)

更多的注意事项可至VSS2Git的主页查看。

导入现有的Git仓库到GitStack服务器上

通过VSS2Git,我们可以将VSS仓库中的项目逐一转换为该项目的Git仓库,这时我们可以将其放置到Git服务器上了,以便后续的开发和维护。

这里,我们假设使用GitStack搭建了Git服务器(如何搭建见上篇),现在的问题就相当于如何将一个现有的Git仓库导入到GitStack搭建的服务器上。因为正常的流程是在GitStack上先创建裸仓库,然后再向其中提交,如果这样做的话,我们之前的VSS中的历史信息恐怕就要丢失了,而这是我们不希望的结果。

不过幸运的是,GitStack支持导入一个现有的Git仓库到其中,其步骤也很简单,就是先将现有的Git仓库拷贝至C:GitStackrepositories目录下面,然后登陆到GitStack上,在Repositories列表中会发现我们的Git仓库已经在其中,但Action栏则出现了一个绿色的安装,而非添加用户、查看仓库的那些按钮,这时我们只有点击这个绿色按钮就完成了该Git仓库的导入,之后我们会发现绿色的按钮被正常的添加用户、查看仓库的那些按钮替换掉,这时我们就可以为该Git仓库添加用户并设置访问权限了。

迁移VSS版本库到Git  VSS2Git[图片]

具体的过程,在GitStack的文档中有详细的阐述,请见Import an existing repository,这里不再赘述。

至此,如何将VSS仓库迁移到Git,并将生成的Git仓库导入到GitStack搭建的服务器上的大概过程就结束了。

(全文完)

vss2git用来转换vss库到git仓库,最初用c#发布于codes.google.com,现在有很多分叉在github上,并有c++改写。 下面这篇介绍是我转载的shanewfx写的文字。 迁移VSS版本库到Git

May 9th, 2012| Comments

公司最近有意将版本控制工具从VSS和CVS切换到Git上,由于之前的项目一直是使用VSS和CVS进行版本管理,这次迁移免不了要涉及VSS和CVS版本库向Git进行转换的工作。

带着这个目的,我先尝试着找到VSS到Git迁移的可行方案,因为我之前的项目一直也是用VSS进行版本管理,相对于从没有使用过的CVS而言,应该更容易上手一些。至于CVS如何迁移到Git会在后面进行研究。

之前在学习使用GitStack搭建Git服务器时,在其官方网站上看到一篇讲如何迁移SVN版本库到Git的文章,文中有提到git svn命令,可见Git内部已经有了对SVN版本库进行操作的支持,继而顺着这个思路,试着去找找有没有支持对VSS和CVS的操作,结果发现Git没有对VSS的操作支持,对于CVS倒是有git cvsimport,但在Git Bash中却不认识该命令,运行git help vcsimport也没有相关的文档,而使用git help vcs-migration倒是有文档,其中也提到了git cvsimport,难道是我是在Windows上使用的Git(安装的是msysGit 1.7.10),而在Windows上还不支持该命令吗?不知道在Linux上的情况是怎么样的?

这个问题暂时先搁置,先研究一下如何将原有的VSS版本库迁移到Git上。

既然Git没有对VSS的支持,那么VSS转Git应该是需要第三方的工具来帮助实现这个转换工作(该工具要读取并分析VSS仓库的数据,然后按照Git版本库的内部结构来存放之前VSS版本库中的数据),按照这个思路,在Google上搜索了一下,果然发现有一个这样的工具,那就是vss2git,而且是个开源的项目,很对我的胃口。

下载下来并试用了一下,结果成功将之前的一个用VSS管理的项目转换为Git仓库,并且之前VSS的历史信息也被保留下来,基本是满足了要求。

VSS版本库到Git的迁移

打开VSS2Git,其界面就是一个对话框,在其中作一些必要的设置,主要是设置VSS版本库所在的路径、要转换VSS版本库中哪一个项目(也可以是整个VSS版本库中全部的项目)、转换结果的存放位置、转换Log存放的位置、转换过程中创建Git提交对象时所需的email的domain等,设置好这些之后,点击Go按键即可开始VSS到Git仓库的转换。

迁移VSS版本库到Git  VSS2Git[图片]

转换所需的时间长短取决于VSS仓库的大小,如果VSS仓库中项目众多,且开发的时间都比较久的话,那么完成整个仓库的转换应该需要的时间会比较长,但如果只是转换其中一个项目到Git,那么时候会比较短。

转换后,通过git log可以看到之前VSS仓库中的历史信息,而且这些历史信息在Git仓库中仍然是按照提交时间的先后来排列的。

在转换过程中,打开存放Git仓库的目录,你会发现工作目录随着时间会在变化,这是因为VSS2Git在转换时会先分析并收集VSS仓库中的各种信息,然后再从VSS仓库中记录的最早的时间点开始Replay(演绎)整个VSS仓库数据形成的过程。

在演绎过程中,应该是先从VSS中取出最初的版本(Git仓库最初为一个空仓库),并将其版本中的文件作为Git工作目录的文件,然后按照Git先对工作目录进行文件快照再提交到Git仓库的做法,按照时间顺序逐个版本进行提交(提交时会取出VSS中对应版本的历史信息),最终将VSS版本库转换为Git仓库。

上述的演绎过程是我自己初步推断的大概过程,实际是否这么实现,请参考VSS2Git的源代码(用C#实现的)。另外,VSS仓库内部的数据到底是如何组织的我也没有研究过。

要注意的几点:

  • 如果是要将整个VSS仓库中的所有项目都迁移到Git中,那么在VSS2Git界面的Project一项中填上$

  • 如果只是要将VSS仓库中的某一个项目迁移到Git上,则在Project一项中应填上$/Project1(其中Project1为假设的项目名),甚至可以仅转换子项目,这样$/Project1/32Bit

  • VSS2Git一次要么完成VSS仓库的整体转换,要么只能转换VSS仓库中其中一个项目,这样要实现多个项目的转换就要多次执行VSS2Git

  • VSS2Git的每一次转换会产生一个Git仓库,如果是VSS仓库一次整体转换,则生成的Git仓库中将包含VSS仓库中所有的项目,这样带来的问题是,由于Git仓库中包含了所有的项目,这样以后不同项目的开发人员无法从Git仓库中只checkout出自己负责的那个项目文件,而是要checkout出所有项目的文件,这样对于公司的代码安全是非常不利的,那么,这样就不应该一次将VSS仓库整体转换,而是应该以项目为单位进行逐个转换,这样,对于不同的项目,对其Git仓库就可以为不同的开发人员设置不同的操作权限

  • VSS2Git在生成Git提交信息所需的email时,只是根据从VSS中提取出的User名加上在界面Email domain中填写的内容组合而成,实际生成的email地址未必是有效的(不一定能用来发送email)

更多的注意事项可至VSS2Git的主页查看。

导入现有的Git仓库到GitStack服务器上

通过VSS2Git,我们可以将VSS仓库中的项目逐一转换为该项目的Git仓库,这时我们可以将其放置到Git服务器上了,以便后续的开发和维护。

这里,我们假设使用GitStack搭建了Git服务器(如何搭建见上篇),现在的问题就相当于如何将一个现有的Git仓库导入到GitStack搭建的服务器上。因为正常的流程是在GitStack上先创建裸仓库,然后再向其中提交,如果这样做的话,我们之前的VSS中的历史信息恐怕就要丢失了,而这是我们不希望的结果。

不过幸运的是,GitStack支持导入一个现有的Git仓库到其中,其步骤也很简单,就是先将现有的Git仓库拷贝至C:GitStackrepositories目录下面,然后登陆到GitStack上,在Repositories列表中会发现我们的Git仓库已经在其中,但Action栏则出现了一个绿色的安装,而非添加用户、查看仓库的那些按钮,这时我们只有点击这个绿色按钮就完成了该Git仓库的导入,之后我们会发现绿色的按钮被正常的添加用户、查看仓库的那些按钮替换掉,这时我们就可以为该Git仓库添加用户并设置访问权限了。

php开源软件 iis7站长之家

具体的过程,在GitStack的文档中有详细的阐述,请见Import an existing repository,这里不再赘述。

至此,如何将VSS仓库迁移到Git,并将生成的Git仓库导入到GitStack搭建的服务器上的大概过程就结束了。

(全文完)


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ​传统应用的docker化迁移
  • 请有过系统迁移的朋友们都来谈谈,迁移前需要做些什么准备工作?如果向x86平台迁移,是否要花很多钱,觉得有必要吗?
  • 数据库迁移工具 FmPro Migrator
  • 进程迁移问题,急切想了解!!!!!!!!
  • 数据库迁移工具 phpmig
  • 文件系统迁移问题?
  • 请教高手:如果将WIN2000下的CGI论坛迁移到UNIX系统下?
  • 数据库迁移工具 JPumpDX
  • 【有奖】成功做过迁移的人都来谈谈,当时花了多少钱,觉得有必要吗?
  • 将java从windows迁移到linux??
  • 将java从windows迁移到linux
  • 关于LINUX系统迁移的问题
  • JBoss 自动迁移工具 Windup
  • Hadoop和数据库数据迁移工具 Sqoop
  • 数据库迁移工具 DBConvert for MySQL & PostgreSQL
  • 我司要把原来的系统迁移到别的服务器上,原系统是as4的。
  • MySQL到SQL Server迁移工具 CTP
  • sqlserver数据库迁移后,孤立账号解决办法
  • 一句命令完成MySQL的数据迁移(轻量级数据)
  • 请教一个关于linux系统备份和迁移的问题
  • Access2000迁移到Oracle9i要点


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3