混合使用Git SVN和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。