在上一篇文章中讲到了在 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 文件存在冲突
  • ! 文件缺失

查看版本库信息

列出版本库的信息,包括地址,最新的版本号。

1
svn info

svn 重定向

svn 重定向可能会发生在项目交接或者部署到另一台服务器上,原来的地址变了,这是后不想重新检出一个新仓库,就可以通过重定向来解决这个问题。

1
svn switch --relocate svn://oldurl svn://newurl