svn命令 常见使用

常用命令

1、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)

例如:svn checkout svn://192.168.1.1/pro/domain

简写:svn co

下载指定版本
svn checkout svn://192.168.1.1/pro/domain --revision r543
svn checkout svn://192.168.1.1/pro/domain --revision r543
2、往版本库中添加新的文件
svn add file

例如:svn add test.php(添加test.php)

svn add *.php(添加当前目录下所有的php文件)

3、将改动的文件提交到版本库
svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)

例如:svn commit -m “add test file for my test“ test.php”

简写:svn ci

4、加锁/解锁
svn lock -m “LockMessage“ [--force] PATH

例如:svn lock -m “lock test file“ test.php

svn unlock PATH

5、更新到某个版本
svn update -r m path

例如:

svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最
新版本。

svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)

svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,
修改
 文件,然后清除svn resolved,最后再提交commit)

简写:svn up
6、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)

【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】

2)svn status -v path(显示文件和子目录状态)

第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。

注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。

简写:svn st
7、删除 文件
 
svn delete path -m “delete test fle“

例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”

或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种
 
简写:svn (del, remove, rm)

8、本地的修改成服务器状态
svn revert xxxx_file
svn revert -R xxx_file_dir
svn revert -R * 

通过changelist只提交部分文件

//添加文件
svn cl z_cl -R include/common/file_wrapper.h
svn cl z_cl -R src_code/iot/iot_param.c
//移除文件
svn cl --remove src_code/iot/iot_param.c
svn st
svn ci -m "xxxxx" --cl z_cl

//删除整个changelist 
svn changelist --remove --recursive --cl z_cl .

查看log

svn log -l 5 -v

-l 显示版本个数
-v 显示详细修改文件

# -g参数 显示其他分支合并过来的历史记录
svn log -g
-g [--use-merge-history] : 从合并历史使用/显示额外信息

merge合并分支

svn merge -h
merge: Merge changes into a working copy.
usage: 1. merge SOURCE[@REV] [TARGET_WCPATH]
          (the 'complete' merge)
       2. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]
          (the 'cherry-pick' merge)
       3. merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]
          (the '2-URL' merge)
例如:将 bra_ipc 分支下的改到merge到ipc主分支下
1. 进入到ipc主分区所在目录
2. svn merge svn://192.168.1.10/home/devs/aaa svn://192.168.1.10/home/devs/bra_aaa
3. 按照提示解决冲突
4. 通过commit提交合并后的代码

说明:这里的svn merge source1 source2是需要在source1的分支下做,将source2改动合并到source1
这条命令和图形界面中的from source1 to source2一样;但是图形界面的from...to...不能理解为从...到...,而是 from为起始状态,to为最终状态,他们之间会做diff比较,之后将to的内容更新到from。

其他参见:

svn merge 图形界面操作详解

创建分支

利用 merge 创建分支

1. 在本地 branch 创建分支节点
mkdir test_dir
svn add test_dir
svn st
svn commit -m "创建test文件夹"  或者svn commit -m"create test 文件夹名"               
2. 进 本地test_dir节点
cd test_dir
#merge主分支内容到当前分支(复制一份主干代码到分支上)
 svn merge svn://192.168.1.10/home/devs/branch/xxx/test_dir svn://192.168.1.10/home/devs/trunk/aaa
svn commit -m "创建xxx'ipc"

注意:为了防止开发过程中branch和trunk冲突太多, 所以要经常 merge trunk的内容到branch

合并修改的代码

使用svn merge 合并修改的代码到trunk和上面创建分支的方法是一致的, 只是源和目的地反过来就行

1. 进入本地trunk的节点目录
#更新到本地trunk的代码为最新的
svn up
#merge自己分支的改动内容到本地 trunk;这里我是将 branch/xxx/code节点下的 676版本到677版本的改动 merge到本地 trunk

svn merge -r 676:677 svn://192.168.1.10/smart_home/devs/branch/xxx/code
#可以使用svn st 和 svn diff 来确认修改的内容以及确保已经解决了冲突
svn st 
svn diff

#提交改动到 trunk 服务器端
 svn commit -m "xxx"

出现冲突

Select: (p) postpone, (df) diff-full, (e) edit,

        (mc) mine-conflict, (tc) theirs-conflict,

        (s) show all options: 



(e)  edit             - change merged file in an editor               #直接进入编辑
(df) diff-full        - show all changes made to merged file          #显示更改至目标文件的所有变化
(r)  resolved         - accept merged version of file

(dc) display-conflict - show all conflicts (ignoring merged version)  #显示所有冲突
(mc) mine-conflict    - accept my version for all conflicts (same)    #冲突以本地为准
(tc) theirs-conflict  - accept their version for all conflicts (same) #冲突以服务器为准

(mf) mine-full        - accept my version of entire file (even non-conflicts)#完全以本地为准
(tf) theirs-full      - accept their version of entire file (same)    #完全以服务器为准

(p)  postpone         - mark the conflict to be resolved later        #标记冲突,稍后解决
(l)  launch           - launch external tool to resolve conflict
(s)  show all         - show this list

一般选择使用 p 稍后解决冲突

比对文件,查看现在版本和新版本文件之间的不同,如果不相同则修改成最新的文件内容

之后解决完了再用下面语句(如果未解决并直接使用下面该命令会造成,文件状态和服务器的文件还是不一样,会显示该文件已经修改(文件状态为M)从而导致问题还在)

svn resolve --accept working xxxxxx(C状态的的文件)

版本回退

方法1: 用svn merge
1) 先 svn up,保证更新到最新的版本,如20;
2) 然后用 svn log ,查看历史修改,找出要恢复的版本,如10 。如果想要更详细的了解情况,可以使用svn diff -r 10:20 [文件或目录];
3) 回滚到版本号10:svn merge -r 20:10 [文件或目录],注意版本号之间的顺序,这个叫反向合并;
4) 查看当前工作版本中的文件,如test.cpp和版本号10中文件的差别:svn diff -r 10 test.cpp, 有差别则手动改之;
5) 若无差别,则提交:svn ci -m“back to r 10,xxxxx” [文件或目录]。这时svn库中会生成新的版本,如21。
方法2: 用svn up
前2步如方法1,然后直接 svn up -r 10。当前的工作版本就是版本10了。但是注意,这时svn库中并不会生成新的版本,下次svn up之后,还是会回到当前的版本。
===================================================================
例如:改动已经被提交(commit)用svn merge命令来进行回滚。
回滚的操作过程如下:
1、保证我们拿到的是最新代码:
svn update
假设最新版本号是28。
2、然后找出要回滚的确切版本号:
svn log
假设根据svn log日志查出要回滚的版本号是25,此处的something可以是文件、目录或整个项目
如果想要更详细的了解情况,可以使用svn diff -r 28:25 ""
3、回滚到版本号25:
svn merge -r 28:25 ""
为了保险起见,再次确认回滚的结果:
svn diff ""
发现正确无误,提交。
4、提交回滚:
svn commit -m "Revert revision from r28 to r25,because of ..."
提交后版本变成了29。

设置文件属性

设置只读属性
 svn propset svn:needs-lock 'x' 需要提交的文件名
 
 设置可执行属性
 svn propset svn:executable on test.c
 给当前目录下的所有文件设置可执行权限
 svn propset svn:executable on *
 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值