git与svn,协同开发

时间:2024-03-07 12:51:58

之前在网上看有一公司(记得还是一大公司),本地开发采用git管理代码,产品发布采用svn。当是觉得很别扭,没有当回事。

最近项目任务不忙,在闲暇时间,突然想起这事情,详细研究了下。笔记如下:

 注意:在网上查询了下git有一个命令git-svn可以作为svn的客户端。

git-svn的几个主要操作:

* 检出一个已存在svn repository(类似于svn checkout)
我们可以通过git-svn clone命令完成这个操作: git-svn clone your_svn_repository_url

* 从中心服务器的svn repository获取最新更新
这个操作可以通过"git-svn rebase"完成。注意这里用的是rebase,而不是update。update命令对于通过git-svn检出的svn repostory的git版本库是不可用的。

* 查看提交历史日志
这个简单,使用"git-svn log",加上-v选项,还可以提供每次commit操作涉及的相关文件的详细信息。

将本地代码同步到svn服务器
完成这一操作需要通过"git-svn dcommit"命令。这个命令会将你在本地使用git commit提交到本地代码库的所有更改逐一提交到svn库中。加上-n选项,则该命令不会真正执行commit到svn的操作,而是会显示会有哪些本地 变动将被commit到svn服务器。git-svn dcommit似乎不能单独提交某个本地版本的修改,而是一次批量提交所有与svn中心版本库的差异。

-----------

下面是一个git-svn的一般使用流程:
1、git-svn clone your_svn_repository;
2、修改本地代码,使用git add/commit将修改提交到本地git库;
3、定期使用git-svn rebase获取中心svn repository的更新;
4、使用git-svn dcommit命令将本地git库的修改同步到中心svn库。

-----------

 冲突问题解决办法:

在加入新东西之前,你也许会在同步主开发树的时候体验到一些问题。实际上,你在执行git-svn rebase之前还必须提交所有的本地修改(使用git-commit命令)。

有时候这并不合理,因为你的更改也许还没有准备好提交(还没有完成、测试或者验证这写代码)。不过别担心,git对此也有一个官方的解决方案,只需下面的步骤:

  1. 先把你的改动保存起来,使用命令:git-stash
  2. 更新工作副本,使用命令:git-svn rebase,这跟平时一样
  3. 恢复保存起来的改动,使用命令:git-stash apply
  4. 清除“保存”,使用命令:git-stash clear。第1步之后,所有未提交的改动在工作副本上都看不到了,因而你可以执行rebase命令,不会有任何问题。

参考git-stash帮助获得更多信息。

 

参考资料:

1.Howto Use Git and Svn Together http://flavio.castelli.name/2007/09/04/howto_use_git_with_svn/

2.http://www.cnblogs.com/alphaqiu/archive/2012/03/07/2383642.html