svn 常用命令:

一、取出代码:

svn checkout https://****/branches/svn_test_r201

二、创建分支:

例如:从 branches/svn_test_r201 创建新分支 svn_test_r202 (svn_test_r202,这个目录不要提前创建

svn copy https://****/branches/svn_test_r201 https://****/branches/svn_test_r202

三、svn add

把readme文件纳入到版本控制中
svn add readme

如果add文件夹,则默认把该文件夹下未纳入版本控制的文件一并纳入控制
svn add doc

如果只想把目录纳入控制,而不想把所有该目录下的文件纳入控制,可以增加non-recursive
svn add doc --non-recursive

一次性增加所有(这种情况下会排除non-recursive的doc目录下的文件)
svn add *

把doc下的文件也一并纳入控制,增加force参数
svn add * --force

遍历当前目录下的所有未添加的文件,添加到版本控制中
svn add . --no-ignore --force

四、svn commit

添加文件
svn commit -m "add file readme"
or
svn ci -m "add file readme"

五、log 操作

查看最新的10 个提交版本

看最新的10行
svn log -l 10

看最新的4行,详细
svn log -v --limit 4

滑动看日志
svn log | less

查看版本之间的日志
svn log -r 274090:274093
svn log -r 274093:274090

查看最新提交的日期:
svn log -l 1 | sed -n "2,1p"
》r6666 | author | 2023-12-26 19:27:50 +0800 (Tue, 26 Dec 2023) | 1 line

svn log -l 1 | sed -n "2,1p" | awk -F " " '{print $1" "$3" "$5}'
》version author date

svn log -l 1 | sed -n "2,1p" | awk -F " " '{print $5}'
》2023-12-26

svn log -l 1 | sed -n "2,1p" | awk -F " " '{print $5}'| sed 's/-//g'
》20231226

六、diff 操作

(版本号之前的 “r”,带不带都行)

274903 版本 和上一个版本的差异

cd  svn_test_r201
svn diff -c 274903

274901 版本 和274903版本的差异

cd  svn_test_r201
svn diff -r 274901:274903

274901 版本 和274903版本的文件差异(后面加文件名)

cd  svn_test_r201
svn diff -r 274901:27490 diff.txt

文件的差异

svn diff -r 版本号 文件名
svn diff -r HEAD 文件名   #本地与最新版本的区别

目录的差异

svn diff https://****/branches/svn_test_r201 https://****/branches/svn_test_r202
带版本号对比:
svn diff https://****/branches/svn_test_r201@274090 https://****/branches/svn_test_r202@274093

七、merge操作:

假设:有两个分支

分支1:https://****/branches/svn_test_r201

分支2:https://****/branches/svn_test_r202

(如果svn_test_r202有修改,大概率有冲突)

merge 分支2 的代码到 分支1(反之,换个目录,同样操作)

第一种:svn merge from to

例如:合并 svn_test_r202 的所有改变 到 svn_test_r201

cd  svn_test_r201
svn merge https://****/branches/svn_test_r202

第二种:svn merge -c 版本号 from to

例如:合并 版本号为 274894 的 svn_test_r202 的改变 到 svn_test_r201

cd  svn_test_r201
svn merge -c 274894 https://****/branches/svn_test_r202

第三种:svn merge -r 版本号:版本号 from to

例如:合并 版本号 274891到274893 的 svn_test_r202 的更改 到 svn_test_r201

cd  svn_test_r201
svn merge -r 274891:274893 https://****/branches/svn_test_r202

 八、代码回滚

回滚到制定的版本上:

svn log 找到最新的版本号,274906

比如:274906 要回滚到 274902

cd  svn_test_r201
svn merge -r 274906:274902 https://****/branches/svn_test_r202

九、删除分支

svn rm https://****/branches/svn_test_r202

十、解决冲突

举例:svn up(出现冲突)

[*****]$ svn up
在 “readme” 中发现冲突。
选择: (p) 推迟,(df) 显示全部差异,(e) 编辑,
        (mc) 我的版本, (tc) 他人的版本,
        (s) 显示全部选项:

1、根据选项:e现在编辑 or mc接受我的版本 or tc接受他人的版本;(等于是直接手动解决)

2、或者选择:p 推迟 (以下都是推迟后,纯手动解决)

2.1 推迟后手动修改冲突,并提交(等同于 选项 e)

2.1.1、推迟后打开冲突文件 readme

$ cat sandwich.txt
Top piece of bread
Mayonnaise
Lettuce
Tomato
Provolone
<<<<<<< .mine(下面是本地的修改,<<< 和 === 之间)
Salami
Mortadella
Prosciutto
======= (下面是远程服务器,别人提交的修改,==== 和 >>>> 之间)
Sauerkraut
Grilled Chicken
>>>>>>> .r2
Creole Mustard
Bottom piece of bread

2.1.2 、去掉别人的修改,或者保留删除,自己手动合并代码:

Top piece of bread
Mayonnaise
Lettuce
Tomato
Provolone
Salami
Mortadella
Prosciutto
Creole Mustard
Bottom piece of bread

2.1.3、使用命令 svn resolve 移除文件的冲突状态后; 接下来就可以提交修改了

$ svn resolve --accept working readme
Resolved conflicted state of 'readme'
$ svn commit -m "modify working"

      --accept=working :告诉 Subversion 把文件的当前内容作为冲突解决后的状态;

     svn resolve 会删除目录下的三个临时文件, 将用户指定的 文件版本作为冲突解决后的最终版。

2.2 全丢弃自己的修改(接受别人的修改,等同于选项 tc)

svn resolve --accept theirs-full readme

2.3 丢弃当前的所有修改 (等效于 2.2的操作,等同于选项 tc)

svn revert readme

2.3 接受本地mine 的更改(等同于 选项 mc )

svn resolve –accept mine-full readme
posted on 2022-03-30 11:20  细雨微光  阅读(1351)  评论(0编辑  收藏  举报