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的时候比较有用。
Archived: 5 Comments
marshalys | January 18, 2011 12:36 AM
老大,一段时间没来看,你的那个mars有段时间没更新了啊,我原来可是每天都看你的那个mars的啊,啥时候能恢复更新啊……
ambrosehua | February 10, 2011 4:57 AM
老大,你说的先建一份镜像是什么意思,能否说的更清楚些?
这个镜像是用
git svn clone http://svn.freebsd.org/base/head/,创建的;还是用 svn checkout http://svn.freebsd.org/base/head 创建的
ambrosehua | February 10, 2011 5:30 AM
老大,你这里的创建一个镜像倒底是什么意思?
是用git svn clone http://svn.freebsd.org/base/head head-mirror建一个
然后再用
git svn clone files://path/to/head-mirror my-head
再到my-head里面去该吗?
aduo | April 5, 2011 11:25 PM
git: ‘svn’ is not a git command. See ‘git –help’.
Did you mean one of these?
fsck
show
为啥会这样
Xin LI replied to comment from aduo | April 5, 2011 11:44 PM
编译的时候需要指定支持svn。。。