在上一篇文章中讲到了在 Linux 下搭建 SVN 服务器,其实在工作中我们用的比较多的还是代码管理,这篇文章就来聊一聊在 Linux 下用 svn 管理代码。
检出
当我们接到一个开发项目的时候,第一步就是先从服务器把代码下载下来,svn 中通过 checkout
来把服务器的代码更新到本地。
1
|
svn checkout svn://127.0.0.1/project # checkout 可以用 co 代替
|
添加文件到版本控制
拿到代码后,我们在本地开发后,需要把新建的文件纳入到版本控制中,也就是把文件加入到 svn 的管理。
1
2
3
4
|
svn add index.html # 把文件添加到版本控制
svn add public --non-recursive # 只把当前文件夹加入到版本控制,文件夹下的文件不会加入版本控制
svn add * # 把所有文件加入到版本控制,如果文件夹已经在版本控制中了,那么文件夹里的内容将不会被加入版本控制。
svn add * --force # 强制将所有文件加入版本控制,文件夹已经在版本控制下,文件夹里的内容会被加入版本控制。
|
提交修改到服务端
在项目的一个小功能开发完了,就可以把代码提交到服务器了。svn 只会把已经加入到版本控制中的文件提交到服务器,没有加入的不会被提交的服务器。
1
2
|
svn commit -m "message" # -m 表示写一段消息,表示这次提交做了什么
svn commit -m "message" index.html # 只提交某个文件
|
更新工作副本
工作中除了自己会提交代码,你的同事也会提交代码,这样大家就要保持代码同步。
1
2
3
|
svn update # 普通更新,如果某个文件被指定到特殊版本,则这个文件不会被更新
svn update * # 强制更新所有文件,不管文件处于哪个版本
svn update -r 3 index.html # 更新 index.html 到指定的 3 版本,svn 每次提交都会增加一个版本。
|
删除文件或目录
开发中有些文件不用了就需要把它删掉,以免占用空间。
1
|
svn rm index.html # 可以添加删除信息,通过 -m "message"
|
比较文件
写了一天代码,提交之前审查一下代码,看看哪里改了什么,就需要比较一下文件的变化,通过 svn diff
来查看。
1
2
3
4
5
|
svn diff index.html # 查看本地文件和最新版本的差异
svn di index.html # diff 的缩写
svn di -r n index.html #比较工作副本和版本 n 的差异
svn di -r 1:3 index.html #比较版本 1 和版本 3 的差异
svn di # 比较所有文件
|
工作副本还原
代码写到一半,经理告诉你这个需求不做了,就需要把写的给回退到之前的版本,通过 svn revert
来回退。
1
2
3
|
svn revert index.html # 取消 index.html 的更改
svn revert * #还原当前目录的文件
svn revert --recursive dir #批量还原,会还原子目录
|
冲突处理
现在一个项目通常都有多个人一起开发,冲突基本上是难以避免的,这就需要我们能够在冲突发生时去解决它。
1
2
|
svn resolve index.html # 处理 index.html 的冲突
svn resolved index.html # 标记 index.html 的冲突已被处理
|
锁定与解锁
项目上某个文件你不想别人改动,就可以通过把这个文件给锁定,这样别人就没办法改了。不过这个功能不常用,也不建议用。如果你锁了某个文件,别人的工作就没法做了,可能就一直在这里等。不想被骂还是不要用这个功能。
1
2
|
svn lock index.html #如果锁定的用户有提交操作,会自动解锁。可以使用 svn ci --no-unlock -m "message" index.html 不会自动解锁
svn unlock index.html
|
查看日志
日志主要用来回顾之前做了什么。
1
2
|
svn log index.html # 查看 index.html 的日志
svn log # 查看所有日志
|
查看版本控制列表
列出 svn 下的文件
1
2
3
|
svn ls
svn ls --recursive # 列出所有文件
svn ls -v # 列出详情,类似 ls -l
|
查看文件状态
查看工作副本各文件的状态,通常在提交时检查一下那些文件没有加入版本控制,或者那些文件有变化。
1
|
svn status # 缩写为 svn st
|
- ? 表示没有加入版本控制
- D 表示被标记从版本控制中删除
- M 表示被编辑过
- A 表示被加入到版本控制中
- R 表示文件被替换
- C 文件存在冲突
- ! 文件缺失
查看版本库信息
列出版本库的信息,包括地址,最新的版本号。
svn 重定向
svn 重定向可能会发生在项目交接或者部署到另一台服务器上,原来的地址变了,这是后不想重新检出一个新仓库,就可以通过重定向来解决这个问题。
1
|
svn switch --relocate svn://oldurl svn://newurl
|