本节内容正在编写中,可能随时发生变化,可能无法准确描述 Apache™ Subversion® 软件的任何已发布版本。为避免信息过时,请勿将本页设为书签,也请勿将其推荐给他人。有关本书的稳定版本,请访问 https://svnbook.subversion.org.cn/。
svnmucc — 执行一个或多个基于 Subversion 仓库 URL 的 ACTION,并将结果提交为一个新的修订版本。
svnmucc
ACTION...
svnmucc 是一个用于修改 Subversion 版本控制数据,无需使用工作副本的程序。它允许用户对想要修改的文件和目录的仓库 URL 直接执行操作。每次调用 svnmucc 都会尝试执行一个或多个 ACTION
,并将这些组合后的 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
,并将本地文件 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
从指定的目录读取配置信息,而不是默认位置(用户主目录中的 .subversion
)。
--config-option
CONFSPEC
在命令执行期间设置运行时配置选项的值。 CONFSPEC
是一个字符串,它指定要分配的配置选项命名空间、名称和值,格式为 FILE
:SECTION
:OPTION
=[VALUE
]。在此语法中,FILE
和 SECTION
分别是包含要更改其值的选项的运行时配置文件(config
或 servers
)及其节。 OPTION
当然是选项本身,而 VALUE
是要分配给选项的值(如果有)。例如,要暂时禁用 HTTP 协议中压缩的使用,请使用 --config-option=servers:global:http-compression=no
。您可以多次使用此选项来同时更改多个选项值。
--extra-args
(-X
) ARGFILE
从 ARGFILE
读取额外的命令行参数,每行一个参数。作为一项特殊考虑,ARGFILE
可以是 -
,表示应从标准输入读取其他参数。
--file
(-F
) MSGFILE
使用 MSGFILE
的内容作为提交的日志消息。
--help
(-h
, -?
)
显示程序使用信息并退出。
--message
(-m
) MSG
使用 MSG
作为提交的日志消息。
--no-auth-cache
防止将身份验证信息(例如,用户名和密码)缓存到 Subversion 运行时配置目录中。
--non-interactive
禁用所有交互式提示(例如,请求身份验证凭据)。
--revision
(-r
) REV
使用修订版本 REV
作为通过 svnmucc 操作进行的所有更改的基准修订版本。这是一个重要的选项,用户应该习惯在修改现有版本控制项时使用它,以避免无意中撤消团队成员所做的当代更改。
--root-url
(-U
) ROOT-URL
使用 ROOT-URL
作为基准 URL,所有其他 URL 目标相对于它。此 URL 不一定是仓库的根 URL(例如,可能由 svn info 报告)。它可以是 svnmucc 操作中指定的所有目标共有的任何 URL。
--password
(-p
) PASSWD
在针对 Subversion 服务器进行身份验证时使用 PASSWD
作为密码。如果未提供或不正确,Subversion 会在需要时提示您输入此信息。
--username
NAME
在针对 Subversion 服务器进行身份验证时使用 USERNAME
作为用户名。如果未提供或不正确,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 而不是 svn cat 和 svnmucc put。
$ # 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 都相对于它处理(并节省一些键入操作)。
以下是使用 svnmucc 的示例,它在一个修订版本中创建项目的新标签,该标签包括一个新创建的描述性文件,并且缺少一个不应该包含在(例如,发布 tarball)中的目录。
$ 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 put 操作中使用的裸 -
不会被标记为格式错误的选项指示符。