简介
git-svn可以帮助工程师使用git的管理方式,来管理svn代码库。
使用场景:
- 历史原因,团队代码库使用svn管理,但同时又想使用git强大的分支管理的功能
- 习惯了git且对svn不了解的工程师,但团队代码只能用svn管理的情况下,可以使用git-svn
- 代码想从svn逐步迁移至git管理,中间过程中可以尝试使用git-svn
编译安装
安装包、依赖包列表
- openssl # ssl
- serf #让svn支持https
- apr
- apr-util
- subversion 1.8+
- git 1.9+
- python 2.7+
- scons 2.3+
其中,git-svn 工具已经被集成在了git 1.9+里,但是其同时也依赖于svn的perl接口。
以下是编译安装步骤和方法,安装路径以/home/liuzuocheng/local/为例:
编译安装apr 1.5+
./configure --prefix=/home/liuzuocheng/local/apr
make && make install
编译安装apr-util 1.5+
./configure --prefix=/home/liuzuocheng/local/apr-util --with-apr=/home/liuzuocheng/local/apr
make && make install
编译安装serf
scons APR=/home/liuzuocheng/local/apr APU=/home/liuzuocheng/local/apr-util OPENSSL=/usr/bin PREFIX=/home/liuzuocheng/local/serf
scons install
配置 LD_LIBRARY_PATH 写入/home/liuzuocheng/.bashrc
export LD_LIBRARY_PATH=/home/liuzuocheng/local/serf/lib:$LD_LIBRARY_PATH
编译安装subversion 1.8+ / 1.9+
官网: https://subversion.apache.org/
./configure --with-apr-util=/home/liuzuocheng/local/apr-util/ --with-apr=/home/liuzuocheng/local/apr/ --prefix=/home/liuzuocheng/local/subversion --with-serf=/home/liuzuocheng/local/serf
make && make install
同时安装 subversion perl 接口,在subversion源码根目录下执行:
make swig-pl
make install-swig-pl
配置 LD_LIBRARY_PATH 写入/home/liuzuocheng/.bashrc :
export LD_LIBRARY_PATH=/home/liuzuocheng/local/subversion/lib:$LD_LIBRARY_PATH
安装git
官网: https://git-scm.com/downloads
./configure --prefix=/home/liuzuocheng/local/git
make && make install
配置 LD_LIBRARY_PATH 写入/home/liuzuocheng/.bashrc :
export LD_LIBRARY_PATH=/home/liuzuocheng/local/git/lib:$LD_LIBRARY_PATH
安装问题汇总
- 编译安装serf,执行scons 显示
no module named scons.script
解决方法,配置scons 环境变量:
export SCONS_LIB_DIR=$LOCAL/python/lib/python2.7/site-packages/scons-2.5.0-py2.7.egg/scons-2.5.0/
- 执行git svn clone 等命令,提示错误 Can’t locate SVN/Core.pm
解决方法,将svn的perl接口软链至git库中:
ln -s /home/liuzuocheng/local/subversion/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/SVN /home/liuzuocheng/local/git/lib/perl5/site_perl/5.8.8/SVN
ln -s /home/liuzuocheng/local/subversion/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto /home/liuzuocheng/local/git/lib/perl5/site_perl/5.8.8/SVN/auto
使用方法
- 检出代码 ,类同于 svn checkout 的功能
git svn clone https://svn.zuocheng.net/test/trunk
为了提高下载速度,避免从第一个版本开始下载,可通过添加参数-r$REVNUMBER:HEAD,检出指定版本的代码
git svn clone -r18000:HEAD https://svn.zuocheng.net/test/trunk
- 从中心服务器的svn repository获取最新更新, 类同于 svn up 功能
git svn rebase
- 可以在本地建立分支,操作和git相同
git branch master dev
-
查看提交历史日志 , 类同于 svn log 功能
git svn log #svn log的展示方式
或者
git log #git log的展示方式
-
将本地代码同步到Svn服务器
git-svn dcommit
# 将你在本地使用git commit提交到本地代码库的所有更改逐一提交到svn库 -
解决冲突
1 git-svn rebase
, 更新版本,发现冲突文件conflict.c
2 编辑冲突文件vim conflict.c
,解决冲突
3 git add conflict.c
, 通知git,已经解决冲突
4 git rebase –continue
, 重新更新版本,查看是否还有冲突,如果有,跳到第2步,否则继续下一步
5 git-svn dcommit
, 提交更改
- 如何切换远程分支, 类同于 svn relocate 的功能
wiki中曾提到有一个方法,但是在我的环境上不起作用 https://git.wiki.kernel.org/index.php/GitSvnSwitch
- 其他
官方文档地址: https://git-scm.com/docs/git-svn
使用陷阱
- 待完善