SVN

1 概念

  • repository(源代码库): 源代码统一存放的地方
  • Checkout(提取): 当没有源代码的时候,需要从 repository checkout 一份
  • Commit(提交): 已经修改了代码,需要 Commit 到 repository
  • Update(更新): 已经 Checkout 了一份源代码, Update 可以和 Repository 上的源代码同步,本地的代码就会有最新的变更
  • SVN 管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN 都会自动合并两种修改。如果是同一行,SVN 会提示文件冲突,需要手动确认

2 安装

# 安装
sudo apt-get install subversion
# 查看版本
svn --version

3 生命周期

  • 创建版本库:create
  • 检出:checkout,用来从版本库创建一个工作副本
  • 更新:update,用来更新版本库。这个操作将工作副本与版本库进行同步
  • 执行变更:
    • rename 可以更改文件/目录名字
    • “移动”操作用来将文件/目录从一处移动到版本库中的另一处
  • 复查变化:
    • status,列出了工作副本中所进行的变动
    • diff,显示特定修改的行级详细信息
    • 不带参数,比较工作文件与缓存在.svn的”原始”拷贝
    • 比较工作拷贝和版本库中版本号为 3 的文件 rule.txt:svn diff -r 3 rule.txt
    • 比较版本库与版本库, -r(revision) 传递两个通过冒号分开的版本号:svn diff -r 2:3 rule.txt
  • 修复错误:revert,重置对工作副本的修改
    • 对目录操作使用 svn revert -R
    • 撤回版本,比如当前是版本 22,要撤回版本21,执行 svn merge -r 22:21 readme
  • 解决冲突:resolve,用来帮助用户找出冲突并告诉版本库如何处理这些冲突
  • 提交更改:commit,将更改从工作副本提交到版本库
    • add,添加到版本控制
    • commit 是一个原子操作,也就是说要么完全提交成功,要么失败回滚

4 其他命令

  • info:查看版本信息
  • log:展示svn 的版本作者、日期、路径等
    • 希望查看特定的某两个版本之间的信息:svn log -r 6:8
    • 查看某一个文件的版本修改信息:svn log file_path
    • 显示限定 N 条记录的目录信息:svn log -l N -v
  • cat:取得在特定版本的某文件显示在当前屏幕
    • 显示在指定版本号下的指定文件内容:svn cat -r revision_num file_name
  • list:显示一个目录或某一版本存在的文件
    • 可以在不下载文件到本地目录的情况下来察看目录中的文件:svn list pro_url

5 分支

  • 分支是 trunk 版(主干线)的一个 copy 版本,分支具有版本控制功能,且和主干线相互独立
  • 可以通过合并功能,将分支合并到 trunk,从而最后合并为一个项目
  • 在本地副本创建一个分支 svn copy trunk branches/branch_name
  • 查看状态 svn status
  • 提交新增的分支到版本库 svn commit -m "message"
  • 到新增分支进行开发
    • cd branches/my_branch/
    • ls
    • 修改查看状态 svn status
    • 添加到版本控制 svn add ......
    • 提交到版本库 svn commit -m "message"
  • 切换到 trunk cd ../trunk
  • 更新版本 svn update
  • 合并分支到 truck svn merge ../branches/branch_name/
  • 将合并好的 truck 提交到版本库 svn commit -m "message"

6 标签

  • 标签主要用于项目开发中的里程碑,比如开发到一定阶段可以单独一个版本作为发布等,它往往代表一个可以固定的完整的版本
  • 在本地工作副本创建一个 tag svn copy trunk tags/v1.0
  • 查看新的目录
    • ls tags/
    • ls tags/v1.0/
  • 查看状态 svn status
  • 提交 tag 内容 svn commit -m "tags v1.0"