同时使用SVN和Git进行版本控制

同时使用SVN和Git进行版本控制

相信很多小伙伴都要类似的困扰:

公司的项目因为是老项目或者习惯问题使用的是SVN, 但是因为项目太大或者不能频繁的提交或者需要离线使用或者使用不习惯或者其他等等因素, 个人需要使用Git来管理项目.

SVN和Git

两个版本控制软件的优缺点对比不是我们今天的重点. 本篇文章的重点在介绍这种特定的应用场景, 至于两种软件的各种对比和介绍, 在网上已经有大量优秀的文章, 各位小伙伴请自行探索.

方案一: SVN与Git共存


具体过程为:

    将项目从SVN服务器拉取下来. 在根目录创建Git仓库, 添加好忽略文件.gitignore, 将.svn文件夹加入忽略. 将目录里的所有除文件都加入git仓库. 提交git. 将.git文件夹加入svn的忽略列表, 到此, 初始化过程完成.

在日常的工作中从svn拉取更新后提交到git, 或者从git获取更改后提交到svn.

下面是大致的流程:

#创建目录
mkdir project
cd project

# 拉取svn
svn checkout https://192.168.1.102/xxxxx

# 创建空git项目
git init

# 添加忽略
touch .gitignore
cat ".svn" > .gitignore

# 提交git
git add .
git commit -m "init"

方案二: SVN作为远程分支

该方案将svn当做git的远程分支, 并使用git自带的"git svn xxx"系列工具, 具体过程如下:

    使用 git svn clone命令将svn仓库克隆下来. 此时的仓库已经是一个正常的git仓库, 但是可以查看svn提交的日志信息. 正常修改内容, 提交git. 使用git stash命令暂存本地修改. 使用git svn rebase拉取svn仓库最新修改. 使用git svn dcommit提交修改到svn仓库. 使用git push提交的git远程仓库.

下面是大致的流程:

mkdir project
cd project

git svn clone https://192.168.1.102/xxx -r 1000:HEAD
# 默认不带-r参数会克隆所有的svn版本, 可能会因为版本太多而造成失败
# 这里都传参指定克隆部分版本
# 或者也使用以下组合命令
#-----------------------------
git svn init https://192.168.1.102/xxx
git svn fetch -r 1000:HEAD #代表克隆从svn版本号1000到最新的内容
git svn fetch -r 1000 #代表克隆指定的版本
git svn fetch -r HEAD #代表克隆最新的版本
#----------------------------

# 添加忽略
touch .gitignore
cat ".svn" > .gitignore

# 提交git
git add .
git commit -m "init"

# 拉取svn避免冲突
git svn rebase

# 提交svn
git svn dcommit

# 提交远程git
git push

这种方式的好处是可以看到svn上面的提交日志, 只是每次提交版本时需要先rebase一下.

好啦, 今天的分享就到这里了, 祝大家😄.

经验分享 程序员 微信小程序 职场和发展