<?xml version="1.0" encoding="utf-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>svnmucc</title> <link rel="stylesheet" type="text/css" href="styles.css" /> <meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /> <style type="text/css"> body { background-image: url('images/draft.png'); background-repeat: no-repeat; background-position: top left; /* The following properties make the watermark "fixed" on the page. */ /* I think that's just a bit too distracting for the reader... */ /* background-attachment: fixed; */ /* background-position: center center; */ }</style> <link rel="home" href="index.html" title="Version Control with Subversion [DRAFT]" /> <link rel="up" href="svn.ref.svnmucc.html" title="svnmucc Reference—Subversion Multiple URL Command Client" /> <link rel="prev" href="svn.ref.svnmucc.html" title="svnmucc Reference—Subversion Multiple URL Command Client" /> <link rel="next" href="svn.ref.reposhooks.html" title="Subversion Repository Hook Reference" /> </head> <body> <div xmlns="" id="vcws-version-notice"> <p>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 <a href="http://www.svnbook.com/">http://www.svnbook.com/</a> for stable versions of this book.</p> </div> <div class="navheader"> <table width="100%" summary="Navigation header"> <tr> <th colspan="3" align="center">svnmucc</th> </tr> <tr> <td width="20%" align="left"><a accesskey="p" href="svn.ref.svnmucc.html">Prev</a> </td> <th width="60%" align="center">svnmucc Reference—Subversion Multiple URL Command Client</th> <td width="20%" align="right"> <a accesskey="n" href="svn.ref.reposhooks.html">Next</a></td> </tr> </table> <hr /> </div> <div class="refentry" title="svnmucc"> <a id="svn.ref.svnmucc.re"></a> <div class="titlepage"></div> <a id="idp25690096" class="indexterm"></a> <div class="refnamediv"> <h2>Name</h2> <p>svnmucc — Perform one or more Subversion repository URL-based ACTIONs, committing the result as a (single) new revision.</p> </div> <div class="refsynopsisdiv" title="Synopsis"> <h2>Synopsis</h2> <p> <code class="literal">svnmucc ACTION...</code> </p> </div> <div class="refsect1" title="Description"> <a id="svn.ref.svnmucc.re.desc"></a> <h2>Description</h2> <p><span class="command"><strong>svnmucc</strong></span> is a program for modifying Subversion-versioned data without the use of a working copy. It allows operations to be performed directly against the repository URLs of the files and directories that the user wishes to change. Each invocation of <span class="command"><strong>svnmucc</strong></span> attempts one or more <em class="replaceable"><code>ACTION</code></em>s, atomically committing the results of those combined <em class="replaceable"><code>ACTION</code></em>s as a single new revision.</p> </div> <div class="refsect1" title="Actions"> <a id="svn.ref.svnmucc.re.actions"></a> <h2>Actions</h2> <p><span class="command"><strong>svnmucc</strong></span> supports the following actions (and related arguments), which may be combined into ordered sequences on the command line:</p> <div class="variablelist"> <dl> <dt> <span class="term">cp <em class="replaceable"><code>REV</code></em> <em class="replaceable"><code>SRC-URL</code></em> <em class="replaceable"><code>DST-URL</code></em></span> </dt> <dd> <p>Copy the file or directory located at <em class="replaceable"><code>SRC-URL</code></em> in revision <em class="replaceable"><code>REV</code></em> to <em class="replaceable"><code>DST-URL</code></em>.</p> </dd> <dt> <span class="term">mkdir <em class="replaceable"><code>URL</code></em></span> </dt> <dd> <p>Create a new directory at <em class="replaceable"><code>URL</code></em>. The parent directory of <em class="replaceable"><code>URL</code></em> must already exist (or have been created by a prior <span class="command"><strong>svnmucc</strong></span> action), as this command does not offer the ability to automatically create any missing intermediate parent directories.</p> </dd> <dt> <span class="term">mv <em class="replaceable"><code>SRC-URL</code></em> <em class="replaceable"><code>DST-URL</code></em></span> </dt> <dd> <p>Move the file or directory located at <em class="replaceable"><code>SRC-URL</code></em> to <em class="replaceable"><code>DST-URL</code></em>.</p> </dd> <dt> <span class="term">rm <em class="replaceable"><code>URL</code></em></span> </dt> <dd> <p>Delete the file or directory located at <em class="replaceable"><code>URL</code></em>.</p> </dd> <dt> <span class="term">put <em class="replaceable"><code>SRC-FILE</code></em> <em class="replaceable"><code>URL</code></em></span> </dt> <dd> <p>Add a new file—or modify an existing one—located at <em class="replaceable"><code>URL</code></em>, copying the contents of the local file <em class="replaceable"><code>SRC-FILE</code></em> as the new contents of the created or modified file. As a special consideration, <em class="replaceable"><code>SRC-FILE</code></em> may be <code class="literal">-</code> to instruct <span class="command"><strong>svnmucc</strong></span> to read from standard input rather than a local filesystem file.</p> </dd> <dt> <span class="term">propset <em class="replaceable"><code>NAME</code></em> <em class="replaceable"><code>VALUE</code></em> <em class="replaceable"><code>URL</code></em></span> </dt> <dd> <p>Set the value of the property <em class="replaceable"><code>NAME</code></em> on the target <em class="replaceable"><code>URL</code></em> to <em class="replaceable"><code>VALUE</code></em>.</p> </dd> <dt> <span class="term">propsetf <em class="replaceable"><code>NAME</code></em> <em class="replaceable"><code>FILE</code></em> <em class="replaceable"><code>URL</code></em></span> </dt> <dd> <p>Set the value of the property <em class="replaceable"><code>NAME</code></em> on the target <em class="replaceable"><code>URL</code></em> to the contents of the file <em class="replaceable"><code>FILE</code></em>.</p> </dd> <dt> <span class="term">propdel <em class="replaceable"><code>NAME</code></em> <em class="replaceable"><code>URL</code></em></span> </dt> <dd> <p>Delete the property <em class="replaceable"><code>NAME</code></em> from the target <em class="replaceable"><code>URL</code></em>.</p> </dd> </dl> </div> </div> <div class="refsect1" title="Options"> <a id="svn.ref.svnmucc.re.sw"></a> <h2>Options</h2> <p>Options specified on the <span class="command"><strong>svnmucc</strong></span> command line are global to all actions performed by that command line. The following is a list of the options supported by this tool:</p> <div class="variablelist"> <dl> <dt> <span class="term"><code class="option">--config-dir</code> <em class="replaceable"><code>DIR</code></em></span> </dt> <dd> <p>Read configuration information from the specified directory instead of the default location (<code class="filename">.subversion</code> in the user's home directory).</p> </dd> <dt> <span class="term"><code class="option">--config-option</code> <em class="replaceable"><code>CONFSPEC</code></em></span> </dt> <dd> <p>Set, for the duration of the command, the value of a runtime configuration option. <em class="replaceable"><code>CONFSPEC</code></em> is a string which specifies the configuration option namespace, name and value that you'd like to assign, formatted as <em class="replaceable"><code>FILE</code></em>:<em class="replaceable"><code>SECTION</code></em>:<em class="replaceable"><code>OPTION</code></em>=[<em class="replaceable"><code>VALUE</code></em>]. In this syntax, <em class="replaceable"><code>FILE</code></em> and <em class="replaceable"><code>SECTION</code></em> are the runtime configuration file (either <code class="literal">config</code> or <code class="literal">servers</code>) and the section thereof, respectively, which contain the option whose value you wish to change. <em class="replaceable"><code>OPTION</code></em> is, of course, the option itself, and <em class="replaceable"><code>VALUE</code></em> the value (if any) you wish to assign to the option. For example, to temporarily disable the use of the automatic property setting feature, use <code class="option">--config-option=config:miscellany:enable-auto-props=no</code>. You can use this option multiple times to change multiple option values simultaneously.</p> </dd> <dt> <span class="term"><code class="option">--extra-args</code> (<code class="option">-X</code>) <em class="replaceable"><code>ARGFILE</code></em></span> </dt> <dd> <p>Read additional would-be command-line arguments from <em class="replaceable"><code>ARGFILE</code></em>, one argument per line. As a special consideration, <em class="replaceable"><code>ARGFILE</code></em> may be <code class="literal">-</code> to indicate that additional arguments should be read instead from standard input.</p> </dd> <dt> <span class="term"><code class="option">--file</code> (<code class="option">-F</code>) <em class="replaceable"><code>MSGFILE</code></em></span> </dt> <dd> <p>Use the contents of the <em class="replaceable"><code>MSGFILE</code></em> as the log message for the commit.</p> </dd> <dt> <span class="term"><code class="option">--help</code> (<code class="option">-h</code>, <code class="option">-?</code>)</span> </dt> <dd> <p>Show program usage information and exit.</p> </dd> <dt> <span class="term"><code class="option">--message</code> (<code class="option">-m</code>) <em class="replaceable"><code>MSG</code></em></span> </dt> <dd> <p>Use <em class="replaceable"><code>MSG</code></em> as the log message for the commit.</p> </dd> <dt> <span class="term"> <code class="option">--no-auth-cache</code> </span> </dt> <dd> <p>Prevent caching of authentication information (e.g., username and password) in the Subversion runtime configuration directories.</p> </dd> <dt> <span class="term"> <code class="option">--non-interactive</code> </span> </dt> <dd> <p>Disable all interactive prompting (e.g., requests for authentication credentials).</p> </dd> <dt> <span class="term"><code class="option">--revision</code> (<code class="option">-r</code>) <em class="replaceable"><code>REV</code></em></span> </dt> <dd> <p>Use revision <em class="replaceable"><code>REV</code></em> as the baseline revision for all changes made via the <span class="command"><strong>svnmucc</strong></span> actions. This is an important option which users should habituate to using whenever modifying existing versioned items to avoid inadvertently undoing contemporary changes made by fellow team members.</p> </dd> <dt> <span class="term"><code class="option">--root-url</code> (<code class="option">-U</code>) <em class="replaceable"><code>ROOT-URL</code></em></span> </dt> <dd> <p>Use <em class="replaceable"><code>ROOT-URL</code></em> as a base URL to which all other URL targets are relative. This URL need not be the repository's root URL (such as might be reported by <span class="command"><strong>svn info</strong></span>). It can be any URL common to the various targets which are specified in the <span class="command"><strong>svnmucc</strong></span> actions.</p> </dd> <dt> <span class="term"><code class="option">--password</code> (<code class="option">-p</code>) <em class="replaceable"><code>PASSWD</code></em></span> </dt> <dd> <p>Use <em class="replaceable"><code>PASSWD</code></em> as the password when authenticating against a Subversion server. If not provided, or if incorrect, Subversion will prompt you for this information as needed.</p> </dd> <dt> <span class="term"><code class="option">--username</code> <em class="replaceable"><code>NAME</code></em></span> </dt> <dd> <p>Use <em class="replaceable"><code>USERNAME</code></em> as the username when authenticating against a Subversion server. If not provided, or if incorrect, Subversion will prompt you for this information as needed.</p> </dd> <dt> <span class="term"> <code class="option">--version</code> </span> </dt> <dd> <p>Display the program's version information and exit.</p> </dd> <dt> <span class="term"><code class="option">--with-revprop</code> <em class="replaceable"><code>NAME</code></em>=<em class="replaceable"><code>VALUE</code></em></span> </dt> <dd> <p>Set the value of the revision property <em class="replaceable"><code>NAME</code></em> to <em class="replaceable"><code>VALUE</code></em> on the committed revision.</p> </dd> </dl> </div> </div> <div class="refsect1" title="Examples"> <a id="svn.ref.svnmucc.re.examples"></a> <h2>Examples</h2> <p>To (safely) modify a file's contents without using a working copy, use <span class="command"><strong>svn cat</strong></span> to fetch the current contents of the file, and <span class="command"><strong>svnmucc put</strong></span> to commit the edited contents thereof.</p> <div class="informalexample"> <pre class="screen"> $ # 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 </pre> </div> <p>Apply a similar approach to change a file or directory property. Simply use <span class="command"><strong>svnmucc propget</strong></span> and <span class="command"><strong>svnmucc propsetf</strong></span> instead of <span class="command"><strong>svn cat</strong></span> and <span class="command"><strong>svnmucc put</strong></span>, respectively.</p> <div class="informalexample"> <pre class="screen"> $ # 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. $ svnmucc -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 </pre> </div> <p>Let's look now at some multi-operation examples.</p> <p>To implement a <span class="quote">“<span class="quote">moving tag</span>”</span>, where a single tag name is recycled to point to different snapshots (for example, the current latest stable version) of a codebase, use <span class="command"><strong>svnmucc rm</strong></span> and <span class="command"><strong>svnmucc cp</strong></span>:</p> <div class="informalexample"> <pre class="screen"> $ 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 $ </pre> </div> <p>In the previous example, we slyly introduced the use of the <code class="option">--root-url (-U)</code> option. Use this option to specify a base URL to which all other operand URLs are treated as relative (and save yourself some typing).</p> <p>The following shows an example of using <span class="command"><strong>svnmucc</strong></span> to, in a single revision, create a new tag of your project which includes a newly created descriptive file and which lacks a directory which shouldn't be included in, say, a release tarball.</p> <div class="informalexample"> <pre class="screen"> $ 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. $ </pre> </div> <p>The previous example demonstrates not only how to do several different things in a single <span class="command"><strong>svnmucc</strong></span> invocation, but also the use of standard input as the source of new file contents. Note the presence of <code class="literal">--</code> to indicate that no more options follow on the command line. This is required so that the bare <code class="literal">-</code> used in the <span class="command"><strong>svnmucc put</strong></span> action won't be flagged as a malformed option indicator.</p> </div> </div> <div class="navfooter"> <hr /> <table width="100%" summary="Navigation footer"> <tr> <td width="40%" align="left"><a accesskey="p" href="svn.ref.svnmucc.html">Prev</a> </td> <td width="20%" align="center"> <a accesskey="u" href="svn.ref.svnmucc.html">Up</a> </td> <td width="40%" align="right"> <a accesskey="n" href="svn.ref.reposhooks.html">Next</a></td> </tr> <tr> <td width="40%" align="left" valign="top">svnmucc Reference—Subversion Multiple URL Command Client </td> <td width="20%" align="center"> <a accesskey="h" href="index.html">Home</a> </td> <td width="40%" align="right" valign="top"> Subversion Repository Hook Reference</td> </tr> </table> </div> <div xmlns="" id="vcws-footer"> <hr /> <img src="images/cc-by.png" style="float: right;" /> <p>You are reading <em>Version Control with Subversion</em> (for Subversion 1.8), by Ben Collins-Sussman, Brian W. Fitzpatrick, and C. Michael Pilato.</p> <p>This work is licensed under the <a href="http://creativecommons.org/licenses/by/2.0/">Creative Commons Attribution License v2.0</a>.</p> <p>To submit comments, corrections, or other contributions to the text, please visit <a href="http://www.svnbook.com/">http://www.svnbook.com/</a>.</p> </div> </body> </html>