本节内容正在编写中,可能随时发生变化,可能无法准确描述 Apache™ Subversion® 软件的任何已发布版本。为避免信息过时,请勿将本页设为书签,也请勿将其推荐给他人。有关本书的稳定版本,请访问 https://svnbook.subversion.org.cn/

名称

svnmucc — 执行一个或多个基于 Subversion 仓库 URL 的 ACTION,并将结果提交为一个新的修订版本。

概要

svnmucc ACTION...

描述

svnmucc 是一个用于修改 Subversion 版本控制数据,无需使用工作副本的程序。它允许用户对想要修改的文件和目录的仓库 URL 直接执行操作。每次调用 svnmucc 都会尝试执行一个或多个 ACTION,并将这些组合后的 ACTION 的结果作为单个新的修订版本进行原子提交。

操作

svnmucc 支持以下操作(以及相关参数),这些操作可以在命令行上组合成有序的序列

cp REV SRC-URL DST-URL

将修订版本 REV 中位于 SRC-URL 的文件或目录复制到 DST-URL

mkdir URL

URL 创建一个新目录。 URL 的父目录必须已经存在(或由之前的 svnmucc 操作创建),因为此命令不提供自动创建任何丢失的中间父目录的功能。

mv SRC-URL DST-URL

将位于 SRC-URL 的文件或目录移动到 DST-URL

rm URL

删除位于 URL 的文件或目录。

put SRC-FILE URL

添加一个新文件(或修改现有文件),该文件位于 URL,并将本地文件 SRC-FILE 的内容复制为创建或修改的文件的新内容。作为一项特殊考虑,SRC-FILE 可以是 -,指示 svnmucc 从标准输入而不是本地文件系统文件读取。

propset NAME VALUE URL

将目标 URL 上的属性 NAME 的值设置为 VALUE

propsetf NAME FILE URL

将目标 URL 上的属性 NAME 的值设置为文件 FILE 的内容。

propdel NAME URL

从目标 URL 删除属性 NAME

选项

svnmucc 命令行上指定的选项对该命令行执行的所有操作都是全局的。以下是此工具支持的选项列表

--config-dir DIR

从指定的目录读取配置信息,而不是默认位置(用户主目录中的 .subversion)。

--config-option CONFSPEC

在命令执行期间设置运行时配置选项的值。 CONFSPEC 是一个字符串,它指定要分配的配置选项命名空间、名称和值,格式为 FILE:SECTION:OPTION=[VALUE]。在此语法中,FILESECTION 分别是包含要更改其值的选项的运行时配置文件(configservers)及其节。 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 propgetsvnmucc propsetf 而不是 svn catsvnmucc 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 rmsvnmucc 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 操作中使用的裸 - 不会被标记为格式错误的选项指示符。

TortoiseSVN 官方中文版 1.14.7 发布