This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.
svnmucc — 基于 URL, 对 Subversion 仓库执行一个或多个操作, 在一个版本 号中提交所有的修改.
svnmucc
ACTION...
利用 svnmucc, 用户可以在没有工作副本的情况下向
仓库提交修改. 它允许用户基于 URL 直接操作仓库. 每一次调用
svnmucc 都可以执行一个或多个
ACTION
, 并且操作产生的所有修改都是在同一个
版本号中完成提交.
svnmucc 支持的操作 (及其参数) 有以下这些, 它们 可以以各种组合出现在命令行上:
REV
SRC-URL
DST-URL
把版本号为 REV
且位于
SRC-URL
的文件或目录复制到
DST-URL
.
URL
在 URL
创建一个新目录.
URL
的父目录必须已经存在 (或者说
父目录将会被前面的 svnmucc 操作创建),
命令无法自动创建中间目录.
SRC-URL
DST-URL
把位于 SRC-URL
的文件或目录移动到
DST-URL
.
URL
删除位于 URL
的文件或目录.
SRC-FILE
URL
在 URL
添加一个新文件, 或者修改
位于 URL
的已经存在的文件, 命令把
本地文件 SRC-FILE
的内容复制到新
文件或已有的文件上. 如果 SRC-FILE
是单连字符 -
, svnmucc
将从标准输入中读取文件内容.
NAME
VALUE
URL
把 URL
的属性
NAME
的值设置成
VALUE
.
NAME
FILE
URL
把 URL
的属性
NAME
的值设置成文件
FILE
的内容.
NAME
URL
删除 URL
上的属性
NAME
.
svnmucc 的选项都是全局的, 包括:
--config-dir
DIR
告诉 svnmucc 从指定的目录中读取配置信息,
而不是从默认目录 (用户家目录里的 .subversion
)
中读取.
--config-option
CONFSPEC
在命令运行期间, 设置运行时配置选项的值.
CONFSPEC
是一个字符串, 指定了运行时
配置选项的名字空间, 选项名和选项值, 格式是
FILE
:SECTION
:OPTION
=[VALUE
].
其中, FILE
和
SECTION
分别是运行时配置文件
(config
或 servers
)
和节, 它们包含了用户希望修改的选项.
OPTION
是选项名,
VALUE
是选项值 (如果有的话). 例如,
为了临时禁止 HTTP 压缩, 可以写成
--config-option=servers:global:http-compression=no
.
选项 --config-option
可以在命令行上出现多次,
从而同时修改多个选项.
--extra-args
(-X
)
ARGFILE
从文件 ARGFILE
读取额外的命令行
参数, 每行一个. 如果 ARGFILE
是
单连字符 -
, svnmucc
将从标准输入中读取额外的命令行参数.
--file
(-F
)
MSGFILE
从文件 MSGFILE
中读取日志消息.
--help
(-h
,
-?
)
显示命令的帮助信息, 然后退出.
--message
(-m
)
MSG
使用 MSG
作为日志消息.
--no-auth-cache
禁止在 Subversion 运行时配置目录中缓存认证信息 (例如用户名和密码).
--non-interactive
禁止所有的交互性提示 (例如请求用户输入认证证书).
--revision
(-r
)
REV
把版本号 REV
作为
svnmucc 操作所导致的所有修改的基础版本号.
如果用户需要使用 svnmucc 修改已存在的版本
化数据, 那么你应该习惯性地使用该选项, 从而避免在无意间撤消
其他同事几乎在同一时间提交的修改.
--root-url
(-U
)
ROOT-URL
把 ROOT-URL
作为其他 URL 目标
的基础 URL, 其他 URL 目标将被看作是相对于
ROOT-URL
的路径.
ROOT-URL
并不一定就是仓库的根 URL
(例如由 svn info 输出的仓库根 URL), 它可以
是任意的 URL, 只要它是 svnmucc 命令行上所
指定的 URL 目标的公共前缀部分即可.
--password
(-p
)
PASSWD
指定 Subversion 用户密码, 如果没有指定密码, 或者密码不正确, 在必要时 Subversion 将会提示用户再次输入密码.
--username
NAME
指定 Subversion 用户名, 如果没有指定或用户名不正确, Subversion 在必要时会提示用户重新输入.
--version
输出程序的版本信息, 然后退出.
--with-revprop
NAME
=VALUE
把版本号属性 NAME
的值设置成
VALUE
.
为了在没有工作副本的情况下安全地修改文件, 我们可以这样做: 先用 svn cat 把文件的当前内容下载到本地, 然后再用 svnmucc put 把更新后的文件提交到仓库中.
$ # Calculate some convenience variables. $ export FILEURL=http://svn.example.com/projects/sandbox/README $ export BASEREV=`svn info ${FILEURL} | \ grep '^Last Changed Rev' | cut -d ' ' -f 2` $ # Get a copy of the file's current contents. $ svn cat ${FILEURL}@${BASEREV} > /tmp/README.tmpfile $ # Edit the (copied) file. $ vi /tmp/README.tmpfile $ # Commit the new content for our file. $ svnmucc -r ${BASEREV} put README.tmpfile ${FILEURL} \ -m "Tweak the README file." r24 committed by harry at 2013-01-21T16:21:23.100133Z # Cleanup after ourselves. $ rm /tmp/README.tmpfile
使用类似的思路修改文件或目录的属性, 只不过这次要把命令换成 svn propget 和 svnmucc propsetf.
$ # Calculate some convenience variables. $ export PROJURL=http://svn.example.com/projects/sandbox $ export BASEREV=`svn info ${PROJURL} | \ grep '^Last Changed Rev' | cut -d ' ' -f 2` $ # Get a copy of the directory's "license" property value. $ svn -r ${BASEREV} propget license ${PROJURL} > /tmp/prop.tmpfile $ # Tweak the property. $ vi /tmp/prop.tmpfile $ # Commit the new property value. $ svnmucc -r ${BASEREV} propsetf prop.tmpfile ${PROJURL} \ -m "Tweak the project directory 'license' property." r25 committed by harry at 2013-01-21T16:24:11.375936Z # Cleanup after ourselves. $ rm /tmp/prop.tmpfile
下面再看看如何在一次调用中完成多个操作.
为了实现 “移动标签” (重复使用同一个标签名, 指向 代码的不同版本, 例如总是指向当前最新的稳定版), 可以使用 svnmucc rm 和 svnmucc cp:
$ svnmucc -U http://svn.example.com/projects/doohickey \ rm tags/latest-stable \ cp HEAD trunk tags/latest-stable \ -m "Slide the 'latest-stable' tag forward." r134 committed by harry at 2013-01-12T11:02:16.142536Z $
在上面的例子里, 我们通过使用选项 --root-url
(-U
) 指定了一个基础 URL, 其他参数中的 URL 将被当
成相对 URL, 从而减少打字工作.
下面的例子展示了如何使用 svnmucc 创建一个新 标签, 这个标签删除了在发布版中不需要的一个目录, 同时还添加了一个 用于描述发布版的文件:
$ echo "This is the 1.2.0 release." | \ svnmucc -U http://svn.example.com/projects/doohickey \ -m "Tag the 1.2.0 release." \ -- \ cp HEAD trunk tags/1.2.0 \ rm tags/1.2.0/developer-notes \ put - tags/1.2.0/README.tag r164 committed by cmpilato at 2013-01-22T05:26:15.563327Z $ svn log -c 164 -v http://svn.example.com/projects/doohickey ------------------------------------------------------------------------ r164 | cmpilato | 2013-01-22 00:26:15 -0500 (Tue, 22 Jan 2013) | 1 line Changed paths: A /tags/1.2.0 (from /trunk:163) A /tags/1.2.0/README.tag D /tags/1.2.0/developer-notes Tag the 1.2.0 release. $
上面的例子不仅展示了如何在 svnmucc 的一次调用
中完成多种不同的操作, 还展示了如何从标准输入读取文件的内容. 注意我
们还在命令行中使用了双连字符 --
, 用于告诉
svnmucc 在 --
的右边已经没有
更多的选项了, 从而避免右边的单连字符 -
被
svnmucc 当成选项开始的标志.