svn到git的迁移与过渡方案 |
发布: 2013-12-25 10:51 |
svn与git都是源代码版本控制软件,但它们属于不同的时候。 svn特点在集中式的管理方式,而git更适合于当前分布式管理方式。 当前从svn到git的迁移方案,都是以git为目标,从git的角度提供了相对的迁移策略。 使用的比较多的是,git-svn 和 subgit。 前者出现的早,一直是在git包里自带,用的人多些,在最新的版本里对分支的支持已经非常完善了。 但是它只是一个客户端口的解决方案,能让使用人员用git的方式管理svn代码库,并最终把代码存储在服务器的svn服务器上。 后者属于第三方的解决方案,并且是个商业产品。客户端的使用纯git命令而非git-svn命令, 并在git服务器上提供服务器端的配置支持,让服务器上的git与svn服务器保持同步。 在客户端上则看不到svn的影子,只是把git-svn拿到服务器上使用,并且自动化了。 这两种方案最终都是使用 git或者类似git命令管理代码,与向git的迁移目标一致。 前者在本地的所有管理命令使用git命令,最终提交到远程svn库。 svn服务端无需要任务改动,只是客户端使用git-svn命令。 目前来说,git-svn对svn的分支与tag支持已经非常好了,对svn的子目录支持也非常好了。 但是这种方式,最好还是意向操作,即以svn为主版本存储, 所有的提交要么以svn客户端命令直接提交到svn中, 要么使用git-svn命令提交到svn中, 然后再使用git-svn命令同步到服务器上的git库中。 如果这时候,即有使用git提交到服务器上的git库中,又有使用svn提交到svn库中, 当两者有冲突的时候,则非常难处理了。 假如希望完全使用git命令,那么,这个git库对应的svn目录就不能再直接提交了, 而是只能允许一个从git库到svn库的后台自动提交,这个过程由git库的钩子程序执行。 也就是要么屏蔽掉svn库某个对应目录的提交,要么屏蔽掉git库对应库的提交, 总之他们只能实现单向的用户,而无法或者很难实现两边同时提交,并且不能保证双向的代码库自动完全同步。 这个时候,我们需要一个放在服务器上的自动处理svn与git库同步的工具, 我把这个称作gitsvn_bridge,而这个工具应该与subgit提供的工具类似。 自行设计的这个gitsvn_bridge与subgit的服务器端机制,都是通过相应的版本库提交事件钩子程序, 触发这个连接器执行相应的代码同步逻辑。 这个的实现会在下一篇中详细说明。 |
原文: http://qtchina.tk/?q=node/779 |
Powered by zexport
|