svn生命周期
- 创建版本库:create
操作创建一个新的版本库,版本库用于存放文件,包括了每次修改的历史。
- 检出:checkout
操作从版本库创建一个工作副本,作为开发者私人的工作空间,可以进行内容的修改,然后提交到版本库中。
- 更新:update
操作更新版本库,将工作副本与版本库进行同步。因为版本库是整个团队共用的,当其他人提交了改动,你的工作副本就会过期。
- 执行变更:commit
检出之后,可以进行添加、编辑、删除、重命名、移动文件/目录等变更操作。当最终执行了 commit 操作后,就对版本库进行了相应变更。
- 复查变化:status/diff
当你对工作副本进行了一些修改后,你的工作副本就会比版本库新,在 commit 操作之前使用 status/diff 操作复查下你的修改是一个好的习惯。
- 修复错误:revert
如果你对工作副本做了许多修改,当时不想要这些修改了,revert 操作可以重置工作副本的修改,恢复到原始状态。
- 解决冲突:merge
合并的时候可能发生冲突,使用 merge 操作进行合并。因为 SVN 合并是以行为单位的,只要不是修改的同一行,SVN 都会自动合并,如果是同一行,SVN 会提示冲突,需要手动进行确认修改,合并代码。其中 resolve 操作可以帮助找出冲突。
- 提交更改:commit(添加注释)
将文件/目录添加到待变更列表,使用 commit 操作将更改从工作副本更新到版本库,提交是添加注释说明,是个好的习惯。
具体
svn 创建
$ svnadmin create dir...
svn 检出操作
$ svn checkout svn://192.168.10.10/zinaer --username zinaer --password 123456
SVN 解决冲突
- 使用命令查看更改
$ svn diff
Index: hello.txt
===================================================================
--- hello.txt (revision 3)
+++ hello.txt (working copy)
@@ -1 +1 @@
-hello world https://skm.zinaer.com
+hello world https://skm.zinaer.com 123
- 尝试直接提交
$ svn commit -m 'change first'
Sending hello.txt
Transmitting file data .done
Committing transaction...
svn: E160028: Commit failed (details follow):
svn: E160028: File '/hello.txt' iAs out of date
可以看到提交失败
3. 尝试Update再提交
$ svn update
Updating '.':
C hello.txt
Updated to revision 4.
Summary of conflicts:
Text conflicts: 1
svn提交
- 在版本库中添加一个文件
$ cat README.md
# 简明 SVN 教程
- 查看状态
$ svn status
? README.md
? 代表 README.md 还没有加入版本控制中。
3. add
$ svn add README.md
A README.md
- commit
$ svn commit -m 'add README.md'
Adding README.md
Transmitting file data .done
Committing transaction...
Committed revision 6.
提交成功…(感觉很像git)
svn版本回退
- 随便修改一个文件
$ svn status
M README.md
- revert (恢复单个文件)
$ svn revert README.md
Reverted 'README.md'
- revert -R (恢复整个目录)
$ svn revert -R zinaer
- revert -r (恢复一个已经提交的版本)
$ svn merge -r 8:7 README.md
svn分支
svn分支本质上是主干的copy,不过分支具有版本控制功能,并且和主干相对独立,最后可以将分支合并到主干,称为一个项目。
- 在本地创建一个分支
$ ls
branches/ tags/ trunk/
$ svn copy trunk/ branches/zhanbai
A branches\zhanbai
- 查看状态
$ svn status
A + branches\zhanbai
- 提交新的分支到版本库
svn commit -m 'add zhanbai'
Adding branches\zhanbai
Committing transaction...
Committed revision 9.
- 现在我们开始在 zhanbai 分支进行开发,创建 index.html 文件
$ cd branches/zhanbai/
$ ls
hello.txt index.html README.md
- 将 index.html 加入版本控制,并提交到版本库中
$ svn status
? index.html
$ svn add index.html
A index.html
$ svn commit -m 'add index.html'
Adding index.html
Transmitting file data .done
Committing transaction...
Committed revision 10.
- 切换到 trunk 分支,并更新,然后将 zhanbai 分支合并到 trunk 中
$ svn merge ../branches/zhanbai/
--- Merging r10 into '.':
A index.html
--- Recording mergeinfo for merge of r10 into '.':
G .
- 此时,trunk 中就多了 index.html 文件。然后,将合并号的 trunk 提交到版本库中
$ svn commit -m 'add index.html'
Adding index.html
Committing transaction...
Committed revision 12.
svn标签
$ svn copy trunk/ tags/v1.0
A tags\v1.0
将在 tags 目录下创建 v1.0 目录。
然后查看状态,提交 tag 到版本库中。
$ svn status
A + tags\v1.0
$ svn commit -m 'add v1.0'
Adding tags\v1.0
Committing transaction...
Committed revision 13.
常用
- svn log : 用来展示svn版本、日期、路径
- svn diff : 用来显示特定修改的行级详细信息
- svn cat : 取得特定版本的某文件展示在屏幕上
- svn list : 显示一个目录或者版本存在的文件