delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

10 Jan 2011

git配合svn的一些使用方法

作弊条

在一个git库中跟踪不同的svn branch

首次创建git库:git svn clone [svn代码库到HEAD分支的URL] [git代码库名]

例如,对于 FreeBSD,对应的URL为 http://svn.freebsd.org/base/head/

一般来说,从远程svn库复制需要的时间会比较长,也可以考虑首先在本地建立一份镜像,然后直接用 file:/// 去指定。

接下来编辑 .git 中的 config 文件,找到类似:


[svn-remote "svn"]
        url = file:///downloads/mirrors/freebsd/base/head
        fetch = :refs/remotes/git-svn

对于不同的分支,可以继续添加新的svn-remote小节,例如:


[svn-remote "svn-releng-8.2"]
        url = file:///downloads/mirrors/freebsd/base/releng/8.2
        fetch = :refs/remotes/git-svn-releng-8.2

添加完之后,用git svn fetch svn-releng-8.2这样的命令来同步对应的分支。

本地开发分支

本地开发分支比较简单,只需git checkout -b [你的分支名字] [源分支]即可。

远程开发分支

如果需要在另一个系统上做开发,则需要一些特别的步骤。

首先是git clone远程系统上的代码库。然后编辑.git/config,其中应该有类似这样的部分:


[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = server:/repo/freebsd.git

为svn的branch建立对应的remote:


[remote "svn"]
        fetch = +refs/remotes/*:refs/remotes/svn/*
        url = server:/repo/freebsd.git

然后git pull,在git branch -r时就能看到远程系统上的git-svn branch了。这个主要是在git merge的时候比较有用。