Java第四十六天,Svn系列(三),Svn常用命令

svn 中文命令大全网站:

命令参考 Archives - SVN中文网

一、用户认证

1.禁用密码缓存

[svn子命令] --no-auth-cache

#该命令为全局命令可以加在任意命令后
#你希望永远关闭凭证缓存,你可以编辑你的运行运行配置区的 ~/.subversion/config 文件,只需要把 store-auth-creds 设置为 no ,这样在影响的主机上的Subversion操作就不会有凭证缓存在磁盘。通过修改系统级的运行配置区,这个功能也会影响到本机的所有用户

2.用其他身份认证

[svn子命令] --username [用户名] --password [用户密码]
#该命令为全局命令,可以加在任意命令之后

二、帮助命令

#用来查询指定命令的语法参数以及行为方式
svn help <命令>

三、导入与导出

注意:

这里的导入和导出是针对版本库而言的

尽管 Subversion 的灵活性允许你自由布局版本库,但行业内部有一套推荐的方式——创建一个 trunk 目录来保存开发的“主线”,一个 branches目录存放分支拷贝,tags目录保存标签拷贝

1. 文件导入版本库

注意:

指定url的操作方式有一些区别,因为在使用工作拷贝的运作方式时,工作拷贝成为一个“集结地”,可以在提交之前整理组织所要做的修改,直接对URL操作就没有这种奢侈,所以当你直接操作URL的时候,所有以上的动作代表一个立即的提交目录树的修改到版本库

svn import ===> 属于直接对URL进行操作

svn add     ===> 属于对工作拷贝的操作

(1)svn import

svn import是将未版本化文件导入版本库的最快方法,会根据需要创建中介目录,它不需要一个工作拷贝,指定的文件会直接提交到版本库

svn import -m "自定义信息" <待导入的文件或目录> <版本库地址>


#eg 将当前目录下的 3.txt 导入到 版本库根目录下,导入后的文件名也叫 3.txt
svn import -m "第一次导入" 3.txt https://DESKTOP-0UI1LSE/svn/data/3.txt

(2)svn add

将文件、目录或者符号链添加到版本库;注意,如果提交的是目录,目录中所有的内容也会预定添加进去,如果你只想添加目录本身,请使用如下参数

-non- recursive(-N)

svn add [文件或目录]

#执行此命令后,需要执行 svn commit 命令才可以将添加的文件导入到版本库

2.初始化检出

svn checkout

svn checkout 从版本库取出一个新拷贝开始使用,这样会在本机创建一个项目的"本地拷贝”,这个拷贝包括了命令行指定版本库中的HEAD(最新的)版本

注意:

svn checkout 可以取出整个 trunk(或其他)目录,也可以通过输入特定URL取出任意分支的任意深度的子目录

svn checkout <版本库地址>[子目录路径]



#注意:
#1.命令语法中各种括号的含义如下
[]:内的内容意思是:可写可不写
{}:那就必须要在{}内给出的选择里选一个。
<>:表示必选

#2.版本库地址与子目录路径是一个统一的信息,这里分开写是为了告诉读者 svn checkout 既可以导出整个版本库,也可以只导出版本库中指定目录



#eg
svn checkout https://DESKTOP-0UI1LSE/svn/data/

3.导出

导出一个干净的目录树

第一种从版本库导出干净工作目录树的形式是指定URL,如果指定了修订版本REV,会导出相应的版本,如果没有指定修订版本,则会导出HEAD,导出到PATH。如果省略PATHURL的最后一部分会作为本地目录的名字

从工作拷贝导出干净目录树的第二种形式是指定PATH1PATH2,所有的本地修改将会保留,但是不再版本控制下的文件不会拷贝

svn export -r [版本号] [版本库URL] [导出目的路径]
#将指定版本库或版本库中部分目录的指定版本导出到指定的路径

#eg
svn export -r 1 https://DESKTOP-0UI1LSE/svn/data/ data/

四、工作周期常用命令

1.svn update --->更新工作拷贝

更新工作拷贝得到所有其他人这段时间作出的修改使当前工作拷贝与最新的版本同步

svn update

#当服务器通过 svn update 将修改传递到你的工作拷贝时,每一个项目之前会有一个字母,来让你知道 Subversion 为保持最新对你的工作拷贝作了哪些工作;这些字母的详细含义如下

A = 已将一个文件添加到您的工作副本中
C = 一个文件已合并了必须手动解决的冲突
D = 已从您的工作副本中删除一个文件
G = 已成功合并了一个文件
I = 已忽略的文件
L = 锁定
M = 本地已修改但未提交到版本库
R = 已替换您的工作副本中的一个文件
U = 已更新您的工作副本中的一个文件

2.目录树结构的修改

可以对工作拷贝做出两种修改:文件修改和目录树修改。如果只是修改版本库中已经存在的文件,在提交之前,不必使用下面的任何一个命令,svn会自动识别到

(1)svn add

将文件、目录或者符号链添加到版本库;注意,如果提交的是目录,目录中所有的内容也会预定添加进去,如果你只想添加目录本身,请使用如下参数

-non- recursive(-N)

svn add [文件或目录]

#执行此命令后,需要执行 svn commit 命令才可以将添加的文件导入到版本库

(2)svn delete

将文件、目录或者符号链从版本库中删除,如果是文件,它马上从工作拷贝中删除,如果是目录,不会被删除,但是 Subversion准备好删除了,当你提交你的修改,就会在你的工作拷贝和版本库中被删除

svn delete [文件或目录]

#执行此命令后,需要执行 svn commit 命令才可以将版本库中的指定文件删除

(3)svn copy

建立一个新的项目obj作为source的复制品,会自动预定将obj添加,当在下次提交时会将obj添加到版本库,这种拷贝历史会记录下来, svn copy并不建立中介目录

svn copy [源文件] [目标文件]

#执行此命令后,需要执行 svn commit 命令才可以将复制的文件导入到版本库

(4)svn move

这个命令与运行 svn copy source obj; svn delete source 完全相同,obj作为source的拷贝准备添加,source已经预定被删除, svn move不建立中介的目录

svn move [源文件或目录] [目标文件或目录]

#执行此命令后,需要执行 svn commit 命令才可以将移动的文件导入到版本库,并删除源文件

(5)svn mkdir

这个命令同运行 mkdir filedir; svn add filedir相同;也就是创建一个叫做 filedir 的文件,并且预定添加到版本库

svn mkdir [文件夹名]

#执行此命令后,需要执行 svn commit 命令才可以将新建的文件夹添加到版本库

3.查看修改

(1)svn status

svn status

#该命令会显示上次提交到现在为止,当前工作拷贝所做的修改



svn status -v
svn status --verbose

#第一列显示文件或目录的状态,第二列显示一个工作版本号,第三和第四列显示最后一次修改的版本号和修改人



svn status -u
svn status --show-updates
#上面的 svn status 调用并没有联系版本库,只是与.svn中的原始数据进行比较的结果,但是如果使用--show-updates(-u)参数,它将会联系版本库为已经过时的数据添加新信息

(2)svn diff

svn diff

#该命令会显示上次提交到现在为止,当前工作拷贝所做的详细修改

4.取消本地修改 ---> svn revert

该命令的效果与删除指定目录或文件然后执行 svn update -r 完全一样,但是,如果使用 svn revert 不必通知版本库就可以恢复文件

svn revert [待恢复的目录或文件]

5.解决冲突

(1)预测冲突

因为 svn status -u、svn status --show-updates 命令会将当前工作拷贝中的文件与版本库最新版进行比较,然后通过比较

1.版本库的修订版本号与本地工作拷贝中的修订版本号就可以预判文件是否可能发生冲突

2.查看文件的状态可以预判文件是否发生冲突(C表示该文件产生冲突),如果发生冲突则需要手动解决

(2)手动解决冲突

小于号、等于号和大于号串是冲突标记,并不是冲突的数据

(3)删除冲突标记

svn resolved [已经解决完冲突的文件名]


#注意
#如果觉得自己对冲突文件的解决不合理,可以使用 svn revert [冲突文件名] 来撤销对冲突文件的修改

(4)提交

svn commit -m "信息"
svn commit -F [文件]

五、分支与合并

1.分支

(1)创建分支

① 方法一

#1.根据 url checkout出所有的文件
#注意
#(1)如果没有指明存储的本地目录,则默认下载到当前目录
#(2)
svn checkout <svn 项目版本库url地址> [下载后存放的本地目录]

#2.进入到工作拷贝中新建分支
#注意
#执行 svn status 后你会看到,新的目录是准备添加到版本库的,但是也要注意A后面的″+"号,这表明这个准备添加的东西是一份备份,而不是新的东西。当你提交修改, Subversion会通过拷贝 trunk 建立分支目录,而不是通过网络传递所有数据
cd [下载后存放的本地目录]
svn copy trunk branches/[新的分支名]

#3.提交新建立的分支
svn commit -m "提交备注信息"

② 方法二

svn copy <版本库URI地址>/trunk <版本库URI地址>/branches/<新的分支名> -m "新建分支备注"

#注意
#这种建立分支的方式只是执行了一个立即提交。不需要取出版本库一个庞大的镜像,也不需要有工作拷贝

(2)拉取分支

svn checkout <版本库URI地址>/branches/<分支名>

#注意
#从以上知识我们知道,分支只不过是版本库其中一个目录的一个镜像罢了,当你提交修改时,并不影响 trunk 的工作拷贝,因为它们是版本库中两个不同的目录。因为拷贝机制, Subversion 的分支是以普通文件系统目录存在的,这与其他版本控制系统不同,它们都为分支定义了另一维度的“标签"。

2.切换分支

svn switch -r [修订版本号] [目的分支的版本库URI]

#注意
#切换后通过 svn info 验证是否切换成功

3.合并

(1)svn merge

这个命令的结果非常类似 svn diff 命令,两个命令都可以比较版本库中的任何两个对象并且描述其区别;但 svn merge 不是打印区别到你的终端,它会直接作为本地修改作用到你的本地拷贝。

Subversion 并不记录任何合并操作,当你提交本地修改,版本库并不能判断出你是通过 svn merge还是手工修改得到这些文件。这意味着你必须手工的记录这些信息。最佳的方式是使用提交日志信息,推荐你在日志信息中说明合并的特定版本号(或是版本号的范围),之后,你可以运行svn log来查看你的分支包含哪些修改,一定要记住合并的工作拷贝没有本地更改,并且最近已更新过。

当合并时, Subversion 如果注意到这个文件已经有了相应的修改,而不会作任何操作,但是如果已经应用的修改又被修改了,你会得到冲突

#1.合并同一分支下的代码
#比较指定版本库下 修订版号M 和修订版号N(第一个命令的 N=M-1)的差别,并将差别拷贝到指定工作目录
#注意:
#合并操作并不会改变当前工作目录的修订版本号
#如果省略修订版本号,缺省是HEAD
#其中的 版本库URI地址 也可以是更为详细的文件或目录地址
svn merge [-c M] [版本库URI地址] [工作拷贝路径]
svn merge [-r N:M] [版本库URI地址] [工作拷贝路径]


#在进行合并之前预览一下合并后的结果
#注意
#该命令并不会进行合并操作,仅仅是预览合并结果
#其中的 版本库URI地址 也可以是更为详细的文件或目录地址
svn merge --dry-run [-c M] [版本库URI地址] [工作拷贝路径]
svn merge --dry-run [-r N:M] [版本库URI地址] [工作拷贝路径]


#2.合并不同分支或相同分支下的代码
#注意
#其中的 版本库URI地址 也可以是更为详细的文件或目录地址
svn merge [被比较版本库URI地址@修订版本号]  [比较版本库URI地址@修订版本号] [工作拷贝路径]

六、其他常用命令

1.svn log

提供版本库历史信息

svn log
#查看版本日志信息

svn log -r [版本号]
#查看指定版本的日志信息

svn log -r [开始版本号:结束版本号]
#svn 会根据前后参数的大小智能识别顺序/倒叙输出版本历史信息

svn log -r '{开始日期}:{结束日期}'
# 查看指定日期段的提交日志记录
# 例如
# svn log -r '{2022-03-01}:{2022-03-08}'

svn log <文件或目录或URL>
# 查看单个文件或目录的日志历史

svn log --verbose
svn log -v
# 查看更加详细的版本日志信息

svn log -l [日志条数]
# 查看最近 [日志条数] 条日志信息 

2.svn diff

检查本地修改、比较工作拷贝与版本库、比较版本库与版本库

svn diff
#当不使用任何参数调用时,svn diff将会比较你的工作文件与缓存在.svn的"原始"拷贝


svn diff <指定文件>
#比较当前工作文件与原始拷贝下指定文件的区别


svn diff --summarize
#查看哪些文件被改动(不详细列出被改动的内容) 


svn diff -r [指定版本号]
#比较当前工作文件与指定版本

svn diff -r [指定版本号] <指定文件>
#比较当前工作文件与指定版本下指定文件的区别

svn diff -r [被比较版本号:比较版本号]
#比较任意两个版本的区别

svn diff -r [被比较版本号:比较版本号] <指定文件>
#比较任意两个版本下指定文件的区别

svn diff -c [指定版本号]
svn diff -c [指定版本号] <指定文件>
svn diff -c -[指定版本号]
svn diff -c -[指定版本号] <指定文件>
# "-c M" 选项与 "-r N:M" 等价,其中N = M-1
# "-c -M" 选项与 "-r M:N" 等价,其中N = M-1

svn diff -r '{开始日期}:{结束日期}'
# 查看指定日期段内的不同
# 例如
# svn diff -r '{2022-03-01}:{2022-03-08}'

3.svn cat

查看指定版本号下指定文件

svn cat [文件名]
#查看指定文件

svn cat -r [版本号] [文件名]
#查看指定版本号下指定文件

4.svn list

遍历目录信息

svn list <目录或URL> 
#遍历目录;如果是URL,则可以在不下载文件到本地目录的情况下来查看目录中的文件

svn list -v <目录或URL> 
svn list --verbose <目录或URL> 
#更详细的遍历目录;如果是URL,则可以在不下载文件到本地目录的情况下来查看目录中的文件

svn list -r [版本号] <目录或URL> 
#遍历指定版本号下的指定目录;如果是URL,则可以在不下载文件到本地目录的情况下来查看目录中的文件

5.svn info

查看工作目录信息

svn info

6.回滚到任意版本

svn update --revision [版本号]
svn update -r [版本号]
#更新项目到指定的版本号

svn checkout --revision [版本号] [版本库URL]
svn checkout -r [版本号] [版本库URL]
#检出指定版本库的指定版本修订号下的项目

7.svn cleanup

当 Subversion改变你的工作拷贝(或是.svn中的任何信息),它会尽可能的小心,在修改任何事情之前,它把意图写到日志文件中去,然后执行log文件中的命令,并且执行过程中在工作拷贝的相关部分保存一个锁——防止 subversion客户端在变更过程中访问工作拷贝。然后删掉日志文件;
它查找工作拷贝中的所有遗留的日志文件,删除进程中工作拷贝的锁。如果 Subversion告诉你工作拷贝中的一部分已经“锁定”了,你就需要运行这个命令了。同样, svn status将会使用L标示锁定的项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT蓝月

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值