混合使用Git SVN和Git

Oct 24th, 2008 | Posted by yajin | Filed under Git

上一篇文章中,介绍了如何在google code中使用Git svn。现在又有了新问题。比如项目qemu-omap3是想往开源项目qemu中增加一个新的功能。qemu-omap3的项目hosting是在google code上面,使用Git svn来管理。而qemu在http://repo.or.cz/w/qemu.git,使用Git来管理。

为了开发qemu-omap3,需要从某一天的qemu中拿下来所有的源码,然后在这个基础上进行开发。但问题在于qemu的开发也同时在进行。这就需要qemu-omap3中的代码能保持和qemu中的同步。也就是说,我的需求如下:

1.  使用git svn来管理qemu-omap3

2. 能得到最新的qemu的代码

3. 最新的qemu的代码不影响我的qemu-omap3

之前解决的方法是定期从qemu中拿下所有的源码,然后在qemu-omap3中建立一个branch,然后拷贝过去,进行merage。这个过程比较繁琐。

实际上,可以通过git remote命令来增加一个新的remote repo。

git remote add qemu http://repo.or.cz/r/qemu.git

git fetch qemu

这会在git中自动建立一个branch qemu并且会将所有的qemu中的branch等全部放到qemu下。下面是目前我的branch。

kill-bill:/home/root/sdc/qemu/qemu-omap/svn# git-branch -a
* master
  qemu/master
  qemu/svn/perso
  qemu/svn/tags/initial
  qemu/svn/tags/release_0_5_1
  qemu/svn/tags/release_0_6_0
  qemu/svn/tags/release_0_6_1
  qemu/svn/tags/release_0_7_0
  qemu/svn/tags/release_0_7_1
  qemu/svn/tags/release_0_8_1
  qemu/svn/tags/release_0_8_2
  qemu/svn/tags/release_0_9_0
  qemu/svn/tags/release_0_9_1
  qemu/svn/trunk
  trunk

接下来需要merage 目前的master和qemu上的master。首先新建一个local branch

git merage qemu/master

这个命令会将qemu/master 和本地的branch merage。由于我们本地的branch是在master,因此会merage到master。如果有冲突出现,有提示。然后在修改,git-add 后,冲突就没有了。

以后可以通过git fetch qemu来获取qemu的最新代码。并且通过git merage来合并远程的qemu和本地的代码。不过有一点要注意,这样merage的不仅仅是代码,而且包括log!!

然后使用git svn dcommit提交到google code上。svn上的log只会是你自己的log,而不是merage过来的很多其他log。

Tags: