posts - 18,  comments - 21,  trackbacks - 0

1、从svn clone出项目,加上-s参数以标记识别svn标准的目录分支结构,同时通过show-ignore设置git库的exclude属性:

  1. git svn clone -s https://svn.xxx.com/svn/xxx
  2. git svn show-ignore >> .git/info/exclude 

2、建立本地工作分支,开始工作:

  1. git checkout -b work 

修改内容直接commit,加上-a开头以省略git add操作:

  1. git commit -a 

3、提交回svn的过程:

  1. git checkout master  
  2. git merge work  
  3. git svn rebase  
  4. git svn dcommit 

在今天工作中,我提交回svn的方式是:

  1. git checkout master  
  2. git svn rebase  
  3. git merge work 

结果svn rebase时在master分支上产生了一个新的node,这样merge时就不能快速合并,出现了冲突,修复后,在dcommit时出错,出现N个孤立节点。因为不熟悉,就checkout出work分支,进行了dcommit,然后重新生成一次git库。

今天解决了这个问题,参考以下网址:https://wiki.bnl.gov/dayabay/index.php?title=Synchronizing_Repositories
以下重新描述一下问题和解决方法:
1、在执行git svn dcommit时,出现如下错误:
Committing to https://svn.xxx.com/svn/projects/trunk ...
提交时发生合并冲突: 您的文件或目录”test/functional/xxx_controller_test.rb“可能已经过时: The version resource does not correspond to the resource within the transaction.  Either the requested version resource is out of date (needs to be updated), or the requested version resource is newer than the transaction root (restart the commit). at /usr/bin/git-svn line 450
2、这时,重新执行以下步骤即可:

  1. git svn fetch  
  2. git svn rebase  
  3. git svn dcommit 

但我在执行git svn rebase时,又出现冲突,这个时候,只需要手工合并掉冲突,并重新add一下:

  1. git add . 

然后,再执行:

  1. git rebase --continue

如果报告说没有修改内容,则换成执行:

  1. git rebase --skip 

完成rebase过程,这时就可以git svn dcommit了。
这样,总算解决了svn历史冲突问题,不用象前面那样笨笨的重新git-svn clone.

posted on 2009-12-18 13:14 大日如来 阅读(5702) 评论(1)  编辑 收藏 引用 所属分类: 游戏-编程

FeedBack:
# re: git-svn问题
2013-11-24 15:25 | 小空
您好,冒昧的打扰一下,我想请教个问题,
在下刚开始接触git,公司要让我提供一个方案,就是要建立一个git提交代码的中转站,
具体是这样: 远程有台服务器,然后要将远程服务器的代码拉到本地服务器上,然后公司的员工再从本地服务器上获取代码,
公司员工提交代码要提交到本地服务器,本地服务器提交到远程服务器,
本人也是刚开始接触这个git,不知道该怎么样处理,各位能帮一下吗?谢了。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(3)

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜