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 当成选项开始的标志.