客户端cli的使用
WC:Working Copy 你的工作区
将文件或目录版本化,这样下一次提交到存储库的时候,他们就都会被提交上去。能实现版本化的命令有:
add
1.import
是否访问存储库:是
格式:
import [PATH] URL
选项:
Valid options:
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
-N [--non-recursive] : obsolete; try --depth=files or --depth=immediates 已经废弃;尝试--depth=files或--depth=immediates标志
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--auto-props : enable automatic properties 启用自动属性
--force : force operation to run 强制操作运行
--no-auto-props : disable automatic properties 禁用自动属性
-m [--message] ARG : specify log message ARG 指定日志信息(即注释)
-F [--file] ARG : read log message from file ARG 从文件ARG中读取日志信息
--force-log : force validity of log message source 强制日志消息源的有效性
--editor-cmd ARG : use ARG as external editor-cmd 使用ARG作为外部编辑器
--encoding ARG : treat value as being in charset encoding ARG 将值编码为ARG字符集编码格式的值
--with-revprop ARG : set revision property ARG in new revision using the name[=value] format
使用name[=value]格式在新版本中设置修订属性ARG
--no-ignore : disregard default and svn:ignore and svn:global-ignores property ignores
忽略默认值和svn:ignore和svn:global-ignores属性忽略 Global options:
--username ARG : specify a username ARG 指定用户名为ARG
--password ARG : specify a password ARG (caution: on many operating systems, other users will be able to see this)
指定密码为ARG(警告:在许多操作系统上,其他用户将能够看到这一点)
--password-from-stdin : read password from stdin 从标准输入中读取密码
--no-auth-cache : do not cache authentication tokens 不存储验证令牌
--non-interactive : do no interactive prompting (default is to prompt only if standard input is a terminal device)
不要进行交互提示(默认情况下,只有在标准输入是终端设备时才会提示)
--force-interactive : do interactive prompting even if standard input is not a terminal device
即使标准输入不是终端设备,也会有交互提示
--trust-server-cert : deprecated; same as --trust-server-cert-failures=unknown-ca
已弃用,与--trust-server-cert-failures=unknown-ca的功能相同
--trust-server-cert-failures ARG : with --non-interactive, accept SSL server certificates with failures; 与--non-interactive标志一起接受SSL服务器证书与故障;
ARG is comma-separated list of ARG是一个逗号分隔的列表
'unknown-ca' (Unknown Authority), 包含“Unknown -ca”(未知权限)
'cn-mismatch' (Hostname mismatch), “cn-mismatch”(主机名错配)
'expired' (Expired certificate), “expired”(过期证书)
'not-yet-valid' (Not yet valid certificate) “Not -yet-valid”(还不是有效证书)
'other' (all other not separately classified certificate errors). “other”(所有其他未单独分类的证书错误)
--config-dir ARG : read user configuration files from directory ARG 从目录中读取用户配置文件
--config-option ARG : set user configuration option in the format:FILE:SECTION:OPTION=[VALUE]
在格式FILE:SECTION:OPTION=[VALUE]中设置用户配置选项
For example:servers:global:http-library=serf
将未版本化的文件或树[PATH]提交到存储库URL中
将会递归地将路径的副本提交到URL。如果路径被省略,将假设使用的是 '.',即本地当前路径。
根据自己的需要在存储库中创建父目录。如果[PATH]是一个目录,则目录的内容直接添加到URL下。
如果指定了--force,则忽略设备文件和管道等不可版本项。
举例:
userdeMBP:~ user$ svn import /Users/user/centos7-virtualbox svn://localhost/myCode/centos7 --username=boss --password=00000 -m "初始化导入centos7的vagrantfile文件"
Adding centos7-virtualbox/.vagrant
Adding centos7-virtualbox/.vagrant/machines
Adding centos7-virtualbox/.vagrant/machines/default
Adding centos7-virtualbox/.vagrant/machines/default/virtualbox
Adding centos7-virtualbox/.vagrant/machines/default/virtualbox/vagrant_cwd
Adding centos7-virtualbox/.vagrant/rgloader
Adding centos7-virtualbox/.vagrant/rgloader/loader.rb
Adding centos7-virtualbox/Vagrantfile
Committing transaction...
Committed revision .
本例子就是将本地的文件目录/Users/user/centos7-virtualbox提交到svn://localhost/myCode/centos7目录中中,用户名为boss,密码为00000,注释为“初始化导入centos7的vagrantfile文件”
2.checkout(缩写为co)
是否访问存储库:否
格式:
checkout URL[@REV]... [PATH]
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订数量
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
-N [--non-recursive] : obsolete; try --depth=files or --depth=immediates 已经废弃;尝试--depth=files或--depth=immediates标志
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--force : force operation to run 强制操作运行
--ignore-externals : ignore externals definitions 忽略外部定义 Global options: //与上面相同,在此省略
从存储库中检出工作副本到指定的PATH下
举例:
userdeMBP:~ user$ svn checkout svn://localhost/myCode --username=boss --password=00000 /Users/user/foo
A foo/centos7
A foo/centos7/.vagrant
A foo/centos7/.vagrant/machines
A foo/centos7/.vagrant/machines/default
A foo/centos7/.vagrant/machines/default/virtualbox
A foo/centos7/.vagrant/machines/default/virtualbox/vagrant_cwd
A foo/centos7/.vagrant/rgloader
A foo/centos7/.vagrant/rgloader/loader.rb
A foo/centos7/Vagrantfile
Checked out revision .
本例子就是从svn://localhost/myCode存储库中得到所有的存储内容并放到本地的/Users/user/foo目录下
3.commit (ci)
是否访问存储库:是
格式:
commit [PATH...]
⚠️默认必须提供日志信息,即使用-m
选项:
Valid options:
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
-N [--non-recursive] : obsolete; try --depth=files or --depth=immediates
已经废弃;尝试--depth=files或--depth=immediates标志
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--targets ARG : pass contents of file ARG as additional args 将文件ARG的内容作为附加参数传递
--no-unlock : don't unlock the targets 不要解锁目标
-m [--message] ARG : specify log message ARG 指定日志信息为ARG
-F [--file] ARG : read log message from file ARG 从文件ARG中读取日志信息
--force-log : force validity of log message source 强制日志消息源的有效性
--editor-cmd ARG : use ARG as external editor 使用ARG作为外部编辑器
--encoding ARG : treat value as being in charset encoding ARG 将值编码为ARG字符集编码格式的值
--with-revprop ARG : set revision property ARG in new revision using the name[=value] format
使用name[=value]格式在新版本中设置修订属性ARG
--changelist [--cl] ARG : operate only on members of changelist ARG 只对更改列表,即ARG成员进行操作
--keep-changelists : don't delete changelists after commit 提交后不要删除更改列表
--include-externals : also operate on externals defined by svn:externals properties
还对由svn:externals属性定义的外部性进行操作 Global options: //与上面相同,在此省略
将更改从工作副本发送到存储库
必须提供日志消息,但它可以是空的。如果--message或--file选项不提供此选项,则将启动编辑器。
如果任何目标是(或包含)锁定的项,则在成功提交之后将解锁这些项,除非--no-unlock。
如果--include-externals给定,还提交递归到达的外部文件和目录。不要使用固定的修订提交外部文件。
举例:
userdeMBP:foo user$ svn commit -m "修改了Vagrantfile文件的config.vm.box_check_update配置项"
Sending centos7/Vagrantfile
Transmitting file data .done
Committing transaction...
Committed revision .
当你对相应的文件进行了修改,并且想要讲修改上传时就使用commit,然后修改处的修订版本号就是变成2,并且有相应的注释"修改了Vagrantfile文件的config.vm.box_check_update配置项"
4.update (up)
是否访问存储库:是
格式:
update [PATH...]
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订数量
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-N [--non-recursive] : obsolete; try --depth=files or --depth=immediates 已经废弃;尝试--depth=files或--depth=immediates标志
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--set-depth ARG : set new working copy depth to ARG ('exclude','empty', 'files', 'immediates', or 'infinity')
将新的工作拷贝深度设置为ARG ('exclude','empty', 'files', 'immediate ', or 'infinity')
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--diff3-cmd ARG : use ARG as merge command 使用ARG作为合并命令
--force : handle unversioned obstructions as changes 将未版本化的障碍作为更改处理
--ignore-externals : ignore externals definitions 忽略外部定义
--changelist [--cl] ARG : operate only on members of changelist ARG 只对更改列表,即ARG成员进行操作
--editor-cmd ARG : use ARG as external editor 使用ARG作为外部编辑器
--accept ARG : specify automatic conflict resolution action 指定自动冲突解决操作
('postpone', 'working', 'base', 'mine-conflict','theirs-conflict', 'mine-full', 'theirs-full',
'edit', 'launch', 'recommended')
(shorthand:'p', 'mc', 'tc', 'mf', 'tf', 'e', 'l', 'r') 对应的缩写
--parents : make intermediate directories 创建中间目录
--adds-as-modification : Local additions are merged with incoming additions instead of causing a tree conflict.
Use of this option is not recommended! Use 'svn resolve' to resolve tree conflicts instead.
本地添加与传入添加合并,而不是导致树冲突。
不建议使用此选项!应该通过使用“svn resolve”来解决树冲突。 Global options: //与上面相同,在此省略
将更改从存储库带到工作副本中,即如果有别的用户更新了某个文件,然后你想要同步更新到你本地的文件,你就可以使用update
如果没有给出修订号(即-r参数),那么返回带着最新的工作副本和HEAD rev。否则,将工作副本同步到-r给出的修订号版本。
对于每个更新的项目,将打印一行,其中包含报告所采取的操作的字符。这些字的意思如下:
- A Added 添加
- D Deleted 删除
- U Updated 更新
- C Conflict 有冲突
- G Merged 合并
- E Existed 已存在
- R Replaced 替换
第一列中的字符报告关于项本身的内容。
第二列中的字符报告项的属性。
第三列中的“B”表示文件的锁已被破坏或被盗。
第四列中的“C”表示树冲突,而第一列和第二列中的“C”分别表示文件和属性值中的文本冲突。
如果使用--force,当更新试图添加相同的路径,工作副本中的未版本化阻塞路径不会自动导致失败。如果阻塞路径与存储库中相应路径的类型(文件或目录)相同,则会对其进行版本控制,但其内容将“原样”保留在工作副本中。
这意味着一个阻塞目录的未版本化的子目录也可能阻塞并成为版本化的。对于文件,阻塞和存储库之间的任何内容差异都被视为对工作副本的本地修改。存储库中的所有属性都应用于阻塞路径。
在第一列中使用代码“E”报告阻塞路径。
如果工作副本中缺少指定的更新目标,但存在其直接父目录,则在指定的深度将目标签入其父目录。
如果指定了--parent,也可以在depth=empty处签出目标的任何缺失的父目录。
使用--set-depth选项在此操作的目标上设置新的工作副本深度。
举例:
userdeMBP:foo user$ svn update
Updating '.':
At revision .
本例子的作用就是将之前使用checkout检出的工作副本同步到最新版本,没有指定路径则默认为本地路径'.'。由上面返回结果可见,现在的最新版本为4
5. add
是否访问存储可:否
格式:
add PATH...
选项:
Valid options:
--targets ARG : pass contents of file ARG as additional args 将ARG文件的内容作为附加参数传递
-N [--non-recursive] : obsolete; try --depth=files or --depth=immediates 已经废弃;尝试--depth=files或--depth=immediates标志
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--force : force operation to run 强制操作运行
--no-ignore : disregard default and svn:ignore and svn:global-ignores property ignores
忽略默认值和svn:ignore和svn:global-ignores属性忽略
--auto-props : enable automatic properties 启用自动属性
--no-auto-props : disable automatic properties 禁用自动属性
--parents : add intermediate parents 添加中间父目录 Global options: //与上面相同,在此省略
将文件和目录置于版本控制之下,安排它们添加到存储库。它们将在下一次提交中添加。
举例:
在之前的工作副本foo中创建了两个文件来查看add的作用及效果:
userdeMBP:~ user$ svn list svn://localhost/myCode //首先先查看当前存储库中有的文件和目录列表
centos7/ userdeMBP:~ user$ svn add /Users/user/foo/versioned-
A foo/versioned- //A表示添加 userdeMBP:~ user$ cd foo
userdeMBP:foo user$ svn commit -m "查看add的使用效果add了versioned-1文件" //然后进入到我的工作副本区,运行commit提交操作
Adding versioned-
Transmitting file data .done
Committing transaction...
Committed revision . //然后我们就能够看见,使用版本化后的versioned-1被提交到了存储库中,没有版本化的unversioned-1没有被提交上去
userdeMBP:foo user$ svn list svn://localhost/myCode
centos7/
versioned-
6.auth
格式:
usage: . svn auth [PATTERN ...]
usage: . svn auth --remove PATTERN [PATTERN ...]
如果没有参数,则列出所有缓存的身份验证凭据。身份验证凭证包括用户名、密码、SSL证书和SSL客户机证书密码。
如果指定了模式,则只列出属性与一个或多个模式匹配的凭据。
使用--remove选项,删除匹配一个或多个模式的缓存身份验证凭据。
如果指定了多个模式,则仅当它们与所有指定模式匹配时才考虑凭证。模式是区分大小写匹配的,可能包含glob通配符:
- ? 匹配任何单个字符
- * 匹配任意字符序列
- [abc] 匹配括号中列出的任何字符
请注意,通配符通常需要在命令行中被引用或转义,因为许多命令shell会通过尝试展开它们来进行干扰。
选项:
Valid options:
--remove : remove matching authentication credentials 删除匹配的身份验证凭据
--show-passwords : show cached passwords 显示缓存密码 Global options: //与上面相同,在此省略
举例:
userdeMBP:~ user$ svn auth
------------------------------------------------------------------------
Credential kind: svn.simple
Authentication realm: <http://10.249.1.139:80> svn
Password cache: keychain
Username: user ------------------------------------------------------------------------
Credential kind: svn.simple
Authentication realm: <svn://localhost:3690> ae9a497d-29...fac365743
Password cache: keychain
Username: boss Credentials cache in '/Users/user/.subversion' contains credentials
7.blame (praise, annotate, ann) 追责
是否访问存储库:是
格式:
blame [-rM:N] TARGET[@REV]...
在文件的每一行注释上一个版本号,以及该行的最后一个更改(或者下一个更改)的作者。
如果没有修订范围(与-r0:REV相同),或者有'-r M:N'(其中M < N),则对在文件的修订号N中出现的每一行进行注释,最后一个修订是在rN处或rN修订号之前修改或添加该行的,向后查看的时间不超过rM。
在一个反向修订范围'-r M:N'中,其中M > N,注释文件的修订N中出现的每一行,在rN修改或删除该行之后的下一个修订中,向前看的时间不超过rM。
如果-r指定了修订号,则[@REV]中的REV将确定首先查找目标的修订版本。
将带注释的结果写入标准输出。
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订数量
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-v [--verbose] : print extra information 打印额外信息
-g [--use-merge-history] : use/display additional information from merge history 使用/显示合并历史记录中的附加信息
--incremental : give output suitable for concatenation 给出适合串联的输出
--xml : output in XML 以XML格式输出
-x [--extensions] ARG : Specify differencing options for external diff or internal diff or blame. Default: '-u'.
为外部差异或内部差异或过失指定差异选项。默认值:'-u'。
Options are separated by spaces. Internal diff and blame take:
选项由空格分隔。内部差异和责备采取:
-u, --unified: Show lines of unified context 显示3行统一上下文
-b, --ignore-space-change: Ignore changes in amount of white space 忽略空白数量的更改
-w, --ignore-all-space: Ignore all white space 忽略所有空白
--ignore-eol-style: Ignore changes in EOL style 忽略EOL样式的更改
-U ARG, --context ARG: Show ARG lines of context 显示ARG上下文的行
-p, --show-c-function: Show C function name 显示C函数名
--force : force operation to run 强制运行操作 Global options: //与上面相同,在此省略
显示文件的每一行何时最后(或下一行)更改。显示特定文件和URL内嵌的作者和修订版本信息
即显示某个已受控文件的每一行的最后修改版本和作者
举例:
1)
userdeMBP:~ user$ svn blame svn://localhost/myCode/centos7/Vagrantfile
boss # -*- mode: ruby -*-
boss # vi: set ft=ruby :
boss
boss # All Vagrant configuration is done below. The "" in Vagrant.configure
boss # configures the configuration version (we support older styles for
boss # backwards compatibility). Please don't change it unless you know what
boss # you're doing.
boss Vagrant.configure("") do |config|
boss # The most common configuration options are documented and commented below.
boss # For a complete reference, please see the online documentation at
boss # https://docs.vagrantup.com.
boss
boss # Every Vagrant development environment requires a box. You can search for
boss # boxes at https://vagrantcloud.com/search.
boss config.vm.box = "centos/7"
boss
boss # Disable automatic box update checking. If you disable this, then
boss # boxes will only be checked for updates when the user runs
boss # `vagrant box outdated`. This is not recommended.
boss config.vm.box_check_update = false
...
2)使用--xml:
userdeMBP:~ user$ svn blame --xml svn://localhost/myCode/versioned-1
<?xml version="1.0" encoding="UTF-8"?>
<blame>
<target
path="svn://localhost/myCode/versioned-1">
<entry
line-number="">
<commit
revision="">
<author>boss</author>
<date>--07T02::.922068Z</date>
</commit>
</entry>
</target>
</blame>
3)使用-r number参数,得到修订版本号为number的文件的每一行的最后修改版本和作者:
userdeMBP:foo user$ svn blame --revision svn://localhost/myCode/versioned-1
svn: E220001: Unreadable path encountered; access denied
出错,解决办法,在authz文件上添加下图画圈处的内容:
然后再运行即可:
userdeMBP:foo user$ svn blame --revision svn://localhost/myCode/versioned-1
boss use add command to make this file versioned
4)-r 修订范围正反的区别:
1》正常时,显示的是从一开始到修订版本号为4的信息:
userdeMBP:foo user$ svn blame --revision svn://localhost/myCode/centos7/Vagrantfile
boss # -*- mode: ruby -*-
boss # vi: set ft=ruby :
...
boss # boxes will only be checked for updates when the user runs
boss # `vagrant box outdated`. This is not recommended.
boss config.vm.box_check_update = false
boss
boss # Create a forwarded port mapping which allows access to a specific port
boss # within the machine from a port on the host machine. In the example below,
boss # accessing "localhost:8080" will access port on the guest machine.
boss # NOTE: This will enable public access to the opened port
boss config.vm.network "forwarded_port", guest: , host:
boss
...
boss # SHELL
boss end
2》指定正向修订版本范围:
只显示在2-4版本内修改的内容,-处的内容因为修订版本为1,所以不显示;并且显示的内容尽量朝4接近,即如果某一行版本3、版本4都有,那么就显示其版本4的内容:
userdeMBP:foo user$ svn blame --revision : svn://localhost/myCode/centos7/Vagrantfile
- - # -*- mode: ruby -*-
- - # vi: set ft=ruby :
...
- - # boxes will only be checked for updates when the user runs
- - # `vagrant box outdated`. This is not recommended.
boss config.vm.box_check_update = false
- -
- - # Create a forwarded port mapping which allows access to a specific port
- - # within the machine from a port on the host machine. In the example below,
- - # accessing "localhost:8080" will access port on the guest machine.
- - # NOTE: This will enable public access to the opened port
boss config.vm.network "forwarded_port", guest: , host:
- -
- - # Create a forwarded port mapping which allows access to a specific port
...
- - # SHELL
- - end
3》指定反向修订版本范围:
只显示在2-4版本内修改的内容,-处的内容因为修订版本为1,所以不显示;不同之处在于显示的内容尽量朝2接近,即如果某一行版本3、版本4都有,那么就显示其版本3的内容:
userdeMBP:foo user$ svn blame --revision : svn://localhost/myCode/centos7/Vagrantfile
- - # -*- mode: ruby -*-
- - # vi: set ft=ruby :
...
- - # `vagrant box outdated`. This is not recommended.
boss config.vm.box_check_update = false
- -
- - # Create a forwarded port mapping which allows access to a specific port
- - # within the machine from a port on the host machine. In the example below,
- - # accessing "localhost:8080" will access port on the guest machine.
- - # NOTE: This will enable public access to the opened port
boss # config.vm.network "forwarded_port", guest: , host:
- -
...
- - # SHELL
- - end
8.cat
格式:
cat TARGET[@REV]...
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
--ignore-keywords : don't expand keywords 不扩展密钥 Global options: //与上面相同,在此省略
取得在特定版本的某文件显示在当前屏幕
如果指定,[@REV]中的REV将确定首先查找目标的修订版本。
举例:
userdeMBP:~ user$ svn cat svn://localhost/myCode/centos7/Vagrantfile@4
# -*- mode: ruby -*-
# vi: set ft=ruby : # All Vagrant configuration is done below. The "" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com. # Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "centos/7" # Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
config.vm.box_check_update = false # Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port on the guest machine.
# NOTE: This will enable public access to the opened port
config.vm.network "forwarded_port", guest: , host: 8080
...
然后我就得到了修订号为4的制定文件的内容
注意:
svn log 用来展示svn 的版本作者、日期、路径等等
svn diff 通过比较来显示特定修改的行级详细信息
svn cat 取得在特定版本的某文件显示在当前屏幕
svn list 显示存储库中一个目录或某一版本存在的文件
9.changelist (cl)
是否访问存储库:否
格式:
usage: . changelist CLNAME PATH...
. changelist --remove PATH...
选项:
Valid options:
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
-R [--recursive] : descend recursively, same as --depth=infinity 一路向下递归,效果就和--depth=infinity相同
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--remove : remove changelist association 删除变更列表协会
--targets ARG : pass contents of file ARG as additional args 传递ARG文件的内容作为额外参数
--changelist [--cl] ARG : operate only on members of changelist ARG 只对ARG这个changelist成员进行操作 Global options: //与上面相同,在此省略
将变化列表CLNAME与命名文件关联(或分离),即将wc中的文件从逻辑上分组.
通过这个命令,我们可以给自己的本地代码改动分组或加上一个标签,说明某些文件是为某个特别功能或bug而改的
举例:
userdeMBP:~ user$ svn cl centos7_file /Users/user/foo/centos7/Vagrantfile
A [centos7_file] foo/centos7/Vagrantfile
centos7_file为变更列表的名字,/Users/user/foo/centos7/Vagrantfile为本地的文件,这样就是将该文件分到了centos7_file这个组中,如果之后还想要添加别的文件还可以继续执行该语句
创建一个changelist之后,我们就可以针对这个changelist而不是单个文件进行操作了
后面又添加了一个versioned-文件到该组:
userdeMBP:foo user$ svn cl centos7_file /Users/user/foo/versioned-
A [centos7_file] versioned-
然后对上面的centos7_file组中的文件进行修改,然后将其提交到存储库中:
userdeMBP:~ user$ svn commit --changelist centos7_file -m "centos7_file group file" //注意,操作相应的文件的时候一定要在其工作副本中,否则操作不成功
svn: E155007: '/Users/user' is not a working copy userdeMBP:~ user$ cd foo //我的工作副本是'/Users/user/foo'
userdeMBP:foo user$ svn commit --changelist centos7_file -m "centos7_file group file" //然后就可以看见提交了centos7_file组中的两个文件
Sending centos7/Vagrantfile
Sending versioned-
Transmitting file data ..done
Committing transaction...
Committed revision .
然后可以通过cat查看一下:
userdeMBP:foo user$ svn cat svn://localhost/myCode/versioned-1@6 //成功
use add command to make this file versioned
and now test changelist userdeMBP:foo user$ svn cat svn://localhost/myCode/centos7/Vagrantfile@6 //成功
# -*- mode: ruby -*-
# vi: set ft=ruby :
#test changeless # All Vagrant configuration is done below. The "" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
10.cleanup
是否访问存储库:否
格式:
usage: . cleanup [WCPATH...]
. cleanup --remove-unversioned [WCPATH...]
cleanup --remove-ignored [WCPATH...]
. cleanup --vacuum-pristines [WCPATH...]
- 如果没有指定任何选项,如--remove-unversioned, --remove-ignored, and --vacuum-pristines,则从工作副本中删除所有锁定项目(通过“svn status”命令显示为“L”)。通常,只有当Subversion客户机在使用工作副本时崩溃,使其处于不可用状态时,才需要这样做。
⚠️:没有保护其他Subversion客户端仍在使用的写锁的机制。当另一个客户端使用工作副本时,在没有任何选项的情况下运行此命令会损坏工作副本,无法修复!
- 如果给出了--remove-unversioned选项或--remove-ignore选项,则删除WCPATH中的任何未版本化或忽略的项。
⚠️'svn status'命令将未版本化的项显示为'?',如果给它提供了--no-ignore 选项,则忽略项为“I”。
- 如果给出--vacuum-pristines选项,则删除存储在.svn目录中且不再被工作副本中的任何文件引用的文件的原始副本。
选项:
Valid options:
--remove-unversioned : remove unversioned items 移除非版本化项目,即没有调用add命令的文件
--remove-ignored : remove ignored items 移除忽略的项目
--vacuum-pristines : remove unreferenced pristines from .svn directory 从.svn目录中删除未引用的pristines
--include-externals : also operate on externals defined by svn:externals properties 还对由svn:externals属性定义的外部性进行操作
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--diff3-cmd ARG : deprecated and ignored 被弃用或忽略 Global options: //与上面相同,在此省略
要么从使工作副本处于锁定状态的中断操作中恢复,即递归的清理WC中过期的锁和未完成的操作,要么删除不需要的文件。
11.copy (cp)
是否访问库:是
格式:
copy SRC[@REV]... DST
SRC(源)和DST(目标)都可以是工作拷贝(WC)路径或URL:
- WC -> WC: 新增内容的复制和时间表(附历史记录)
- WC -> URL: 立即将WC的副本提交到URL
- URL -> WC: 检查到WC的URL,计划添加
- URL -> URL: 完整的服务器端复制;用于分支和标记。⚠️现在SVN只支持同一个仓库内文件的拷贝,不允许跨仓库操作。
所有SRCs必须是同一类型的。如果DST是一个现有目录,则源将作为DST的子目录添加。复制多个源时,DST必须是一个现有目录。
⚠️:为了与以前版本的Subversion兼容,使用两个工作复制路径(WC -> WC)执行的副本将不会与存储库联系。因此,默认情况下,它们可能无法将合并的跟踪信息从复制源传播到目标。
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--ignore-externals : ignore externals definitions 忽略外部定义
--parents : make intermediate directories 创建中间目录
-m [--message] ARG : specify log message ARG 指定日志信息(即注释)
-F [--file] ARG : read log message from file ARG 从文件ARG中读取日志信息
--force-log : force validity of log message source 强制日志消息源的有效性
--editor-cmd ARG : use ARG as external editor 使用ARG作为外部编辑器
--encoding ARG : treat value as being in charset encoding ARG 将值编码为ARG字符集编码格式的值
--with-revprop ARG : set revision property ARG in new revision using the name[=value] format
使用name[=value]格式在新版本中设置修订属性ARG
--pin-externals : pin externals with no explicit revision to their current revision (recommended when tagging)
对当前修订号没有显式修订号时标记外部属性(在标记时推荐)
Global options: //与上面相同,在此省略
在工作副本或存储库中复制文件和目录。
svn的分支和标签用的都是svn copy
举例:
⚠️copy到url的操作隐含了commit提交动作,所以需要提供log messages
userdeMBP:foo user$ svn cleanup
userdeMBP:foo user$ cd .. //下面命令找不到文件的原因好像是因为上面我运行了cleanup,所以这个之前没有使用过的文件好像就被清理了,虽然我在本地目录上还是可以看见它,但是它的状态已经被改变了
userdeMBP:~ user$ svn copy /Users/user/foo/unversioned- svn://localhost/myCode/ -m "test copy command"
svn: E155010: The node '/Users/user/foo/unversioned-1' was not found.
但原因也有可能是因为该文件是非版本化文件,所以无法找到,我们可以先使用add使其版本化后再看看情况:
userdeMBP:foo user$ svn status
? unversioned- //?号表示非版本化
运行add后:
userdeMBP:foo user$ svn add /Users/user/foo/unversioned- //将文件版本化
A unversioned- userdeMBP:foo user$ svn status //可见状态已经变化了
A unversioned- //然后果然下面的命令就成功了,所以不是运行了cleanup的原因
userdeMBP:foo user$ svn copy /Users/user/foo/unversioned- svn://localhost/myCode/ -m "test copy command"
Adding copy of unversioned-
Transmitting file data .done
Committing transaction...
Committed revision .
然后我们就可以使用list查看存储库上的状态:
userdeMBP:foo user$ svn list svn://localhost/myCode/
centos7/
unversioned- //可见该文件被成功复制
versioned-
使用blame也能查看到:
userdeMBP:foo user$ svn blame svn://localhost/myCode/unversioned-1
boss don't use add to make this file versioned
这是因为copy到url的操作隐含了commit提交动作
12.delete (del, remove, rm)
是否访问存储库:如果PATH是库地址时会,是WC则不会
格式:
usage: . delete PATH...
. delete URL...
1. 由PATH路径指定的每个项都计划在下一次提交时删除。未提交的文件和目录将立即从工作副本中删除,除非给出--keep-local选项。
除非给出--force或--keep-local选项,否则不删除包含未版本化或修改项的路径。
2. URL指定的每个项通过立即提交从存储库中删除。
选项:
Valid options:
--force : force operation to run 强制操作运行
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--targets ARG : pass contents of file ARG as additional args 传递ARG文件的内容作为额外参数
-m [--message] ARG : specify log message ARG 指定日志信息(即注释)
-F [--file] ARG : read log message from file ARG 从文件ARG中读取日志信息
--force-log : force validity of log message source 强制日志消息源的有效性
--editor-cmd ARG : use ARG as external editor 使用ARG作为外部编辑器
--encoding ARG : treat value as being in charset encoding ARG 将值编码为ARG字符集编码格式的值
--with-revprop ARG : set revision property ARG in new revision using the name[=value] format
使用name[=value]格式在新版本中设置修订属性ARG
--keep-local : keep path in working copy 保留路径在工作副本中
Global options: //与上面相同,在此省略
从版本控制中删除文件和目录
当操作的是工作副本时,即PATH,svn的delete只是做了个标记,在客户端获取新版本时不出现这些被删除的文件,而文件本身在服务器端仍然是存在的,而且可以通过更新到原来的某个版本找回这些文件
举例:
1)delete PATH
因为之前我移除了unversioned-1文件,有进行了update,所以导致了一次冲突,但是我没有解决:
userdeMBP:foo user$ svn up
Updating '.':
C unversioned-
At revision .
Summary of conflicts:
Tree conflicts:
Searching tree conflict details for 'unversioned-1' in repository:
Checking r7... done
Tree conflict on 'unversioned-1':
A new file appeared during update to r7; it was added by boss in r7.
A file scheduled to be added to the repository in the next commit was found in the working copy.
Select: (p) Postpone, (r) Mark as resolved, (m) Merge the files, (h) Help,
(q) Quit resolution: q
Summary of conflicts:
Tree conflicts:
所以这里运行delete会报错:
userdeMBP:foo user$ svn delete /Users/user/foo/unversioned-
svn: E195006: Use --force to override this restriction (local modifications may be lost)
svn: E195006: '/Users/user/foo/unversioned-1' has local modifications -- commit or revert them first userdeMBP:foo user$ svn status //状态说明该文件有冲突C
R C unversioned-
> local file add, incoming file add upon update
Summary of conflicts:
Tree conflicts:
所以打算先进行一下还原revert:
userdeMBP:foo user$ svn revert /Users/user/foo/unversioned-
Reverted 'unversioned-1'
userdeMBP:foo user$ svn list svn://localhost/myCode/
centos7/
versioned-
userdeMBP:foo user$ svn status //状态不再显示有冲突
userdeMBP:foo user$
然后再delete:
userdeMBP:foo user$ svn delete /Users/user/foo/unversioned-
D unversioned-
然后本地的unversioned-1文件就被删除了,相应文件夹中也没有该文件了。因为它是未提交的文件(这是因为我先执行了delete URL,将其从存储库中删除了),且没有使用--keep-local,所以会被立即删除
2)delete URL
userdeMBP:foo user$ svn delete svn://localhost/myCode/unversioned-1
svn: E205007: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options
svn: E205007: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found //上面的错误的原因是因为我忘记写注释了,加上就成功了
userdeMBP:foo user$ svn delete svn://localhost/myCode/unversioned-1 -m "test delete url command"
Committing transaction...
Committed revision . userdeMBP:foo user$ svn list svn://localhost/myCode/ //可见该文件已经从存储库中删除了
centos7/
versioned-
⚠️copy和delete如果访问的是存储库,其实都隐式地进行了commit操作,所以一定要记得写注释
13.diff (di)
是否访问存储库:访问的是存储库路径时是
格式:
usage: . diff
. diff [-c M | -r N[:M]] [TARGET[@REV]...]
. diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] \
[PATH...]
. diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]
. diff OLD-URL[@OLDREV] NEW-PATH[@NEWREV]
. diff OLD-PATH[@OLDREV] NEW-URL[@NEWREV]
1. 只需使用“svn diff”在工作副本中显示本地修改。
2. 显示在两个版本之间的REV中对TARGETs所做的更改。
TARGETs可以是所有工作复制路径或所有url。
如果TARGETs是工作拷贝路径,则N默认为BASE, M默认为工作副本;如果是url,必须指定N, M默认为HEAD。
“-c M”选项等价于“-r N:M”,其中N = M-1。
使用“-c -M”做相反的事情(即M为负数):“-r M:N”其中N = M-1。
3.展示在OLDREV中看到的OLD-TGT与NEWREV中看到的NEW-TGT的区别。如果路径,则与旧tgt和新tgt相关,并将输出限制为这些路径的差异。
OLD-TGT和NEW-TGT可以是复制路径或URL[@REV]。
如果没有指定,NEW-TGT默认为OLD-TGT。
-r N使OLDREV默认为N, -r N:M使OLDREV默认为N, NEWREV默认为M。
如果没有指定OLDREV或NEWREV,它们默认为为工作复制目标而工作,并指向URL目标。
旧tgt和新tgt也可以是未版本化目标的路径。不能为未版本化的目标指定修订号。
两个目标必须是相同的节点类型(文件或目录)。
不支持将未版本化的目标与URL目标进行比较。
4. 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]'的简写
5. 'svn diff --old=OLD-URL[@OLDREV] --new=NEW-PATH[@NEWREV]'的简写
6. 'svn diff --old=OLD-PATH[@OLDREV] --new=NEW-URL[@NEWREV]'的简写
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-c [--change] ARG : the change made by revision ARG (like -r ARG-:ARG) 来自修订号ARG的更改(如使用-r ARG-:ARG的效果)
If ARG is negative this is like -r ARG:ARG- 如果ARG为负数,则其效果与-r ARG:ARG- 相同
If ARG is of the form ARG1-ARG2 then this is like ARG1:ARG2, where ARG1 is inclusive
如果ARG的形式是ARG1-ARG2,那么这就像ARG1:ARG2,其中ARG1是包含的
--old ARG : use ARG as the older target 使用ARG作为更旧的目标
--new ARG : use ARG as the newer target 使用ARG作为更新的目标
-N [--non-recursive] : obsolete; try --depth=files or --depth=immediates 已经废弃;尝试--depth=files或--depth=immediates标志
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--diff-cmd ARG : use ARG as diff command 使用ARG作为diff命令
--internal-diff : override diff-cmd specified in config file 覆盖配置文件中指定的diff-cmd
-x [--extensions] ARG : Specify differencing options for external diff or internal diff or blame. Default: '-u'.
为外部差异或内部差异或过失指定差异选项。默认值:'-u'。
Options are separated by spaces. Internal diff and blame take:
选项由空格分隔。内部差异和责备采取:
-u, --unified: Show lines of unified context 显示3行统一上下文
-b, --ignore-space-change: Ignore changes in amount of white space 忽略空白数量的更改
-w, --ignore-all-space: Ignore all white space 忽略所有空白
--ignore-eol-style: Ignore changes in EOL style 忽略EOL样式的更改
-U ARG, --context ARG: Show ARG lines of context 显示ARG上下文的行
-p, --show-c-function: Show C function name 显示C函数名
--no-diff-added : do not print differences for added files 不为添加的文件打印差异
--no-diff-deleted : do not print differences for deleted files 不为删除的文件打印差异
--ignore-properties : ignore properties during the operation 在操作过程中忽视属性
--properties-only : show only properties during the operation 在操作过程中显示的唯一属性
--show-copies-as-adds : don't diff copied or moved files with their source 不区别复制或移动文件和其源文件
--notice-ancestry : diff unrelated nodes as delete and add 在删除和添加过程中区别不相关节点
--summarize : show a summary of the results 显示结果的总结
--changelist [--cl] ARG : operate only on members of changelist ARG 只对在更改列表ARG中的成员进行操作
--force : force operation to run 强制运行操作
--xml : output in XML 以XML格式输出
--git : use git's extended diff format 使用git的扩展diff格式
--patch-compatible : generate diff suitable for generic third-party patch tools; currently the same as --show-copies-as-adds --ignore-properties
生成适用于通用第三方补丁工具的diff;目前和--show-copies-as-adds --ignore-properties标志效果相同 Global options: //与上面相同,在此省略
举例:
userdeMBP:foo user$ svn diff //说明最近一次更改了unversioned-1文件
Index: unversioned-
===================================================================
--- unversioned- (revision ) //意思是-表示修订版本为7时的修改,即添加该文件
+++ unversioned- (nonexistent) //+表示的是delete的修改
@@ - +, @@ //修订版本为7的修改在第一行,delete的修改没有在哪一行
-don't use add to make this file versioned //修订版本为7即添加了这一句话
\ No newline at end of file
比较存储库中svn://localhost/myCode/centos7/Vagrantfile文件在修订版本3和4的不同点:
userdeMBP:foo user$ svn diff -r : svn://localhost/myCode/centos7/Vagrantfile
Index: Vagrantfile
===================================================================
--- Vagrantfile (revision )
+++ Vagrantfile (revision )
@@ -, +, @@ //说明两个版本的不同在于17,13行
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
- # config.vm.box_check_update = false //版本3时
+ config.vm.box_check_update = false //版本4时 # Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port on the guest machine.
# NOTE: This will enable public access to the opened port
- # config.vm.network "forwarded_port", guest: , host:
+ config.vm.network "forwarded_port", guest: , host: # Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
使用参数 --summarize --xml,对结果进行总结并以XML格式显示出来:
userdeMBP:foo user$ svn diff -r : --xml svn://localhost/myCode/centos7/Vagrantfile //注意,--xml一定要和--summarize参数一起使用
svn: E205000: Try 'svn help diff' for more information
svn: E205000: '--xml' option only valid with '--summarize' option userdeMBP:foo user$ svn diff -r : --summarize svn://localhost/myCode/centos7/Vagrantfile //但是--summarize可以自己使用,说明该文件在两个版本中有修改
M svn://localhost/myCode/centos7/Vagrantfile userdeMBP:foo user$ svn diff -r : --summarize --xml svn://localhost/myCode/centos7/Vagrantfile
<?xml version="1.0" encoding="UTF-8"?>
<diff>
<paths>
<path
props="none"
kind="file"
item="modified">svn://localhost/myCode/centos7/Vagrantfile</path>
</paths>
</diff>
14.export
是否访问库:如果访问的是URL则会
格式:
usage: . export [-r REV] URL[@PEGREV] [PATH]
. export [-r REV] PATH1[@PEGREV] [PATH2]
1. 将一个干净的目录树从URL指定的存储库中导出到PATH中,如果指定则得到在修订号REV时的数据,否则则得到在HEAD的数据。
如果省略PATH,则URL的最后一个组件用于本地目录名。
2. 从PATH1指定的工作副本中导出一个干净的目录树,如果指定则得到在修订号REV时的数据,否则则得到正在工作的数据。
如果省略PATH2,则PATH1的最后一个组件用于本地目录名。如果未指定REV,则保留所有本地更改。
不受版本控制的文件将不会被复制。
如果指定,PEGREV将确定首先查找目标的修订版本。
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
-N [--non-recursive] : obsolete; try --depth=files or --depth=immediates 已经废弃;尝试--depth=files或--depth=immediates标志
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--force : force operation to run 强制操作运行
--native-eol ARG : use a different EOL marker than the standard system marker for files with the svn:eol-style property set to 'native'.
对于svn:eol-style 属性设置为“native”的文件,使用与标准系统标记不同的EOL标记。
ARG may be one of 'LF', 'CR', 'CRLF' ARG可以是'LF', 'CR', 'CRLF'中的一个
--ignore-externals : ignore externals definitions 忽略外部属性定义
--ignore-keywords : don't expand keywords 不扩展关键词 Global options: //与上面相同,在此省略
举例:
userdeMBP:foo user$ svn export svn://localhost/myCode/centos7/Vagrantfile /Users/user/export-file
A /Users/user/export-file/Vagrantfile
Export complete.
然后我们可以看见,本地/Users/user/export-file目录中果然生成了一个Vagrantfile文件:
15.info
是否会访问存储库:当访问的是存储库路径时是
格式:
info [TARGET[@REV]...]
打印与每个TARGET相关的信息(默认值:'.')。
TARGET可以是工作复制路径,也可以是URL。如果指定,REV决定在哪个修订号版本中首先查找目标;默认值是指向URL或指向WC路径的BASE。
使用—-show-item,只打印关于目标的一项信息的值。
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-R [--recursive] : descend recursively, same as --depth=infinity
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--targets ARG : pass contents of file ARG as additional args 传递ARG文件的内容作为额外参数
--incremental : give output suitable for concatenation
--xml : output in XML
--changelist [--cl] ARG : operate only on members of changelist ARG 只对更改列表,即ARG的成员进行操作
--include-externals : also operate on externals defined by svn:externals properties 只对通过svn:externals属性定义的外部属性进行操作
--show-item ARG : print only the item identified by ARG: 只打印被ARG标识的项目
'kind' node kind of TARGET TARGET的节点类型
'url' URL of TARGET in the repository 存储库中TARGET的URL
'relative-url' repository-relative URL of TARGET TARGET的相对于存储库的URL
'repos-root-url' root URL of repository 存储库的根URL
'repos-uuid' UUID of repository 存储库的UUID
'revision' specified or implied revision 指定或隐含的修订号
'last-changed-revision' last change of TARGET at or before 'revision'
TARGET的上一次或在'revision'中指定的修订号前的更改
'last-changed-date' date of 'last-changed-revision' 'last-changed-revision'的日期
'last-changed-author' author of 'last-changed-revision' 'last-changed-revision'的作者
'wc-root' root of TARGET's working copy TARGET的工作副本的根
--no-newline : do not output the trailing newline 不输出尾部换行符 Global options: //与上面相同,在此省略
举例:
userdeMBP:foo user$ svn info svn://localhost/myCode/centos7
Path: centos7
URL: svn://localhost/myCode/centos7
Relative URL: ^/myCode/centos7
Repository Root: svn://localhost
Repository UUID: ae9a497d--4b99-b372-515fac365743
Revision:
Node Kind: directory
Last Changed Author: boss
Last Changed Rev:
Last Changed Date: -- :: + (一, ) userdeMBP:foo user$ svn info --xml svn://localhost/myCode/centos7 //xml格式输出
<?xml version="1.0" encoding="UTF-8"?>
<info>
<entry
kind="dir"
path="centos7"
revision="">
<url>svn://localhost/myCode/centos7</url>
<relative-url>^/myCode/centos7</relative-url>
<repository>
<root>svn://localhost</root>
<uuid>ae9a497d--4b99-b372-515fac365743</uuid>
</repository>
<commit
revision="">
<author>boss</author>
<date>--07T06::.978210Z</date>
</commit>
</entry>
</info>
16.list (ls)
是否访问存储库:如果访问的是存储库地址时是
格式:
list [TARGET[@REV]...]
列出存储库中存在的每个TARGET文件和每个目标目录的内容。如果TARGET是一个工作复制路径,将使用相应的存储库URL。如果指定,REV将用于确定首先查找目标的修订版本。
默认目标是'.',表示当前工作目录的存储库URL。
可以指定多个--search模式,并将输出缩减为这些路径的最后一个段-如文件或目录名称-至少匹配其中一个模式。
使用--verbose,每个条目将显示以下字段:
- 最后一次提交的修订号
- 最后一次提交的作者
- 如果锁上了,字母“O”。(使用“svn info URL”查看详细信息)
- 大小(以字节为单位)
- 最后一次提交的日期和时间
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-v [--verbose] : print extra information 打印额外信息
-R [--recursive] : descend recursively, same as --depth=infinity 向下递归,与--depth=infinity的效果相同
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--incremental : give output suitable for concatenation 给出适合串联的输出
--xml : output in XML 以XML格式输出
--include-externals : also operate on externals defined by svn:externals properties 只对通过svn:externals属性定义的外部属性进行操作
--search ARG : use ARG as search pattern (glob syntax, case-and accent-insensitive, may require quotation marks to prevent shell expansion)
使用ARG作为搜索模式(glob语法不区分大小写和口音,可能需要引号来防止shell扩展)
Global options: //与上面相同,在此省略
显示目标下的文件和目录列表
举例:
userdeMBP:foo user$ svn list svn://localhost/myCode/
centos7/
versioned-
17.lock
是否访问存储库:是
格式:
lock TARGET...
选项:
Valid options:
--targets ARG : pass contents of file ARG as additional args 传递ARG文件的内容作为额外参数
-m [--message] ARG : specify lock comment ARG 指定日志信息(即注释)
-F [--file] ARG : read lock comment from file ARG 从文件ARG中读取日志信息
--force-log : force validity of lock comment source 强制日志消息源的有效性
--encoding ARG : treat value as being in charset encoding ARG 将值编码为ARG字符集编码格式的值
--force : steal locks 偷锁
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息 Global options: //与上面相同,在此省略
对目标获得修改锁。如果目标已被其他用户锁定,则会抛出警告信息。使用--force强制从其他用户或工作副本窃取锁
举例:
userdeMBP:foo user$ svn lock svn://localhost/myCode/versioned-1 //上锁
'svn://localhost/myCode/versioned-1' locked by user 'boss'.
然后当其他用户想要对其上锁时:
userdeMBP:foo user$ svn lock svn://localhost/myCode/versioned-1 --username=guest --password=00001
svn: warning: W160035: Path '/myCode/versioned-1' is already locked by user 'boss' in filesystem 'ae9a497d-2918-4b99-b372-515fac365743'
svn: E200009: One or more locks could not be obtained //需要使用--force才能成功
userdeMBP:foo user$ svn lock svn://localhost/myCode/versioned-1 --username=guest --password=00001 --force
'svn://localhost/myCode/versioned-1' locked by user 'guest'.
18.log
是否访问存储库:是
格式:
. log [PATH][@REV]
. log URL[@REV] [PATH...]
1. 打印PATH对应的URL的日志消息(默认值:'.')。
如果指定,REV是第一次查找URL的修订版本,默认的修订范围是REV:1。
如果没有指定REV,默认的修订范围是BASE:1,因为URL可能不存在于HEAD修订号中。
2. 打印URL下PATHs(默认值:'.')的日志消息。
如果指定,REV是第一次查找URL的版本,默认的版本范围是REV:1;否则,URL将在HEAD中查找,默认的修订范围是HEAD:1。
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-c [--change] ARG : the change made in revision ARG 在修订号ARG上的更改
-q [--quiet] : do not print the log message 不输出日志信息
-v [--verbose] : also print all affected paths 也打印所有受影响的路径
-g [--use-merge-history] : use/display additional information from merge history 使用或显示来自合并历史中的额外信息
--targets ARG : pass contents of file ARG as additional args 传递ARG文件的内容作为额外参数
--stop-on-copy : do not cross copies while traversing history 穿越历史时不要交叉拷贝
--incremental : give output suitable for concatenation 给出适合串联的输出
--xml : output in XML 以XML格式输出
-l [--limit] ARG : maximum number of log entries 日志条目的最大数量
--with-all-revprops : retrieve all revision properties 检索所有的修订号属性
--with-no-revprops : retrieve no revision properties 不检索修订号属性
--with-revprop ARG : retrieve revision property ARG 检索指定的修订号属性
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--diff : produce diff output 生成diff输出
--diff-cmd ARG : use ARG as diff command 使用ARG作为diff命令
--internal-diff : override diff-cmd specified in config file 覆盖配置文件中指定的diff-cmd
-x [--extensions] ARG : Specify differencing options for external diff or internal diff or blame. Default: '-u'.
为外部差异或内部差异或过失指定差异选项。默认值:'-u'。
Options are separated by spaces. Internal diff and blame take:
选项由空格分隔。内部差异和责备采取:
-u, --unified: Show lines of unified context 显示3行统一上下文
-b, --ignore-space-change: Ignore changes in amount of white space 忽略空白数量的更改
-w, --ignore-all-space: Ignore all white space 忽略所有空白
--ignore-eol-style: Ignore changes in EOL style 忽略EOL样式的更改
-U ARG, --context ARG: Show ARG lines of context 显示ARG上下文的行
-p, --show-c-function: Show C function name 显示C函数名
--search ARG : use ARG as search pattern (glob syntax, case-and accent-insensitive, may require quotation marks to prevent shell expansion)
使用ARG作为搜索模式(glob语法不区分大小写和口音,可能需要引号来防止shell扩展)
--search-and ARG : combine ARG with the previous search pattern 将ARG与前面的搜索模式结合起来 Global options: //与上面相同,在此省略
显示一组指定修订版本号和/或路径的日志消息
可以指定多个“-c”或“-r”选项(但不是“-c”和“-r”选项的组合),并且允许混合正向和反向范围。
使用-v,还可以为每个日志消息打印所有受影响的路径。
每一个变化的路径前面都有一个符号描述变化:
A:路径被添加或复制。
D:路径被删除了。
R:路径被替换(删除并在同一版本中重新添加)。
M:修改了路径文件和/或属性内容。
如果从其他地方复制了添加的或替换的路径,则复制源路径和修订号将显示在圆括号中。
如果一个文件或目录通过“svn move”从一个路径移动到另一个路径,那么旧路径将被列出为已删除,而新路径将被列出为在之前的修订中从旧路径复制的路径。
对于-q,不要打印日志消息主体本身(注意这与-v兼容)。
每个日志消息只打印一次,即使显式请求修改的受影响路径不止一条。默认情况下,日志遵循复制历史记录。
使用--stop-on-copy禁用此行为,这对于确定分支点非常有用。
--depth选项仅与--diff选项组合有效,并将显示的diff的范围限制为指定的深度。
如果使用—-search选项,则仅当所提供的搜索模式与作者、日期、日志消息文本(除非使用—-quiet)匹配时,才显示日志消息;如果还提供-—verbose选项,则显示更改的路径。
模式是区分大小写匹配的,可能包含glob通配符:
? 匹配任何单个字符
* 匹配任意字符序列
[abc] 匹配括号中列出的任何字符
如果提供了多个--search选项,如果日志消息与提供的任何搜索模式匹配,那么将显示日志消息。
如果使用--search-and选项,则该选项的参数与前面的--search或--search-and选项的模式相结合,并且只有与组合搜索模式匹配时才显示日志消息。
如果—-limit与—-search结合使用,—-limit将限制搜索的日志消息的数量,而不是将输出限制为匹配的日志消息的特定数量。
例子:
显示当前工作副本目录的最新5条日志消息,并显示每次提交中更改的路径:
userdeMBP:foo user$ svn log -l -v
------------------------------------------------------------------------
r7 | boss | -- :: + (一, ) | line
Changed paths:
A /myCode/unversioned- test copy command
------------------------------------------------------------------------
r6 | boss | -- :: + (一, ) | line
Changed paths:
M /myCode/centos7/Vagrantfile
M /myCode/versioned- centos7_file group file
------------------------------------------------------------------------
r5 | boss | -- :: + (一, ) | line
Changed paths:
A /myCode/versioned- 查看add的使用效果add了versioned-1文件
------------------------------------------------------------------------
r4 | boss | -- :: + (五, ) | line
Changed paths:
M /myCode/centos7/Vagrantfile 修改了Vagrantfile文件的config.vm.network配置项之前错了
------------------------------------------------------------------------
r3 | boss | -- :: + (五, ) | line
Changed paths:
M /myCode/centos7/Vagrantfile 修改了Vagrantfile文件的config.vm.network配置项
------------------------------------------------------------------------
显示Vagrantfile截至第3修订版本号的日志,从3开始递归到1:
userdeMBP:foo user$ svn log ./centos7/Vagrantfile@
------------------------------------------------------------------------
r3 | boss | -- :: + (五, ) | line 修改了Vagrantfile文件的config.vm.network配置项
------------------------------------------------------------------------
r2 | boss | -- :: + (五, ) | line 修改了Vagrantfile文件的config.vm.box_check_update配置项
------------------------------------------------------------------------
r1 | boss | -- :: + (五, ) | line 初始化导入centos7的vagrantfile文件
------------------------------------------------------------------------
显示每个提交到versioned-1的日志消息和差异:
userdeMBP:foo user$ svn log --diff svn://localhost/myCode/versioned-1
------------------------------------------------------------------------
r6 | boss | -- :: + (一, ) | line centos7_file group file Index: versioned-
===================================================================
--- versioned- (revision )
+++ versioned- (revision )
@@ - +, @@
-use add command to make this file versioned
\ No newline at end of file
+use add command to make this file versioned
+and now test changelist
\ No newline at end of file ------------------------------------------------------------------------
r5 | boss | -- :: + (一, ) | line 查看add的使用效果add了versioned-1文件 Index: versioned-
===================================================================
--- versioned- (nonexistent)
+++ versioned- (revision )
@@ -, + @@
+use add command to make this file versioned
\ No newline at end of file ------------------------------------------------------------------------
(因为上面的命令使用完整的URL,所以不需要工作副本)。
下面的方法没有本地测试
显示子 foo.c和的 bar.c的目录 '/trunk' 出现在50修订版本号的日志消息,使用^ / URL快捷方式:
svn log ^/trunk@ foo.c bar.c
显示foo.c在下一次'svn update'期间的任何传入更改的日志消息:
svn log -r BASE:HEAD foo.c
显示在/branches/foo中创建的修订版本的日志消息:
svn log --stop-on-copy --limit -r0:HEAD ^/branches/foo
如果在22修订版本号中^/trunk/foo.c移到了^/trunk/bar.c'中,'svn log -v' 将显示在其更改路径列表中的删除和复制,如:
D /trunk/foo.c
A /trunk/bar.c (from /trunk/foo.c:)
19.merge
是否访问存储库:当访问库地址时是
格式:
. merge SOURCE[@REV] [TARGET_WCPATH]
(the 'complete' merge)
. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]
(the 'cherry-pick' merge)
. merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]
(the '2-URL' merge)
作用其实就是合并两个受控源的不同之处,存放到一个WC里
1. 此表单只有一个源路径,没有修订范围,称为“完全”合并:
svn merge SOURCE[@REV] [TARGET_WCPATH]
完整的合并用于下面描述的“功能分支”模式中的“同步”和“重新集成”合并。它查找源分支上尚未合并到目标分支的所有更改,并将它们合并到工作副本中。合并跟踪用于了解哪些更改已经合并。
SOURCE指定将从何处提取更改的分支,TARGET_WCPATH指定目标分支的工作副本到提供的更改处。通常SOURCE和TARGET_WCPATH应该分别对应于一个分支的根。如果你只想合并一个子树,那么使用TARGET_WCPATH;但是这是不鼓励的,以避免子树合并信息。)
SOURCE通常是一个URL。可选的“@REV”指定URL的peg版本和考虑合并的最新版本;如果没有指定REV,则假定HEAD修订版本。如果SOURCE是一个工作复制路径,则使用该路径的对应URL,而'REV'的默认值是基本修订版本(通常是最后更新到的修订)。
TARGET_WCPATH是一个工作复制路径;如果省略了,通常假设为'.'。但会有一些特殊情况:
-如果来源是URL:
-如果URL的basename和'.'的basename是相同的,那么差异就适用于'.'。否则,如果在'.'中找到与URL具有相同basename的文件,就将差异应用于该文件。在所有其他情况下,目标默认为'.'。
-如果源文件是工作拷贝路径:
-如果源文件是一个文件,则差异将应用于该文件(对反向合并的早期更改有用)。否则,如果源是一个目录,那么目标的默认值是'.'。
在正常使用中,在一个修订版本中的工作副本应该是最新的,没有局部修改和切换的子树。
-“功能分支”合并模式-
在这个常用的工作流中,也称为“开发分支”模式,开发人员创建一个分支并提交一系列实现新特性的更改。开发人员定期合并来自parent分支的所有最新更改,以便使开发分支与这些更改保持同步。当feature完成时,开发人员执行从feature分支到parent分支的合并,以重新集成更改。
从parent分支到feature分支的合并称为“同步”或“追赶”合并,从feature分支到parent分支的合并称为“重新集成”合并。
- 同步合并例子 ,从parent分支到feature分支-
Subversion将定位'trunk'上尚未合并到'feature'分支中的所有更改。在这种情况下,这是一个单一的范围,r100:200。在上图中,L标记合并源的左侧(trunk@100), R标记合并源的右侧(trunk@200)。L和R之间的差异将应用于目标工作复制路径。在这种情况下,工作副本是整个'feature'分支的干净签出。
要执行此同步合并,请获得feature分支的一个干净的工作副本,并在其*目录中运行以下命令:
svn merge ^/trunk
注意,合并现在只在本地工作副本中,仍然需要提交到存储库中,以便其他人可以看到它。你可以查看更改,并且可能必须在提交合并之前解决冲突。
- 重新合并例子 ,从feature分支到parent分支-
feature分支最后一次与trunk同步是在修订x之前。所以trunk@X和feature@HEAD之间的差异包含了实现feature的完整更改集,没有其他更改。这些更改应用于主干。
在上面的图中,L标记了合并的左侧(trunk@X), R标记了右侧(feature@HEAD)。左右两边的不同合并到目标trunk中。
要执行合并,需要一个干净的trunk工作副本,并在其*目录中运行以下命令:
svn merge ^/feature
为了防止不必要的合并冲突,重新集成合并要求TARGET_WCPATH不是混合修订版本的工作副本,没有本地修改,也没有交换的子树。
重新集成合并还要求源分支与目标同步——在上面的示例中,这意味着分支点W和上一个合并的修订版本X之间的所有修订版本都被合并到feature分支中,因此中间没有未合并的修订版本。
2. 这种形式被称为'cherry-pick'合并:
svn merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]
cherry-pick合并用于合并从一个分支到另一个分支的特定修订(或修订范围。默认情况下,它使用合并跟踪来自动跳过已经合并到目标中的任何修订;你可以使用--ignore-ancestry选项来禁用这种跳过。
SOURCE通常是一个URL。可选的“@REV”只指定URL的peg版本,不影响合并范围;如果没有指定REV,则假定HEAD修订版本。如果SOURCE是一个工作复制路径,则使用该路径的对应URL,而'REV'的默认值是基本修订(通常是最后更新到的修订)。
TARGET_WCPATH是一个工作复制路径;如果省略了,通常是假设为'.'。'complete'合并表单中提到的特殊情况也适用于此。
合并的修订范围由“-r”和/或“-c”选项指定。“-r N:M”是指修订N和M在源分支历史上的差异。你可以使用“-c M”合并单个修订:“-c M”等价于“-r :M”。每个这样的差异都应用于TARGET_WCPATH。
如果TARGET_WCPATH中的合并信息指示范围内的修订已经合并,则不会再次合并这些修订中所做的更改。如果需要,将范围分解为多个子范围,并分别合并每个子范围。
“反向范围”可用于撤消更改。例如,当源和目标引用相同的分支时,先前提交的修订可以“撤消”。在相反的范围内,“-r N:M”中的N大于M,或者“-c”选项与负数一起使用:“-c -M”等价于“-r M:”。取消这样的更改也称为执行“反向合并”。
可以指定多个“-c”和/或“-r”选项,允许混合正向和反向范围。
-选择合并的例子-
修订版本号50中主干上修正了一个bug。这个修复需要从trunk合并到release分支:
在上面的图中,L标记合并的左侧(trunk@49), R标记合并的右侧(trunk@50)。左侧和右侧之间的差异应用于目标工作复制路径。
请注意,修订版本号49和50之间的差异正是在修订版本号50中提交的更改,不包括在修订49中提交的更改。
要执行合并,请获得release分支的一个干净的工作副本,并在其*目录中运行以下命令;记住,默认目标是'.':
svn merge -c50 ^/trunk
你也可以cherry-pick几个修订版本号和/或修订范围:
svn merge -c50,, -r65: ^/trunk
3.这种形式称为'2-URL merge':
svn merge SOURCE1[@REV1] SOURCE2[@REV2] [TARGET_WCPATH]
只有当其他变量不适合你的情况时,才应该使用此合并变量,因为要掌握此变量可能相当复杂。
指定两个源url,标识同一分支上的两个树或不同分支上的两个树。比较树,并将SOURCE1@REV1和SOURCE2@REV2之间的差异应用于TARGET_WCPATH上的目标分支的工作副本。目标分支可能与一个或两个源相同,也可能不同。所涉及的三个分支可能完全无关。
TARGET_WCPATH是一个工作复制路径;如果省略了,通常是假设为'.'。'complete'合并表单中提到的特殊情况也适用于此。
还可以将SOURCE1和/或SOURCE2指定为工作复制路径,在这种情况下,合并源URL派生自工作复制。
- 2-URL合并例子 -
在“foo”和“bar”这两个独立的分支上开发了两个特性。现在已经很清楚,在重新集成之前,“bar”应该与“foo”分支结合以进行进一步的开发。
尽管这两个特性分支都起源于主干,但它们并不是直接相关的——一个不是另一个的直接副本。2-URL合并是必要的。
“bar”分支已与主干同步到修订500。(如果不知道此修订号,可以使用“svn log”和/或“svn mergeinfo”命令。)trunk@500和bar@HEAD之间的差异包含与特性“bar”相关的完整更改集,没有其他更改。这些更改应用于“foo”分支。
在上面的图中,L标记了合并的左侧(trunk@500), R标记了右侧(bar@HEAD)。左侧和右侧之间的差异应用于目标工作复制路径,在本例中是“foo”分支的工作复制。
要执行合并,要有一个干净的“foo”分支的工作副本,并在其*目录中运行以下命令:
svn merge ^/trunk@ ^/bar
可以使用svn的diff命令预览2-URL合并所应用的确切更改,如果你没有可以合并到的干净工作副本,那么验证一下这一点是个好主意。在这种情况下:
svn diff ^/trunk@ ^/bar@HEAD
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-c [--change] ARG : the change made by revision ARG (like -r ARG-:ARG) 来自修订号ARG的更改(如使用-r ARG-:ARG的效果)
If ARG is negative this is like -r ARG:ARG- 如果ARG为负数,则其效果与-r ARG:ARG- 相同
If ARG is of the form ARG1-ARG2 then this is like ARG1:ARG2, where ARG1 is inclusive
如果ARG的形式是ARG1-ARG2,那么这就像ARG1:ARG2,其中ARG1是包含的
-N [--non-recursive] : obsolete; try --depth=files or --depth=immediates 已经废弃;尝试--depth=files或--depth=immediates标志
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--force : force deletions even if deleted contents don't match 即使删除内容不匹配也强制删除
--dry-run : try operation but make no changes 尝试操作但不造成更改
--diff3-cmd ARG : use ARG as merge command 使用ARG作为合并命令
--record-only : merge only mergeinfo differences 只有在合并信息不同时才合并
-x [--extensions] ARG : Specify differencing options for external diff or internal diff or blame. Default: '-u'.
为外部差异或内部差异或过失指定差异选项。默认值:'-u'。
Options are separated by spaces. Internal diff and blame take:
选项由空格分隔。内部差异和责备采取:
-u, --unified: Show lines of unified context 显示3行统一上下文
-b, --ignore-space-change: Ignore changes in amount of white space 忽略空白数量的更改
-w, --ignore-all-space: Ignore all white space 忽略所有空白
--ignore-eol-style: Ignore changes in EOL style 忽略EOL样式的更改
-U ARG, --context ARG: Show ARG lines of context 显示ARG上下文的行
-p, --show-c-function: Show C function name 显示C函数名
--ignore-ancestry : disable merge tracking; diff nodes as if related 禁用合并追踪;diff节点好像相关
--accept ARG : specify automatic conflict resolution action 指定自动冲突解决操作
('postpone', 'working', 'base', 'mine-conflict','theirs-conflict', 'mine-full', 'theirs-full',
'edit', 'launch', 'recommended')
(shorthand:'p', 'mc', 'tc', 'mf', 'tf', 'e', 'l', 'r') 对应的缩写
--reintegrate : deprecated 弃用
--allow-mixed-revisions : Allow operation on mixed-revision working copy. 允许在混合修订版本号的工作副本中的操作
Use of this option is not recommended! 这个选项不推荐使用
Please run 'svn update' instead. 请运行'svn update'命令来代替它
-v [--verbose] : print extra information 打印额外信息 Global options: //与上面相同,在此省略
将更改合并到工作副本中
对于每个合并的项,将打印一行,其中包含报告所采取的操作的字符。这些字的意思如下:
- A Added 添加
- D Deleted 删除
- U Updated 更新
- C Conflict 有冲突
- G Merged 合并
- E Existed 已存在
- R Replaced 替换
第一列中的字符报告关于项本身的内容。
第二列中的字符报告项的属性。
第三列中的“C”表示树冲突,而第一列和第二列中的“C”分别表示文件和属性值中的文本冲突。
-合并跟踪-
Subversion使用svn:mergeinfo属性来跟踪合并历史。此属性在合并开始时考虑以确定要合并什么,并在合并结束时更新以描述发生的合并。Mergeinfo仅在两个源位于同一历史行时使用——如果第一个源是第二个源的祖先,或者相反(例如,如果一个源最初是通过复制另一个源创建的)。这在使用同步合并和重新集成合并时得到验证和执行。
--ignore-ancestry 选项可以防止合并跟踪来忽略mergeinfo,既不考虑它,也不记录它。
-从外部存储库合并-
Subversion确实支持从外部存储库进行合并。虽然所有合并源url必须指向相同的存储库,但是合并目标工作副本可能来自与源不同的存储库。
然而,也有一些警告。最值得注意的是,合并源中创建的副本将转换为合并目标中的普通添加。此外,对于来自外部存储库的合并,不支持合并跟踪。
20.mergeinfo
格式:
. mergeinfo SOURCE[@REV] [TARGET[@REV]]
. mergeinfo --show-revs=WHICH SOURCE[@REV] [TARGET[@REV]]
1. 总结SOURCE和TARGET之间合并的历史。如图所示,从左到右:
- 树枝最年轻的共同祖先;
- 两个方向上的最新完整合并,以及将用于下一个完整合并的公共基;
- 每个分支顶端的存储库路径和修订号。
2. 在已合并到TARGET(使用-—show-revs=merge)或未合并到SOURCE(使用—-show-revs= qualified)的SOURCE上打印修订号。只打印SOURCE中至少有一个更改的修订。
如果提供--revision(-r),则筛选显示的信息,以仅显示与指定范围内的修订版本号相关的信息。修订号、日期和'HEAD'关键字是有效的范围值。
SOURCE和TARGET分别是源和目标分支url。(如果给定WC路径,则使用相应的基URL)。默认TARGET是当前工作目录('.')。REV指定要视为分支顶端的修订版本号;SOURCE的默认值是HEAD,TARGET的默认值是URL的HEAD或WC路径的BASE。
深度可以是'empty'或'infinity';默认值是'empty'。
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-R [--recursive] : descend recursively, same as --depth=infinity 向下递归,与--depth=infinity作用相同
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
-v [--verbose] : print extra information 打印额外信息
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--show-revs ARG : specify which collection of revisions to display('merged', 'eligible')
指定要显示的修订集合('merged', 'eligible')
--log : show revision log message, author and date 显示修订的日志信息、作者和日期
--incremental : give output suitable for concatenation 给出适合串联的输出 Global options: //与上面相同,在此省略
显示合并相关信息
21.mkdir
是否访问存储库:当访问库地址时是
格式:
. mkdir PATH...
. mkdir URL...
创建版本控制目录。
1. 由工作复制PATH指定的每个目录都在本地创建,并计划在下一次提交时添加。
2. URL指定的每个目录都是通过立即提交在存储库中创建的。
在这两种情况下,所有中间目录都必须已经存在,除非给出--parent选项。
选项:
Valid options:
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--parents : make intermediate directories 创建中间目录
-m [--message] ARG : specify log message ARG 指定日志信息(即注释)
-F [--file] ARG : read log message from file ARG 从文件ARG中读取日志信息
--force-log : force validity of log message source 强制日志消息源的有效性
--editor-cmd ARG : use ARG as external editor-cmd 使用ARG作为外部编辑器
--encoding ARG : treat value as being in charset encoding ARG 将值编码为ARG字符集编码格式的值
--with-revprop ARG : set revision property ARG in new revision using the name[=value] format
使用name[=value]格式在新版本中设置修订属性ARG Global options: //与上面相同,在此省略
在版本控制下创建新目录
举例:
1)PATH
userdeMBP:foo user$ svn mkdir /Users/user/foo/newdir
A newdir
2)URL,隐式运行了commit提交命令,所以需要-m
userdeMBP:foo user$ svn list svn://localhost/myCode 查看运行前
centos7/
versioned- userdeMBP:foo user$ svn mkdir svn://localhost/myCode/newdir -m "test midir URL command"
Committing transaction...
Committed revision . userdeMBP:foo user$ svn list svn://localhost/myCode //运行后果然生成了一个新目录
centos7/
newdir/
versioned-
22.move (mv, rename, ren)
是否访问存储库:当访问库地址时是
格式:
move SRC... DST
SRC和DST都可以是工作拷贝(WC)路径或url:
WC -> WC:移动工作副本中的项目,作为稍后提交的本地更改(带或不带进一步更改)
URL -> URL:直接在存储库中移动一个项目,立即在存储库中创建一个新的修订
所有SRCs必须是同一类型的。如果DST是一个现有目录,则源将作为DST的子目录添加。在移动多个源时,DST必须是一个现有目录。
WC -> WC移动的SRC和DST必须在同一个版本中提交。
此外,WC -> WC移动将拒绝移动混合修订子树。
为了避免不必要的冲突,建议在移动子树之前运行“svn update”将其更新为单个修订。
允许混合修订选项用于向后兼容性。
选项:
Valid options:
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--force : force operation to run 强制运行操作
--parents : make intermediate directories 创建中间目录
--allow-mixed-revisions : Allow operation on mixed-revision working copy. 允许在混合修订版本号的工作副本中的操作
Use of this option is not recommended! 这个选项不推荐使用
Please run 'svn update' instead. 请运行'svn update'命令来代替它
-m [--message] ARG : specify log message ARG 指定日志信息(即注释)
-F [--file] ARG : read log message from file ARG 从文件ARG中读取日志信息
--force-log : force validity of log message source 强制日志消息源的有效性
--editor-cmd ARG : use ARG as external editor-cmd 使用ARG作为外部编辑器
--encoding ARG : treat value as being in charset encoding ARG 将值编码为ARG字符集编码格式的值
--with-revprop ARG : set revision property ARG in new revision using the name[=value] format
使用name[=value]格式在新版本中设置修订属性ARG
-r [--revision] ARG : deprecated and ignored 弃用并忽略 Global options: //与上面相同,在此省略
在工作副本或存储库中移动(重命名)项目
举例:
将versioned-1改名为versioned-2:
userdeMBP:foo user$ svn move versioned- versioned-
A versioned-
D versioned-
23.patch
格式:
patch PATCHFILE [WCPATH]
将PATCHFILE中的unidiff补丁应用于工作拷贝WCPATH。
如果忽略WCPATH,则假设其值为'.'。
可以使用“svn diff”命令或第三方扩散工具生成适用于工作副本的unidiff补丁。
除了“svn diff”生成的Subversion属性差异外,PATCHFILE的任何非unidiff内容都将被忽略。
补丁中列出的更改将被应用或拒绝。
如果某个更改在其准确的行偏移量上不匹配,那么如果在其他地方发现与补丁提供的上下文行匹配,则可以在文件中更早或更晚地应用该更改。
还可以使用fuzz应用更改,这意味着在匹配更改时将忽略一行或多行上下文。
如果无法为更改找到匹配的上下文,则更改会发生冲突,并将其写入扩展名为.svnpatch.rej的拒绝文件。
对于每个打补丁的文件,将打印一行,其中包含报告所采取的操作的字符。这些字的意思如下:
A Added 添加
D Deleted 删除
U Updated 更新
C Conflict 冲突
G Merged (with local uncommitted changes) 合并(带着本地未呈递的更改)
在以“>”符号开头的行上报告应用偏移量或模糊的更改。你应该仔细检查这些更改。
如果补丁从一个文件中删除所有内容,则该文件将被计划删除。如果补丁创建了一个新文件,该文件将被调度为添加。使用'svn revert'撤消你不同意的删除和添加。
提示:如果补丁文件是用Subversion创建的,那么它将包含补丁将干净地应用到的修订N的数量(查找类似'--- foo/bar.txt(revision N)'这样的行)。
为了避免拒绝,首先使用“svn update -r N”更新到修订N,应用补丁,然后更新到HEAD修订。这样,冲突就可以交互式地解决。
选项:
Valid options:
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--dry-run : try operation but make no changes 尝试操作但不造成更改
--strip ARG : number of leading path components to strip from paths parsed from the patch file.
要从从补丁文件解析的路径中剥离的主要路径组件的数量
--strip is the default and leaves paths unmodified. 默认值,路径未修改
--strip would change the path 'doc/fudge/crunchy.html' to 'fudge/crunchy.html'.
将将'doc/fudge/crunchy.html'路径改变为'fudge/crunchy.html'
--strip would leave just 'crunchy.html' 只留下'crunchy.html'
The expected component separator is '/' on all platforms. A leading '/' counts as one component.
预期的组件分隔符在所有平台上都是'/'。前导'/'是一个组成部分。
--reverse-diff : apply the unidiff in reverse 反过来应用unidiff
--ignore-whitespace : ignore whitespace during pattern matching 在模式匹配期间忽略空格 Global options: //与上面相同,在此省略
对工作副本应用补丁
24.propdel (pdel, pd)
是否访问存储库:当访问库地址时是
格式:
. propdel PROPNAME [PATH...]
. propdel PROPNAME --revprop -r REV [TARGET]
1. 删除工作副本中的版本化属性。
2. 删除repos修订版本中的未版本化的远程属性。
TARGET只确定要访问哪个存储库。
有关svn:*特殊属性的描述,请参见“svn help propset”。
选项:
Valid options:
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
-R [--recursive] : descend recursively, same as --depth=infinity 向下递归,与--depth=infinity作用相同
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
--revprop : operate on a revision property (use with -r) 在修订版本号属性中操作(使用-r)
--changelist [--cl] ARG : operate only on members of changelist ARG 只对更改列表,即ARG成员进行操作 Global options: //与上面相同,在此省略
从文件、目录或修订中删除属性
举例:
svn propdel svn:mime-type someFile //从someFile上移除svn:mime-type这个属性
25.propedit (pedit, pe)
是否访问存储库:当访问库地址时是
格式:
. propedit PROPNAME TARGET...
. propedit PROPNAME --revprop -r REV [TARGET]
1. 在工作副本或存储库中编辑版本化的属性。
2. 在repos修订版本中编辑未版本的远程属性。
TARGET只确定要访问哪个存储库。
有关svn:*特殊属性的描述,请参见“svn help propset”。
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
--revprop : operate on a revision property (use with -r) 在修订版本号属性中操作(使用-r)
-m [--message] ARG : specify log message ARG 指定日志信息(即注释)
-F [--file] ARG : read log message from file ARG 从文件ARG中读取日志信息
--force-log : force validity of log message source 强制日志消息源的有效性
--editor-cmd ARG : use ARG as external editor-cmd 使用ARG作为外部编辑器
--encoding ARG : treat value as being in charset encoding ARG 将值编码为ARG字符集编码格式的值
--with-revprop ARG : set revision property ARG in new revision using the name[=value] format
使用name[=value]格式在新版本中设置修订属性ARG
--force : force operation to run 强制操作运行 Global options: //与上面相同,在此省略
使用外部编辑器编辑属性
举例:
svn propedit svn:keywords versioned- //修改versioned-2上的svn:keywords属性
26.propget (pget, pg)
是否访问存储库:当访问库地址时是
格式:
. propget PROPNAME [TARGET[@REV]...]
. propget PROPNAME --revprop -r REV [TARGET]
1. 打印版本化的属性。如果指定,REV将确定首先查找目标的修订版本。
2. 在repos修订上打印未版本的远程属性。
TARGET只确定要访问哪个存储库。
使用--verbose,目标路径和属性名在每个值之前打印在不同的行上,比如“svn proplist——verbose”。
否则,如果有多个目标或'empty'以外的深度,则在每个值之前的同一行上打印目标路径。
默认情况下,在属性值之后会打印一个额外的换行符,这样输出看起来很漂亮。对于单个目标,depth为'empty'和无—show-inherited-props时,可以使用--no-newline选项禁用该选项(例如,在将二进制属性值重定向到文件时非常有用)。
有关svn:*特殊属性的描述,请参见“svn help propset”。
选项:
Valid options:
-v [--verbose] : print path, name and value on separate lines 在单独的行上打印路径、名称和值
-R [--recursive] : descend recursively, same as --depth=infinity 向下递归,与--depth=infinity作用相同
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
--revprop : operate on a revision property (use with -r) 在修订版本号属性中操作(使用-r)
--strict : (deprecated; use --no-newline) 弃用,现在使用--no-newline
--no-newline : do not output the trailing newline 不输出尾部换行符
--xml : output in XML 以XML格式输出
--changelist [--cl] ARG : operate only on members of changelist ARG 只对更改列表,即ARG的成员进行操作
--show-inherited-props : retrieve properties set on parents of the target检索目标的父节点上设置的属性 Global options: //与上面相同,在此省略
将属性的值打印到文件、目录或修订版本上
举例:
svn propget svn:keywords versioned- //从versioned-2中取得svn:keywords属性的值
27.proplist (plist, pl)
是否访问存储库:当访问库地址时是
格式:
. proplist [TARGET[@REV]...]
. proplist --revprop -r REV [TARGET]
1. 列出版本化的属性。如果指定,REV将确定首先查找目标的修订版本。
2. 列出在repos修订上的未版本的远程属性。
TARGET只确定要访问哪个存储库。
使用--verbose,属性值也会打印出来,比如“svn propget --verbose”。使用--quiet,路径没有被打印出来。
有关svn:*特殊属性的描述,请参见“svn help propset”。
选项:
Valid options:
-v [--verbose] : print path, name and value on separate lines 在单独的行上打印路径、名称和值
-R [--recursive] : descend recursively, same as --depth=infinity 向下递归,与--depth=infinity作用相同
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--revprop : operate on a revision property (use with -r) 在修订版本号属性中操作(使用-r)
--xml : output in XML 以XML格式输出
--changelist [--cl] ARG : operate only on members of changelist ARG 只对更改列表,即ARG的成员进行操作
--show-inherited-props : retrieve properties set on parents of the target检索目标的父节点上设置的属性 Global options: //与上面相同,在此省略
列出文件、目录或修订中的所有属性
举例:
svn proplist --verbose versioned-2
28.propset (pset, ps)
是否访问存储库:当访问库地址时是
格式:
. propset PROPNAME PROPVAL PATH...
. propset PROPNAME --revprop -r REV PROPVAL [TARGET]
1. 更改工作副本中版本化的文件或目录属性。
2. 更改存储库修订上的未版本化属性。(TARGET只决定访问哪个存储库。)
可以使用--file选项而不是PROPVAL提供该值
以“svn:”开头的属性名是保留的。
Subversion识别文件上的以下特殊版本属性:
svn:keywords -要展开的关键字。有效的关键词是:
- URL, HeadURL - The URL for the head version of the file. 文件头部版本的URL
- Author, LastChangedBy - The last person to modify the file. 最后一个修改文件的人
- Date, LastChangedDate - The date/time the file was last modified. 文件最后一次修改的日期/时间
- Rev, Revision, - The last revision the file changed. 文件更改的最后一个修订版本
- LastChangedRevision
- Id - A compressed summary of the previous four.前4个的压缩摘要
- Header - Similar to Id but includes the full URL. 类似于Id,但包含完整的URL
Custom keywords can be defined with a format string separated from the keyword name with '='. Valid format substitutions are:
自定义关键字可以用格式字符串定义,格式字符串与关键字名称用'='分隔。有效的格式替换如下:
%a - The author of the revision given by %r. 由%r给出的修订的作者
%b - The basename of the URL of the file. 文件URL的basename
%d - Short format of the date of the revision given by %r. 由%r提供的修订日期的简短格式
%D - Long format of the date of the revision given by %r. %r给出的修订日期的长格式
%P - The file's path, relative to the repository root. 文件相对于存储库根目录的路径
%r - The number of the revision which last changed the file. 最后修改文件的版本号
%R - The URL to the root of the repository. 存储库根目录的URL
%u - The URL of the file. 文件的URL
%_ - A space (keyword definitions cannot contain a literal space).空格(关键字定义不能包含文字空格)
%% - A literal '%'. 字面上的“%”
%H - Equivalent to %P%_%r%_%d%_%a. 相当于%P%_%r%_%d%_%a
%I - Equivalent to %b%_%r%_%d%_%a. 相当于%b%_%r%_%d%_%a
示例自定义关键字定义:: MyKeyword=%r%_%a%_%P
一旦为文件定义了自定义关键字,它就可以像其他关键字一样在文件中使用: $MyKeyword$
svn:executable - 如果存在,使文件可执行。使用'svn propdel svn:executable PATH...'去清除
svn:eol-style - “native”、“LF”、“CR”、“CRLF”中的一个
svn:mime-type - 文件的mime类型。用于确定
是否合并文件,以及如何从Apache服务它。
以“text/”开头的mimetype(或缺少的mimetype)被视为文本。其他的都是二进制的。
svn:needs-lock - 如果存在,表示文件在修改前应该被锁定。使工作副本文件在未锁定时为只读。使用'svn propdel svn:needs-lock PATH...'去清除。
Subversion识别目录上的以下特殊版本属性:
svn:ignore - 要忽略的文件glob模式列表,每行一个.
svn:global-ignores - 类似svn:ignore,但可继承.
svn:auto-props - 当文件被添加或导入时自动设置属性。包含键-值对,每行一个,格式如下:
PATTERN = PROPNAME=VALUE[;PROPNAME=VALUE ...]
例子 (文字';'通过添加另一个';'来转义):
*.html = svn:eol-style=native;svn:mime-type=text/html;; charset=UTF8
递归地应用于它所设置的目录下添加或导入的所有文件。请参阅客户端配置文件中的[auto-props]。
svn:externals - 模块说明符列表,每行一个,以下格式类似于'svn checkout'的语法:
[-r REV] URL[@PEG] LOCALPATH
例子:
http://example.com/repos/zig foo/bar
LOCALPATH相对于具有此属性的目录.
要将外部固定到已知的修订,请指定可选的REV,如:
-r25 http://example.com/repos/zig foo/bar
若要在路径上明确标识可能随后被删除或重命名的元素,请指定可选的PEG修订,如:
-r25 http://example.com/repos/zig@42 foo/bar
URL可以是一个完整的URL,也可以是一个相对的URL,开头是:
- ../ 到提取的外部的父目录
- ^/ 存储库的根目录
- / 到服务器根目录
- // 指向URL模式
- ^/../ 到相同SVNParentPath位置下的兄弟存储库
不鼓励使用以下格式,但支持与Subversion 1.4及更早的客户端进行互操作:
LOCALPATH [-r PEG] URL
具有peg修订支持的不明确格式'relative_path relative_path'被视为'relative_url relative_path'.
以“#”字符开头的行被忽略.
选项:
Valid options:
-F [--file] ARG : read log message from file ARG 从文件ARG中读取日志信息
--encoding ARG : treat value as being in charset encoding ARG 将值编码为ARG字符集编码格式的值
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
--targets ARG : pass contents of file ARG as additional args 传递ARG文件的内容作为额外参数
-R [--recursive] : descend recursively, same as --depth=infinity 向下递归,与--depth=infinity作用相同
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--revprop : operate on a revision property (use with -r) 在修订版本号属性中操作(使用-r)
使用name[=value]格式在新版本中设置修订属性ARG
--force : force operation to run 强制操作运行
--changelist [--cl] ARG : operate only on members of changelist ARG 只对更改列表,即ARG成员进行操作 Global options: //与上面相同,在此省略
在文件、目录或修订版本上设置属性的值
举例:
1)
svn propset svn:mime-type image/jpeg myPicture.jpg //给file.jpg附加属性svn:mime-type 其值为image/jpeg
2)
svn propset --revprop -r svn:log "add some log info" //给版本2补上log message
3)
svn propset svn:ignore '.classpath' . //在本地忽略掉.classpath文件
29.relocate
格式:
. relocate FROM-PREFIX TO-PREFIX [PATH...]
. relocate TO-URL [PATH]
重写工作复制URL元数据以仅反映语法更改。
当存储库的根URL发生更改(例如模式或主机名发生更改),但是你的工作副本仍然反映相同存储库中的相同目录时,可以使用此方法。
1. FROM-PREFIX和TO-PREFIX分别是工作副本的当前url和新url的初始子字符串。(如果愿意,可以指定完整的新旧url。)使用'svn info'确定当前的工作副本URL。
2. TO-URLL是用于PATH的(完整的)新存储库URL。
选项:
Valid options:
--ignore-externals : ignore externals definitions Global options: //与上面相同,在此省略
重新定位工作副本以指向不同的存储库根URL
举例:
svn relocate http:// svn:// project1 project2
svn relocate http://www.example.com/repo/project svn://svn.example.com/repo/project
30.resolve
是否访问存储库:否
格式:
resolve [PATH...]
默认情况下,在PATH上执行交互式冲突解决。
在这种模式下,默认情况下命令是递归的(深度为'infinity')。
--accept=ARG选项防止交互式提示,并强制以ARG指定的方式解决PATH上的冲突。
在这种模式下,默认情况下命令不是递归的(深度'empty')。
冲突路径不能使用'svn commit'提交,除非它被标记为使用'svn resolve'解析。
Subversion知道三种类型的冲突:
文本冲突
属性冲突
树冲突。
1)当对文件内容进行重叠更改时,会发生文本冲突。文本冲突通常通过编辑冲突的文件或使用合并工具(可能是外部程序)来解决。
“svn resolve”提供可用于自动编辑文件的选项(如'mine-full'或'theirs-conflict'),但这些选项仅在可以完全放弃本地或传入更改的情况下有用。
2)属性冲突通常通过编辑冲突属性的值来解决(可以从交互式提示符中编辑,也可以使用“svn propedit”编辑)。与文本冲突一样,存在自动编辑属性的选项,放弃某些更改而选择其他更改。
3)当对目录结构进行更改时,以及当此更改不能应用于工作副本而不影响其他更改(文本更改、属性更改或目录结构的其他更改)时,就会发生树冲突。关于树冲突的简要信息由'svn status'和'svn info'命令显示。
在交互模式下,“svn resolve”将尝试详细描述树冲突,并可能提供自动解决冲突的选项。
建议尽可能使用这些自动选项,而不要尝试手动解决树冲突。
如果无法自动解决树冲突,建议在尝试解决冲突之前找出冲突发生的原因。
“svn log -v”命令可用于检查在过去的修订中所做的结构更改,甚至可能用于检查其他分支。
'svn help log'描述了这些结构更改是如何显示的。
一旦冲突的“传入”更改被识别为'svn log',当前的“本地”工作副本状态应该进行检查和调整,以解决冲突。这可能涉及手动编辑文件或使用'svn merge'。可能需要使用“svn revert”丢弃一些本地更改。文件或目录可能需要复制、删除或移动。
选项:
Valid options:
--targets ARG : pass contents of file ARG as additional args 传递ARG文件的内容作为额外参数
-R [--recursive] : descend recursively, same as --depth=infinity 向下递归,与--depth=infinity作用相同
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--accept ARG : specify automatic conflict resolution source。 指定自动冲突解决源
('base', 'working', 'mine-conflict','theirs-conflict', 'mine-full', 'theirs-full') Global options: //与上面相同,在此省略
解决工作拷贝文件或目录上的冲突
将冲突的文件标记为已解决,并且删掉冲突产生的临时文件。注意这个命令并不是能把冲突解决,解决冲突还是得靠人工。
举例:
svn resolve --accept mine-full versioned-
31.resolved
是否访问存储库:否
格式:
resolved PATH...
注意:此子命令不从语义上解决冲突或删除冲突标记;它只是删除与冲突相关的工件文件,并允许再次提交路径。它已经被弃用,现支持运行'svn resolve --accept working'命令。
选项:
Valid options:
--targets ARG : pass contents of file ARG as additional args 传递ARG文件的内容作为额外参数
-R [--recursive] : descend recursively, same as --depth=infinity 向下递归,与--depth=infinity作用相同
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息 Global options: //与上面相同,在此省略
删除工作拷贝文件或目录上的“冲突”状态
32.revert
是否访问存储库:否
格式:
revert PATH...
在PATH处或PATH内恢复工作副本中的更改,如果有冲突标记,也要删除它们。
此子命令不还原已提交的更改。
有关撤消已提交的更改的信息,请搜索'svn help merge'的输出以查找'undo'。
选项:
Valid options:
--targets ARG : pass contents of file ARG as additional args 传递ARG文件的内容作为额外参数
-R [--recursive] : descend recursively, same as --depth=infinity 向下递归,与--depth=infinity作用相同
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--changelist [--cl] ARG : operate only on members of changelist ARG 只对更改列表,即ARG成员进行操作 Global options: //与上面相同,在此省略
还原原始工作副本状态(撤消本地更改)
svn revert --depth=infinity . //将整个目录所有文件还原
33.status (stat, st)
是否访问存储库:加上--show-updates参数时会
格式:
status [PATH...]
如果没有args,只打印本地修改的项(没有网络访问)。
使用-q,只打印关于本地修改项的摘要信息。
使用-u,添加工作修订和服务器过期信息。
使用-v,打印每个项目的完整修订信息。
输出的前7列的宽度是每个字符的宽度:
第一列:表示是否添加、删除或以其他方式更改项
' ' no modifications 无修改
'A' Added 添加
'C' Conflicted 冲突
'D' Deleted 删除
'I' Ignored 忽视
'M' Modified 修改
'R' Replaced 替换
'X' an unversioned directory created by an externals definition 被一个外部定义创造的未版本化目录
'?' item is not under version control 不在版本控制下的条目
'!' item is missing (removed by non-svn command) or incomplete 丢失(被非svn命令移除)或不完全的条目
'~' versioned item obstructed by some item of a different kind 被来自一些不同类型的条目妨碍的版本化条目
第二列:文件或目录属性的修改
' ' no modifications 无修改
'C' Conflicted 冲突
'M' Modified 修改
第三列:工作副本是否锁定,以便由另一个Subversion客户端修改工作副本进行写入
' ' not locked for writing 为了写入没有锁定
'L' locked for writing 为了写入而上锁
第四列:计划提交将创建一个副本(添加历史记录)
' ' no history scheduled with commit (item was newly added) (条目是新添加的)
'+' history scheduled with commit (item was copied) 没有使用commit调度历史记录
第五列:是切换项还是文件外部
' ' normal 正常
'S' the item has a Switched URL relative to the parent 项具有相对于父项的切换URL
'X' a versioned file created by an eXternals definition 由外部定义创建的版本化文件
第六列:是否将项锁定在存储库中进行独占提交(无-u)
' ' not locked by this working copy 未被此工作副本锁定
'K' locked by this working copy, but lock might be stolen or broken(with -u)
被此工作副本锁定,但锁可能被盗或被破坏(使用-u)
' ' not locked in repository, not locked by this working copy
没有被锁定在存储库中,没有被这个工作副本锁定
'K' locked in repository, lock owned by this working copy
锁定在存储库中,此工作副本所拥有的锁定
'O' locked in repository, lock owned by another working copy
锁定在存储库中,属于另一个工作副本的锁定
'T' locked in repository, lock owned by this working copy was stolen
锁定在存储库中,此工作副本所拥有的锁被盗
'B' not locked in repository, lock owned by this working copy is broken
未锁定在存储库中,此工作副本所拥有的锁被破坏
第七列:项目是否为树冲突的受害者
' ' normal 正常
'C' tree-Conflicted 树冲突
如果项目是树冲突受害者,则在项目的状态行之后打印另一行,解释冲突的性质。
过时的资料列在第九列(以-u):
'*' a newer revision exists on the server 服务器上存在一个更新的修订
' ' the working copy is up to date 工作副本是最新的
其余字段为可变宽度,以空格分隔:
- 工作修订(-u或-v;'-'如果项目被复制)
- 最后提交的修订和最后提交的作者(带-v)
- 工作复制路径始终是最后一个字段,因此它可以包含空格。
在需要工作修订、最近提交的修订或最后提交的作者的情况下,问号('?')的存在表明,在给定项的状态下,信息是未知的或不相关的(例如,当项是复制操作的结果时)。
问号用作可视化占位符,以便于解析。
选项:
Valid options:
-u [--show-updates] : display update information 显示更新内容
-v [--verbose] : print extra information 打印额外信息
-N [--non-recursive] : obsolete; try --depth=files or --depth=immediates 已经废弃;尝试--depth=files或--depth=immediates标志
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--no-ignore : disregard default and svn:ignore and svn:global-ignores property ignores
忽略默认值和svn:ignore和svn:global-ignores属性忽略
--incremental : give output suitable for concatenation 给出适合串联的输出
--xml : output in XML 以XML格式输出
--ignore-externals : ignore externals definitions 忽略外部定义
--changelist [--cl] ARG : operate only on members of changelist ARG 只对ARG这个changelist成员进行操作 Global options: //与上面相同,在此省略
打印工作复制文件和目录的状态
例子:
userdeMBP:foo user$ svn status
A newdir
D unversioned-
D versioned-
> moved to versioned-
A + versioned-
> moved from versioned- userdeMBP:foo user$ svn status -u
A * - newdir
D O versioned-
> moved to versioned-
A + - versioned-
> moved from versioned-
D * unversioned-
* .
Status against revision: userdeMBP:foo user$ svn status --show-updates --verbose
A * - ? ? newdir
boss centos7/.vagrant
boss centos7/.vagrant/machines
boss centos7/.vagrant/machines/default
boss centos7/.vagrant/machines/default/virtualbox
boss centos7/.vagrant/machines/default/virtualbox/vagrant_cwd
boss centos7/.vagrant/rgloader
boss centos7/.vagrant/rgloader/loader.rb
boss centos7/Vagrantfile
boss centos7
D O boss versioned-
> moved to versioned-
A + - boss versioned-
> moved from versioned-
D * boss unversioned-
* boss .
Status against revision:
34.switch (sw)
是否访问存储库:是
格式:
usage: . switch URL[@PEGREV] [PATH]
. switch --relocate FROM-PREFIX TO-PREFIX [PATH...]
1. 在存储库中更新工作副本去镜像新的URL。
这种行为类似于'svn update',是将工作副本移动到同一存储库中的分支或标记的方式。
如果指定,PEGREV将确定首先查找目标的修订版本。
如果使用--force,如果开关试图添加相同的路径,工作副本中的未版本化阻塞路径不会自动导致失败。如果阻塞路径的类型(文件或目录)与存储库中相应的路径相同,那么它将被版本化,但其内容在工作副本中保留为“原样”。
这意味着一个阻塞目录的未版本化的子目录也可能阻塞并成为版本化的。对于文件,阻塞和存储库之间的任何内容差异都被视为对工作副本的本地修改。存储库中的所有属性都应用于阻塞路径。
使用--set-depth选项在此操作的目标上设置新的工作副本深度。
默认情况下,Subversion将拒绝将工作复制路径切换到一个新的URL,该URL与Subversion没有共享的版本控制祖先。
使用“--ignore-ancestry”选项覆盖这个完整性检查。
2. “--relocate”选项已被弃用。这个语法相当于'svn relocate FROM-PREFIX TO-PREFIX [PATH]'命令。
请参阅'svn help update' 以获得报告所采取的操作的可能字符列表。
选项:
Valid options:
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range) 变量ARG可以设置为ARG1:ARG2范围格式
A revision argument can be one of:修订号参数可为下面之一
NUMBER revision number 修订号
'{' DATE '}' revision at start of the date 在该日期开始时的修订
'HEAD' latest in repository 存储库中的最新版
'BASE' base rev of item's working copy 项目工作副本的基本修订版
'COMMITTED' last commit at or before BASE 在BASE中或前的最后一次上传
'PREV' revision just before COMMITTED 在COMMITTED之前的修订
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
-N [--non-recursive] : obsolete; try --depth=files or --depth=immediates 已经废弃;尝试--depth=files或--depth=immediates标志
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--force : force operation to run 强制操作运行
--ignore-externals : ignore externals definitions 忽略外部定义
--set-depth ARG : set new working copy depth to ARG ('exclude','empty', 'files', 'immediates', or 'infinity')
设置新的工作副本长度为ARG('exclude','empty', 'files', 'immediates', or 'infinity')
--diff3-cmd ARG : use ARG as merge command 使用ARG作为合并命令
--ignore-ancestry : allow switching to a node with no common ancestor 允许切换到没有共同祖先的节点
--accept ARG : specify automatic conflict resolution action 指定自动冲突解决操作
('postpone', 'working', 'base', 'mine-conflict','theirs-conflict', 'mine-full', 'theirs-full','edit', 'launch', 'recommended')
(shorthand:'p', 'mc', 'tc', 'mf', 'tf', 'e', 'l', 'r') 对应的缩写
--relocate : deprecated; use 'svn relocate' 弃用;现在使用'svn relocate' Global options: //与上面相同,在此省略
将工作副本更新到同一存储库中的另一个URL
举例:
svn switch ^/branches/.x-release
svn switch --relocate http:// svn://
svn switch --relocate http://www.example.com/repo/project svn://svn.example.com/repo/project
35.unlock
是否访问存储库:是
格式:
unlock TARGET...
解锁工作复制路径或url
选项:
Valid options:
--targets ARG : pass contents of file ARG as additional args 传递文件ARG的内容作为额外参数
--force : break locks 打破锁
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息 Global options: //与上面相同,在此省略
使用--force断开另一个用户或工作副本持有的锁
举例,解锁之前lock处上锁的文件:
userdeMBP:foo user$ svn unlock svn://localhost/myCode/versioned-1
'svn://localhost/myCode/versioned-1' unlocked.
36.upgrade
是否访问存储库:是
格式:
upgrade [WCPATH...]
保留局部修改
选项:
Valid options:
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息 Global options: //与上面相同,在此省略
升级工作副本的元数据存储格式
下面的内容还在实验阶段,先了解即可
37.x-shelve (shelve)
格式:
. x-shelve [--keep-local] NAME [PATH...]
. x-shelve --delete NAME
. x-shelve --list
1. 将给定路径中的本地更改保存到补丁文件中,并从WC中恢复该更改,除非给出了“--keep-local”。
如果日志消息中包含“-m”或“-F”,则将其包含在补丁文件的开头。
2. 删除搁置的更改名称。(保存备份,命名为'.bak'的扩展)。
3.列举搁置更改。包括任何日志消息的第一行和关于更改内容的一些细节,除非给出“-q”。
可以搁置的更改类型是“svn diff”和“svn patch”支持的更改。目前不支持以下内容:合并信息更改(mergeinfo changes)、copies, moves, mkdir, rmdir、“二进制”内容('binary' content)、不可提交状态(uncommittable states)
要恢复搁置的更改,请使用“svn x-unshelve NAME”。
搁置的更改存储在<WC>/.svn/shelves/中
搁置功能是实验性的。这个命令很可能在下一个版本中更改,并且不保证向后兼容。
选项:
Valid options:
--delete : delete the shelved patch 删除搁置的补丁
--list : list shelved patches 列举搁置的补丁
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--dry-run : try operation but make no changes 尝试操作但不造成更改
--keep-local : keep path in working copy 保持工作副本中的路径
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
通过depth ARG ('empty', 'files','immediates', or 'infinity')设置来限制操作
--targets ARG : pass contents of file ARG as additional args 传递文件ARG的内容作为额外参数
--changelist [--cl] ARG : operate only on members of changelist ARG 只对更改列表,即ARG的成员进行操作
-m [--message] ARG : specify log message ARG 指定日志信息(即注释)
-F [--file] ARG : read log message from file ARG 从文件ARG中读取日志信息
--force-log : force validity of log message source 强制日志消息源的有效性
--editor-cmd ARG : use ARG as external editor-cmd 使用ARG作为外部编辑器
--encoding ARG : treat value as being in charset encoding ARG 将值编码为ARG字符集编码格式的值 Global options: //与上面相同,在此省略
把本地更改先放在一边,就像把它放在架子上一样
38.x-unshelve (unshelve)
格式:
. x-unshelve [--keep-shelved] [NAME]
. x-unshelve --list
1. 将搁置的更改名称应用于工作副本。
删除补丁,除非给出'--keep-shelved'选项。(保存备份,命名为'.bak'的扩展)。
名称默认为最近搁置的更改。
2. 搁置更改列表。包括任何日志消息的第一行和关于更改内容的一些细节,除非给出“-q”。
未搁置的更改与WC中已经存在的更改之间的任何冲突都将以与'svn patch'相同的方式处理,即创建一个“拒绝”文件。
搁置功能是实验性的。这个命令很可能在下一个版本中更改,并且不保证向后兼容。
选项:
Valid options:
--keep-shelved : do not delete the shelved patch 不删除搁置的补丁
--list : list shelved patches 列举搁置的补丁
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息
--dry-run : try operation but make no changes 尝试操作但不造成更改 Global options: //与上面相同,在此省略
将搁置的更改带回WC中的本地更改
39.x-shelves (shelves)
格式:
x-shelves
在WC中将搁置更改恢复到本地更改搁置特性是实验性的。这个命令很可能在下一个版本中更改,并且不保证向后兼容。
选项:
Valid options:
-q [--quiet] : print nothing, or only summary information 什么都不打印,或者只是总结信息 Global options: //与上面相同,在此省略
列举搁置的变化