工具速览:Apache Subversion
本文将带你快速上手SVN,我们希望您有基本的学习能力,最好有过一些编程经验。
SVN 版本管理工具
Section titled “SVN 版本管理工具”jskyzero 2018/05/20
- 什么是SVN
- 通俗的来讲,SVN是一个版本管理系统(version control system, VCS)。
- 我们经常使用的另一个版本管理工具——Git,SVN干的就和Git干的事情差不多。
- SVN与Git的区别
- 除了用来干的事情的目的类似以外,其他基本没什么相同。
- 其实从用户角度工作的流程也是很类似的。
- 其他的相同和不同,或者说优点和缺点建议自行把握。
- SVN(和Git)的优缺点
- 参考上个问题最后一点。
聊完了SVN我们来聊一下通用的一些概念。
- Repository:这个单词似乎直接理解起来是仓库一类的意思,这里就是指源代码存放的地方。
- Checkout:第一次发现这个词原来是提取的意思,如果使用过Git的话对这个单词应该不会陌生。
- …
Learn by Doing
Section titled “Learn by Doing”下载和安装就不再赘述,Windows的话记得检查二进制执行文件的路径是否添加到了系统Path上。
初始化一个仓库
Section titled “初始化一个仓库”假设当前路径为D:\SVN\:
# 新建文件夹mkdir hello# 初始化svnadmin.exe create hello接下来对于目的仓库的引用,我们将采用文件路径的形式,而不再对SVN或者HTTP等需要配置的进一步的展开。
提取并开始工作
Section titled “提取并开始工作”# 新建目录1mkdir 1# 新建目录2mkdir 2# 提取文件副本到目录1# 关于 file:///D:\SVN\hello# 这个就是那啥我们上面说的以文件夹的形式引用仓库svn chekcout file:///D:\SVN\hello 1# 提取文件副本到目录2svn chekcout file:///D:\SVN\hello 2# 创建新的文件夹cd 1mkdir branchesmkdir trunkmkdir tags# 查看当前状态svn status# 添加文件夹svn add *# 再次查看当前状态svn status# 提交svn commit -m "initial hello proj structure"
# 更新2cd ../2svn update
# 此时我们可以看到已经可以取下来新建的文件夹。那我们来手动自己制造一点冲突:
# 制造比对对象cd ../1/trunkecho "hello world!" >> hello.txt# 提交svn add hello.txtsvn commit -m "add hello.txt"# 制造冲突cd ../../2/trunk# 冲突出现echo "hello world!!" >> hello.txtsvn add hello.txtsvn commit -m "this will fail"
# 解决冲突svn update# ...# 具体的解决方法有很多,命令行交互中也提供基本的MENU里面很多选项,这里不再废话这个是svn-book中推荐的work cycle,其实和git的是类似的。
- 更新当前副本,
svn update了解一下。 - 更改工作,可能大部分时间都在这里。
- 检查更改,
svn status等指令查看修改内容。 - 改正错误,如果有错误。有丢弃修改的指令,建议svn help看一下。
- 提交修改,当然,如果此时又冲突的话,要处理冲突。
总体来说,对于任何版本管理工具这套思维模式都是不错的。
补充,关于github与svn
Section titled “补充,关于github与svn”请参考Support for Subversion clients。
实际上试了下因为是一直是git sync的思维所以用起来多少还是有点问题,不过还可以凑合。
如果是练手或者目录不复杂的可以试试看。
- 我们之间建了几个文件夹,这些文件夹其实都是有通用默许的推荐的使用方法的。
- SVN对于分支的管理方式,合并,等等是怎样的流程。
- SVN的Tag又是干什么的。
- 当文件传输意外终端,应该怎么办?
- 怎样对文件加锁?
等等,类似这样的问题,如果像我一样懒的话,当然是等到用到的时候再说。
我们可以打开最开始创建的那个文件夹,仔细分析一波里面的组织结构和内容,SVN背后是怎样储存文件的呢?
- 伪装是SVN官网的超链接
- 伪装是SVN官网文档中的某本小参考书
- …