git svn命令
使用场景,公司古老的代码都存在svn服务器。svn对于现在的开发最大的问题就在于,创建分支相比于git的本地分支实在是太重了。所以对于这些项目,在工作中使用了一段时间的git svn命令,本地使用git管理分支,远端代码仓库使用svn管理。
初始化仓库(git svn clone)
使用中由于是已经存在了svn的仓库,大多数时候都不需要使用git svn init
来初始化仓库。
使用更多的是 git svn clone
从远端clone仓库。
实践建议:
git svn clone -s <svn_repo_url>
git svn clone -T <trunk> -b <branch> -t <tags> <svn_repo_url>
git svn clone -r<reversion_start>:<reversion_end> <svn_repo_url>
简答介绍这几个常用的参数
-T -b -t :分别代表你svn仓库的目录结构中,trunk目录,branches目录,tags目录。
-s : 如果你的svn仓库使用的是标准的目录结构,即branches,tags,trunk。那么使用-s参数可以代替-T -b -t三个参数
-r :由于svn仓库已经有很多版本了,clone超过1000个版本就会非常慢,-r可以指定clone的版本范围,直接输入版本号即可。HEAD代表当前版本。
注意-r参数的使用可能导致无法拉取到所有分支,或者导致拉取不到tags,trunk等分支。原因是,比如你的trunk目录下的版本号是100,但是你使用-r200:HEAD来clone仓库,就会导致无法获得trunk目录下的内容。
更新代码(git svn rebase)
当你clone下来仓库之后,处于master分支下。
可以通过 git branch -a
来获取所有的分支信息,
git checkout -b local_branch origin/remote_branch
可以将远端分支关联到本地分支。
通过 git svn info --url
命令获取当前分支对应的svn地址。
当确认好这些信息之后,通过git svn rebase
可以拉取该分支的最新内容。
提交代码(git svn dcommit)
这是你的本地git已经可以开始管理整个项目了,可以随意的创建本地的分支来进行代码的开发。开发完成后跟git一样需要先add、commit到本地分支,不同的是没有git svn push
这个命令,而是通过git svn dcommit
来把修改的代码推到远端svn服务器。dcommit前一定要执行rebase获取最新代码,解决好冲突之后再提交。提交前注意该分支是否对应你要提交的远端服务器地址,不要提交错地址。git svn info --url
命令可以获取当前分支对应的svn地址。
需要注意的问题:
当你创建好仓库后,git checkout -b local_branch origin/remote_branch
将当前本地分支关联到了远端分支上,当你处于该分支下进行新的checkout时候,你checkout出来的新分支也会自动关联到之前分支对应的远端地址上,所以在执行dcommit前注意好不要混淆了多个本地分支的提交内容。
获取svn仓库最新的分支信息(git svn fetch)
其他人创建的svn的新的分支不会同步到你的本地仓库上面,如果有同事创建了新的branch,你需要使用git svn fetch
来获取最新的分支目录信息。
以上就是工作中比较常用的一些简单命令,对于创建svn分支,tag等操作,我还是通过svn的命令完成的,并没有使用git svn命令来操作。当然git svn也是支持的。git svn命令非常丰富。感兴趣可以到git的官方文档学习。