赞
踩
Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。
这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。
path 是服务器上的目录。
svn checkout path 例如:svn checkout svn://192.168.1.1/pro/domain 简写:svn co
这样将把你的工作拷贝放到subv而不是和前面那样放到trunk
file是某个文件或者某个目录,如果添加所有的文件则用点“.”表示。
svn add file 例如:svn add test.php svn add *.php(添加当前目录下所有的php文件) svn add . (表示添加所有文件)
提交文件到服务器。
svn commit -m “LogMessage“ [-N] [--no-unlock] path(如果选择了保持锁,就使用–no-unlock开关) 例如:svn commit -m “add test file for my test” test.php 简写:svn ci
一般步骤:
step-1:svn update
step-2:svn add file、svn delete file
step-3:svn commit -m “提交文件到远程服务器”
加锁/解锁命令。
svn lock -m “LockMessage” [--force] path 例如:svn lock -m “lock test file” test.php svn unlock path
更新版本命令。
svn update -r m path 例如: 1、 svn update 后面没有目录,默认更新当前目录及子目录的所有文件到最新版本。 2、 svn update -r 200 test.php (将版本库中的文件test.php还原到版本200) 简写:svn up
update命令还可以进行文件恢复。 (1)不小心写错了很多东西,想撤销所写的东西(已经把修改提交到服务器)svn update -r 版本号
(2)不小心删错了文件,想把文件恢复回来(已经把删除提交到服务器)
svn update -r 版本号
svn status -v path svn status path 简写:svn st
显示文件和子目录的状态。 第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。 注:svn status
、svn diff
和 svn revert
这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
文件状态描述
‘ ‘ 没有修改
I 被忽略
R 被替换
~ 受控文件被其他文件阻隔
"!"表示:本地执行了"rm -rf",但是未执行"svn del"的状态。
"?"表示:本地新加了一个文件,但是未执行"svn add"的状态。
"A"表示:本地新加了一个文件,且执行了"svn add"的状态。
"X"表示:执行了"svn external"的状态。
"D"表示:本地执行了"rm -rf",且执行了"svn del"的状态。
"M"表示:本地修改了该文件时的状态。
"C"表示:冲突状态,是重点关注状态之一。
————————————————
删除文件。
svn delete path -m “delete test file” 例如: 1、删除远程服务器文件 svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file” 2、删除本地文件,然后提交 svn delete test.php, 然后再svn ci -m “delete test file”,推荐使用这种 简写:svn (del, remove, rm)
查看日志。
svn log path 例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化。
如果在工程的根目录使用该命令可能会列出非常多的日志内容,因此为了查找方便,我们通常会使用一些附加参数来配合svn log命令的使用。
svn log -r {2018-07-03}:{2018-07-09}
显示从r199687到r199385范围的所有带jaspersong字符串的log (grep下面介绍)
svn log -r r103546:r104414 | grep -A 2 jaspersong
这里说明一下grep -A 2 "jasper"
|中A后面数字的差别,不同的数字表示显示的log版本信息不同的行数。
此命名用得比较多。
svn log -r r196674 -v
svn log -v --stop-on-copy $URL
查看文件详细信息。
例如:svn info test.php
默认将修改的文件与基础版本比较。
例如:svn diff test.php svn diff -r m:n path(对版本m和版本n比较差异) 例如:svn diff -r 200:201 test.php 简写:svn di
Linux命令行下将两个版本之间的差异合并到当前文件。
svn merge -r m:n path 例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下。
Linux命令行下SVN 帮助。
svn help ci
svn 冲突
解决冲突
第一种,利用update的选项进行冲突解决,也就是说不管当前拷贝副本是否是最新版本,都使用—accept参数作为冲突处理方式
--accept ARG : specify automatic conflict resolution action
('postpone', 'base', 'mine-conflict',
'theirs-conflict', 'mine-full', 'theirs-full',
'edit', 'launch')
(p) postpone - mark the conflict to be resolved later //让文件在更新完成之后保持冲突状态。
(df) diff-full - show all changes made to merged file //使用标准区别格式显示base修订版本和冲突文件本身的区别。
(e) edit - change merged file in an editor //用你喜欢的编辑器打开冲突的文件,编辑器是环境变量EDITOR设置的。
(r) resolved - accept merged version of file //完成文件编辑之后,通知svn你已经解决了文件的冲突,它必须接受当前的内容—从本质上讲就是你已经“解决了”冲突。
(mf) mine-full - accept my version of entire file (ignore their change//丢弃新从服务器接收的变更,并只使用你查看文件的本地修改。
(tf) theirs-full - accept their version of entire file (lose my changes)//丢弃你对查看文件的本地修改,只使用从服务器新接收的变更。
(l) launch - launch external tool to resolve conflict//启动一个外置程序来执行冲突解决,这需要一些预先的准备。
(h) help - show this list //显示所有在冲突解决时可能使用的命令。
举例 :
svn update --accept tf foo.c
svn resolve --accept mf foo.c
svn resolve --accept ACTION PATH | svn resolve --accept mf foo.c | mf:放弃服务器 tf:放弃本地 |
-----------------------------------
显示path目录下的所有属于版本库的文件和目录。
简写:svn ls
下面两种情况都可以用revert命令恢复。
(1)不小心写错了很多东西,想撤销所写的东西(还未把修改提交到服务器)
(2)不小心删错了文件,想把文件恢复回来(还未把删除提交到服务器) 注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录。【还不没实践过,不知道不会恢复本地删除的目录是什么意思】
移除工作副本的目录或文件的“冲突”状态。
用法: svn resolved path
注意: 【本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 path 可以再次提交。】
创建分支参考资料: https://www.cnblogs.com/huang0925/p/3254243.html svn 命令行创建和删除 分支和tags_svn 分支 命令_steven_yzx的博客-CSDN博客 linux下svn服务器搭建及创建分支_llinux 创建svn分支_minmin很潇洒的博客-CSDN博客
从主干上创建分支。
svn cp -m "create branch" http://svn_server/xxx_repository/trunk http://svn_server/xxx_repository/branches/br_feature001
获得分支
svn co http://svn_server/xxx_repository/branches/br_feature001
主干合并到分支
cd br_feature001 svn merge http://svn_server/xxx_repository/trunk
分支合并到主干 一旦分支上的开发结束,分支上的代码需要合并到主干。SVN中执行该操作需要在trunk的工作目录下进行。命令如下:
cd trunk svn merge --reintegrate http://svn_server/xxx_repository/branches/br_feature001
创建分支
svn copy http://example.com/repos/project/trunk http://example.com/repos/project/branches/beta
合并分支到主干 在分支上,获取刚开始的版本号
svn log --stop-on-copy http://example.com/repos/project/branches/search_collect_1108
如得到版本号为:12461
在分支上,获取最新的版本号
svn up
如得到版本号为:12767
切换到主干,然后执行下面命令(后面的路径为,分支的路径。)
svn merge -r 12461:12767 http://example.com/repos/project/branches/search_collect_1108
查找到分支版本 方法一:进入分支目录
cd branch svn log --stop-on-copy
最后一个r11340就是创建分支时的reversion
方法二: 进入主干目录
cd trunk svn -q --stop-on-copy 分支URL # 这条命令会查询出自创建分支以后分支上的所有修改,最下面的那个版本号就是我们要找的版本号. 示例:svn log -q --stop-on-copy svn://192.168.1.177/tags/beta_2009_12_24
合并到主干 命令:svn -r 分支版本号:HEAD 分支的URL 解释:HEAD为当前主干上的最新版本
示例: cd trunk svn merge -r 12:HEAD svn://192.168.1.177/tags/beta_2009_12_24
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。