Jade Dungeon

subversion

subversion基本操作

签出

第一次签出代码:

$ svn checkout --username=<username> <url> <localpath> 

忽略文件与目录

未加入控制的文件夹

svn propset svn:ignore 'test' .
svn update
svn commit -m "add a ignore dir"

已经加入版本控制的文件夹

svn export test test_bak
svn rm test
svn commit -m "delete test"
mv test_bak test
svn propset svn:ignore 'test' .
svn update
svn commit -m "add a ignore dir"

多个文件

如果想要忽略一个目录下多个文件夹的话,需要有一点点技巧,如下

svn propset svn:ignore 'test
test1
test2' .

即每一个文件夹要单独另起一行

更新代码

更新代码 :

svn update 

修改

修改代码:

svn add foo    # 添加文件或目录
svn add -n foo # 只添加目录,不添加目录内容
 
svn copy foo bar           # 复制内容,下次提交时添加
svn copy --parents foo bar # 复制内容时自动加上中间目录
 
svn move foo bar           # 移动
svn move --parents foo bar # 移动时自动加上中间目录
 
# mkdir blort ; svn add blort
svn mkdir blort 

检查修改

概况

svn status                 # 浏览所有的修改
svn status stuff/fish.c    # 浏览指定的文件或路经 
  1. A 新加入的内容
  2. C 冲突的内容
  3. D 删除的内容
  4. M 已经修改的内容

详细

svn status -v   # 在本地显示所有的(包括有修改的和没有修改的)状态
 
# 标记   版本号  最后修改的版本号    修改人     文件名
M       44     23               sally     README
        44     30               sally     INSTALL
M       44     20               harry     bar.c
 
svn status -u -v   # 与远程比对所有的(包括有修改的和没有修改的)状态
 
# 标记  远程有更新   版本号  最后修改的版本号    修改人     文件名
M          *       44     23               sally     README
                    44     30               sally     INSTALL
M                   44     20               harry     bar.c
# 如果现在运行svn update,README会被更新 

查看修改文件内容

检查文件修改的内容:

svn diff                    # 显示所有被修改的详细信息
svn diff -r m:n             # 对比两个指定的版本
svn diff > patchfile        # 生成补丁 

取消修改

取消对某文件的修改:

snv revert README 

冲突处理

冲突处理:

$ svn update
U INSTALL
G README
Conflict discovered in 'bar.c'.
Select: (p) postpone, (df) diff-full, (e) edit,
(h) help for more options: 

当更新代码时,U表示文件更新,G表示无冲突地合并。但有冲突的情况要用户指定 如何处理:

postpone    # 保持冲突状态
diff        # 显示区别
edit        # 用环境变量Editor指定的编辑器编辑
resolved    # 编辑完后,声明冲突已经解决
mine-full   # 放弃更新,只用本地文件
theirs-full # 放弃本地,只有服务器
launch      # 启动一个外部程序来解决冲突,这需要一点预先准备
help        # 显示帮助 

提交修改

svn commit -m "message" 

导出

导出没有版本的代码:

svn export -r 版本号 版本路径 输出目录 

例子:

svn export -r 20260 svn://333.333.333.333/prg/jsp ~/tmp/prg/source 

分支

创建分支

从主干创建一个分支:

$ svn copy http://svn.example.com/repos/calc/trunk \
           http://svn.example.com/repos/calc/branches/my-calc-branch \
      -m "Creating a private branch of /calc/trunk."

取出分支

$ svn checkout http://svn.example.com/repos/calc/branches/my-calc-branch

切换到分支

$ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch

比较两个不同的分支

svn diff --username=qwshan \
	https://hpfs01.handpay.com.cn:8443/svn/mallModule_mvn/hpVoucherService/branches/hpVoucherService-voucher0303 \
	https://hpfs01.handpay.com.cn:8443/svn/mallModule_mvn/hpVoucherService/trunk

删除所有的.svn目录

find . -type d -name ".svn" | xargs rm -rf