[svnbook] r4838 committed - Translation: Repository Replication

svnbook at googlecode.com svnbook at googlecode.com
Wed Jun 11 00:21:38 CDT 2014


Revision: 4838
Author:   jmfelderhoff at gmx.eu
Date:     Wed Jun 11 05:21:22 2014 UTC
Log:      Translation: Repository Replication

http://code.google.com/p/svnbook/source/detail?r=4838

Modified:
  /branches/1.7/de/book/ch05-repository-admin.xml

=======================================
--- /branches/1.7/de/book/ch05-repository-admin.xml	Fri May 30 09:56:18  
2014 UTC
+++ /branches/1.7/de/book/ch05-repository-admin.xml	Wed Jun 11 05:21:22  
2014 UTC
@@ -5333,12 +5333,12 @@

  <!--
        <para>Subversion provides a program for managing scenarios such
-        as these—<command>svnsync</command>.  This works by
-        essentially asking the Subversion server to
-        <quote>replay</quote> revisions, one at a time.  It then uses
-        that revision information to mimic a commit of the same to
-        another repository.  Neither repository needs to be locally
-        accessible to the machine on which <command>svnsync</command> is
+        as these.  <command>svnsync</command> works by essentially
+        asking the Subversion server to <quote>replay</quote>
+        revisions, one at a time.  It then uses that revision
+        information to mimic a commit of the same to another
+        repository.  Neither repository needs to be locally accessible
+        to the machine on which <command>svnsync</command> is
          running—its parameters are repository URLs, and it does
          all its work through Subversion's Repository Access (RA)
          interfaces.  All it requires is read access to the source
@@ -5346,8 +5346,8 @@
          repository.</para>
  -->
        <para>Subversion stellt ein Programm zur Handhabung solcher
-        Szenarien zur Verfügung – <command>svnsync</command>. Im
-        Wesentlichen funktioniert das, indem der Subversion-Server
+        Szenarien zur Verfügung. Im Wesentlichen funktioniert
+        <command>svnsync</command>, indem der Subversion-Server
          aufgefordert wird, Revisionen zu <quote>wiederholen</quote>,
          eine nach der anderen. Dann wird die Information dieser
          Revision benutzt, um eine Übergabe derselben an ein anderes
@@ -5372,235 +5372,256 @@
            neuer laufen.</para>
        </note>

+      <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
-->
+      <sect3 id="svn.reposadmin.maint.replication.svnsync">
  <!--
-      <para>Assuming you already have a source repository that you'd
-        like to mirror, the next thing you need is an empty target
-        repository that will actually serve as that mirror.  This
-        target repository can use either of the available filesystem
-        data-store backends (see <xref
-        linkend="svn.reposadmin.basics.backends" />), but it must not
-        yet have any version history in it.  The protocol that
-        <command>svnsync</command> uses to communicate revision information
-        is highly sensitive to mismatches between the versioned
-        histories contained in the source and target repositories.
-        For this reason, while <command>svnsync</command> cannot
-        <emphasis>demand</emphasis> that the target repository be
-        read-only,<footnote><para>In fact, it can't truly be
-        read-only, or <command>svnsync</command> itself would have a
-        tough time copying revision history into it.</para></footnote>
-        allowing the revision history in the target repository to
-        change by any mechanism other than the mirroring process is a
-        recipe for disaster.</para>
+        <title>Replication with svnsync</title>
  -->
-      <para>Angenommen, Sie haben bereits ein Projektarchiv, das Sie
-        gerne spiegeln möchten. Als nächstes brauchen Sie ein leeres
-        Ziel-Projektarchiv, das als Spiegel dienen soll. Dieses
-        Projektarchiv kann eins der verfügbaren Speicherverfahren
-        benutzen (siehe
-        <xref linkend="svn.reposadmin.basics.backends" />), doch es
-        darf noch keine Versionshistorie enthalten. Das von
-        <command>svnsync</command> verwendete Protokoll zur
-        Übermittlung der Revisionsinformation ist sehr empfindlich
-        gegenüber nicht übereinstimmenden Versionshistorien im
-        Quell- und Ziel-Projektarchiv. Aus dem Grund, dass
-        <command>svnsync</command> nicht
-        <emphasis>verlangen</emphasis> kann, dass das
-        Ziel-Projektarchiv nur lesbar ist,<footnote><para>Tatsächlich
-        kann es gar nicht nur lesbar sein, denn sonst hätte
-        <command>svnsync</command> ein echtes Problem, die
-        Versionshistorie hineinzukopieren.</para></footnote> ist die
-        Katastrophe programmiert, wenn erlaubt wird, die
-        Revisions-Historie im Ziel-Projektarchiv mit anderen Mitteln
-        als durch das Spiegeln zu verändern.</para>
+        <title>Replizierung mit svnsync</title>

-      <warning>
  <!--
-        <para>Do <emphasis>not</emphasis> modify a mirror repository
-          in such a way as to cause its version history to deviate
-          from that of the repository it mirrors.  The only commits
-          and revision property modifications that ever occur on that
-          mirror repository should be those performed by the
-          <command>svnsync</command> tool.</para>
+        <para>Assuming you already have a source repository that you'd
+          like to mirror, the next thing you need is a target repository
+          that will actually serve as that mirror.  This target
+          repository can use either of the available filesystem
+          data-store backends (see
+          <xref linkend="svn.reposadmin.basics.backends"
+          />)—Subversion's abstraction layers ensure that such
+          details don't matter.  But by default, it must
+          not yet have any version history in it.  (We'll discuss an
+          exception to this later in this section.)</para>
  -->
-        <para>Verändern Sie ein Spiegel-Projektarchiv
-          <emphasis>nicht</emphasis> auf eine Art und Weise, die dazu
-          führt, dass die Versionshistorie von der des
-          Original-Projektarchivs abweicht. Die einzigen Übergaben und
-          Änderungen an Revisions-Eigenschaften die in diesem
-          Spiegel-Projektarchiv stattfinden, sollten ausschließlich durch
-          den Befehl <command>svnsync</command> vorgenommen
-          werden.</para>
-      </warning>
+        <para>Angenommen, Sie haben bereits ein Projektarchiv, das Sie
+          gerne spiegeln möchten. Als nächstes brauchen Sie ein leeres
+          Ziel-Projektarchiv, das als Spiegel dienen soll. Dieses
+          Projektarchiv kann irgendeins der verfügbaren Speicherverfahren
+          benutzen (siehe
+          <xref linkend="svn.reposadmin.basics.backends" />) –
+          die Abstraktionsschichten von Subversion stellen sicher,
+          dass solche Details unerheblich sind. Doch standardmäßig
+          darf es noch keine Versionshistorie enthalten. (Eine
+          Ausnahme davon werden wir später in diesem Abschnitt
+          erörtern.)</para>

  <!--
-      <para>Another requirement of the target repository is that the
-        <command>svnsync</command> process be allowed to modify
-        revision properties.  Because <command>svnsync</command> works
-        within the framework of that repository's hook system, the
-        default state of the repository (which is to disallow revision
-        property changes; see <xref
-        linkend="svn.ref.reposhooks.pre-revprop-change" />) is
-        insufficient.  You'll need to explicitly implement the
-        pre-revprop-change hook, and your script must allow
-        <command>svnsync</command> to set and change revision
-        properties.  With those provisions in place, you are ready to
-        start mirroring repository revisions.</para>
+        <para>The protocol that <command>svnsync</command> uses to
+          communicate revision information is highly sensitive to
+          mismatches between the versioned histories contained in the
+          source and target repositories.  For this reason,
+          while <command>svnsync</command>
+          cannot <emphasis>demand</emphasis> that the target repository
+          be read-only,<footnote><para>In fact, it can't truly be
+          read-only, or <command>svnsync</command> itself would have a
+          tough time copying revision history into it.</para></footnote>
+          allowing the revision history in the target repository to
+          change by any mechanism other than the mirroring process is a
+          recipe for disaster.</para>
  -->
-      <para>Eine weitere Anforderung an das Ziel-Projektarchiv ist, dass
-        dem <command>svnsync</command>-Prozess erlaubt wird,
-        Revisions-Eigenschaften zu verändern. Da
-        <command>svnsync</command> im Rahmen des Hook-Systems
-        ausgeführt wird, ist der standardmäßige Zustand des
-        Projektarchivs (welcher keine Änderungen an Revisions-Eigenschaften
-        zulässt; siehe <xref
-        linkend="svn.ref.reposhooks.pre-revprop-change" />) nicht
-        ausreichend. Sie müssen ausdrücklich den
-        pre-revprop-change-Hook bereitstellen, der
-        <command>svnsync</command> erlaubt, Revisions-Eigenschaften zu
-        definieren und zu ändern. Mit diesen Vorkehrungen sind Sie
-        gerüstet, um Projektarchiv-Revisionen zu spiegeln.</para>
+        <para>Das von <command>svnsync</command> verwendete Protokoll
+          zur Übermittlung der Revisionsinformation ist sehr
+          empfindlich gegenüber nicht übereinstimmenden
+          Versionshistorien im Quell- und Ziel-Projektarchiv. Aus dem
+          Grund, dass <command>svnsync</command> nicht
+          <emphasis>verlangen</emphasis> kann, dass das
+          Ziel-Projektarchiv nur lesbar
+          ist,<footnote><para>Tatsächlich kann es gar nicht nur lesbar
+          sein, denn sonst hätte <command>svnsync</command> ein echtes
+          Problem, die Versionshistorie
+          hineinzukopieren.</para></footnote> ist die Katastrophe
+          programmiert, wenn erlaubt wird, die Revisions-Historie im
+          Ziel-Projektarchiv mit anderen Mitteln als durch das
+          Spiegeln zu verändern.</para>

-      <tip>
+        <warning>
  <!--
-        <para>It's a good idea to implement authorization measures
-          that allow your repository replication process to perform
-          its tasks while preventing other users from modifying the
-          contents of your mirror repository at all.</para>
+          <para>Do <emphasis>not</emphasis> modify a mirror repository
+            in such a way as to cause its version history to deviate
+            from that of the repository it mirrors.  The only commits
+            and revision property modifications that ever occur on that
+            mirror repository should be those performed by the
+            <command>svnsync</command> tool.</para>
  -->
-        <para>Es ist eine gute Idee, Autorisierungsmaßnahmen zu
-          ergreifen, um Ihrem Projektarchiv-Replikations-Prozess die
-          Arbeit zu ermöglichen, wohingegen anderen Benutzern die
-          Veränderung der Inhalte des Spiegel-Projektarchivs verwehrt
-          wird.</para>
-      </tip>
+          <para>Verändern Sie ein Spiegel-Projektarchiv
+            <emphasis>nicht</emphasis> auf eine Art und Weise, die dazu
+            führt, dass die Versionshistorie von der des
+            Original-Projektarchivs abweicht. Die einzigen Übergaben und
+            Änderungen an Revisions-Eigenschaften die in diesem
+            Spiegel-Projektarchiv stattfinden, sollten ausschließlich durch
+            den Befehl <command>svnsync</command> vorgenommen
+            werden.</para>
+        </warning>

  <!--
-      <para>Let's walk through the use of <command>svnsync</command>
-        in a somewhat typical mirroring scenario.  We'll pepper this
-        discourse with practical recommendations, which you are free to
-        disregard if they aren't required by or suitable for your
-        environment.</para>
+        <para>Another requirement of the target repository is that the
+          <command>svnsync</command> process be allowed to modify
+          revision properties.  Because <command>svnsync</command> works
+          within the framework of that repository's hook system, the
+          default state of the repository (which is to disallow revision
+          property changes; see <xref
+          linkend="svn.ref.reposhooks.pre-revprop-change" /> in
+          <xref linkend="svn.ref"/>) is insufficient.  You'll need to
+          explicitly implement the pre-revprop-change hook, and your
+          script must allow <command>svnsync</command> to set and
+          change revision properties.  With those provisions in place,
+          you are ready to start mirroring repository
+          revisions.</para>
  -->
-      <para>Lassen Sie uns nun die Benutzung von
-        <command>svnsync</command> bei einem Rundgang in einem
-        typischen Spiegel-Szenario erklären. Wir werden diesen Diskurs
-        mit Empfehlungen würzen, die Sie jedoch getrost missachten
-        können, falls sie für Ihre Umgebung nicht benötigt werden oder
-        nicht passend sind.</para>
+        <para>Eine weitere Anforderung an das Ziel-Projektarchiv ist, dass
+          dem <command>svnsync</command>-Prozess erlaubt wird,
+          Revisions-Eigenschaften zu verändern. Da
+          <command>svnsync</command> im Rahmen des Hook-Systems
+          ausgeführt wird, ist der standardmäßige Zustand des
+          Projektarchivs (welcher keine Änderungen an
+          Revisions-Eigenschaften zulässt; siehe <xref
+          linkend="svn.ref.reposhooks.pre-revprop-change" /> in
+          <xref linkend="svn.ref"/>) nicht ausreichend. Sie müssen
+          ausdrücklich den pre-revprop-change-Hook bereitstellen, der
+          <command>svnsync</command> erlaubt, Revisions-Eigenschaften
+          zu definieren und zu ändern. Mit diesen Vorkehrungen sind
+          Sie gerüstet, um Projektarchiv-Revisionen zu
+          spiegeln.</para>

+        <tip>
  <!--
-      <para>We will be mirroring the public Subversion repository
-        which houses the source code for this very book and exposing
-        that mirror publicly on the Internet, hosted on a different
-        machine than the one on which the original Subversion source
-        code repository lives.  This remote host has a global configuration
-        that permits anonymous users to read the contents of
-        repositories on the host, but requires users to authenticate
-        to modify those repositories.  (Please forgive us for
-        glossing over the details of Subversion server configuration
-        for the moment—those are covered thoroughly in <xref
-        linkend="svn.serverconfig" />.)  And for no other reason than
-        that it makes for a more interesting example, we'll be driving
-        the replication process from a third machine—the one that
-        we currently find ourselves using.</para>
+          <para>It's a good idea to implement authorization measures
+            that allow your repository replication process to perform
+            its tasks while preventing other users from modifying the
+            contents of your mirror repository at all.</para>
  -->
-      <para>Wir wollen das öffentliche Subversion-Projektarchiv
-        spiegeln, das den Quelltext des vorliegenden Buchs beherbergt,
-        und diesen Spiegel von einer anderen Maschine als der, auf der
-        das ursprüngliche Subversion-Quelltext-Projektarchiv
-        untergebracht ist, im Internet veröffentlichen. Dieser
-        entfernt liegende Rechner besitzt eine globale Konfiguration,
-        die es anonymen Benutzern erlaubt, den Inhalt von
-        Projektarchivs auf diesem Rechner zu lesen, aber zum Ändern
-        dieser Projektarchive eine Authentifizierung der Benutzer
-        erforderlich macht. (Vergeben Sie uns bitte, dass wir für den
-        Augenblick über die Details der
-        Subversion-Server-Konfiguration hinwegsehen – sie werden
-        in <xref linkend="svn.serverconfig" /> behandelt.) Und aus dem
-        alleinigen Grund, es noch interessanter machen zu wollen,
-        werden wir den Replikations-Prozess von einer dritten Maschine
-        aus steuern – diejenige, die wir aktuell
-        benutzen.</para>
+          <para>Es ist eine gute Idee, Autorisierungsmaßnahmen zu
+            ergreifen, um Ihrem Projektarchiv-Replikations-Prozess die
+            Arbeit zu ermöglichen, wohingegen anderen Benutzern die
+            Veränderung der Inhalte des Spiegel-Projektarchivs
+            verwehrt wird.</para>
+        </tip>

  <!--
-      <para>First, we'll create the repository which will be our
-        mirror.  This and the next couple of steps do require shell
-        access to the machine on which the mirror repository will
-        live.  Once the repository is all configured, though, we
-        shouldn't need to touch it directly again.</para>
+        <para>Let's walk through the use of <command>svnsync</command>
+          in a somewhat typical mirroring scenario.  We'll pepper this
+          discourse with practical recommendations, which you are free to
+          disregard if they aren't required by or suitable for your
+          environment.</para>
  -->
-      <para>Zunächst erstellen wir das Projektarchiv, das unser Spiegel
-        sein soll. Dieser und die folgenden paar Schritte erfordern
-        einen Shell-Zugang auf die Maschine, die das
-        Spiegel-Projektarchiv beherbergen soll. Sobald das Projektarchiv
-        jedoch konfiguriert ist, sollten wir nicht mehr direkt darauf
-        zugreifen müssen.</para>
+        <para>Lassen Sie uns nun die Benutzung von
+          <command>svnsync</command> bei einem Rundgang in einem
+          typischen Spiegel-Szenario erklären. Wir werden diesen Diskurs
+          mit Empfehlungen würzen, die Sie jedoch getrost missachten
+          können, falls sie für Ihre Umgebung nicht benötigt werden oder
+          nicht passend sind.</para>

-      <informalexample>
-        <screen>
+<!--
+        <para>We will be mirroring the public Subversion repository
+          which houses the source code for this very book and exposing
+          that mirror publicly on the Internet, hosted on a different
+          machine than the one on which the original Subversion source
+          code repository lives.  This remote host has a global
+          configuration that permits anonymous users to read the
+          contents of repositories on the host, but requires users to
+          authenticate to modify those repositories.  (Please forgive
+          us for glossing over the details of Subversion server
+          configuration for the moment—those are covered
+          thoroughly in <xref linkend="svn.serverconfig" />.)  And for
+          no other reason than that it makes for a more interesting
+          example, we'll be driving the replication process from a
+          third machine—the one that we currently find ourselves
+          using.</para>
+-->
+        <para>Wir wollen das öffentliche Subversion-Projektarchiv
+          spiegeln, das den Quelltext des vorliegenden Buchs beherbergt,
+          und diesen Spiegel von einer anderen Maschine als der, auf der
+          das ursprüngliche Subversion-Quelltext-Projektarchiv
+          untergebracht ist, im Internet veröffentlichen. Dieser
+          entfernt liegende Rechner besitzt eine globale Konfiguration,
+          die es anonymen Benutzern erlaubt, den Inhalt von
+          Projektarchivs auf diesem Rechner zu lesen, aber zum Ändern
+          dieser Projektarchive eine Authentifizierung der Benutzer
+          erforderlich macht. (Vergeben Sie uns bitte, dass wir für den
+          Augenblick über die Details der
+          Subversion-Server-Konfiguration hinwegsehen – sie werden
+          in <xref linkend="svn.serverconfig" /> behandelt.) Und aus dem
+          alleinigen Grund, es noch interessanter machen zu wollen,
+          werden wir den Replikations-Prozess von einer dritten Maschine
+          aus steuern – diejenige, die wir aktuell
+          benutzen.</para>
+
+<!--
+        <para>First, we'll create the repository which will be our
+          mirror.  This and the next couple of steps do require shell
+          access to the machine on which the mirror repository will
+          live.  Once the repository is all configured, though, we
+          shouldn't need to touch it directly again.</para>
+-->
+        <para>Zunächst erstellen wir das Projektarchiv, das unser Spiegel
+          sein soll. Dieser und die folgenden paar Schritte erfordern
+          einen Shell-Zugang auf die Maschine, die das
+          Spiegel-Projektarchiv beherbergen soll. Sobald das Projektarchiv
+          jedoch konfiguriert ist, sollten wir nicht mehr direkt darauf
+          zugreifen müssen.</para>
+
+        <informalexample>
+          <screen>
  $ ssh admin at svn.example.com "svnadmin create /var/svn/svn-mirror"
  admin at svn.example.com's password: ********
  $
  </screen>
-      </informalexample>
+        </informalexample>

  <!--
-      <para>At this point, we have our repository, and due to our
-        server's configuration, that repository is now
-        <quote>live</quote> on the Internet.  Now, because we don't
-        want anything modifying the repository except our replication
-        process, we need a way to distinguish that process from other
-        would-be committers.  To do so, we use a dedicated username
-        for our process.  Only commits and revision property
-        modifications performed by the special username
-        <literal>syncuser</literal> will be allowed.</para>
+        <para>At this point, we have our repository, and due to our
+          server's configuration, that repository is now
+          <quote>live</quote> on the Internet.  Now, because we don't
+          want anything modifying the repository except our replication
+          process, we need a way to distinguish that process from other
+          would-be committers.  To do so, we use a dedicated username
+          for our process.  Only commits and revision property
+          modifications performed by the special username
+          <literal>syncuser</literal> will be allowed.</para>
  -->
-      <para>Zu diesem Zeitpunkt haben wir unser Projektarchiv, und wegen
-        unserer Server-Konfiguration ist das Projektarchiv nun
-        <quote>live</quote> im Internet. Da wir aber außer unserem
-        Replikations-Prozess niemanden erlauben wollen, das Projektarchiv
-        zu ändern, benötigen wir eine Möglichkeit, diesen Prozess von
-        anderen potentiellen Zugriffen zu unterscheiden. Um dies zu
-        machen, verwenden wir einen ausgezeichneten Benutzernamen für
-        unseren Prozess. Nur Übergaben und Änderungen an
-        Revisions-Eigenschaften unter dem Anwenderkonto
-        <literal>syncuser</literal> werden erlaubt.</para>
+        <para>Zu diesem Zeitpunkt haben wir unser Projektarchiv, und wegen
+          unserer Server-Konfiguration ist das Projektarchiv nun
+          <quote>live</quote> im Internet. Da wir aber außer unserem
+          Replikations-Prozess niemanden erlauben wollen, das Projektarchiv
+          zu ändern, benötigen wir eine Möglichkeit, diesen Prozess von
+          anderen potentiellen Zugriffen zu unterscheiden. Um dies zu
+          machen, verwenden wir einen ausgezeichneten Benutzernamen für
+          unseren Prozess. Nur Übergaben und Änderungen an
+          Revisions-Eigenschaften unter dem Anwenderkonto
+          <literal>syncuser</literal> werden erlaubt.</para>

  <!--
-      <para>We'll use the repository's hook system both to allow the
-        replication process to do what it needs to do and to enforce
-        that only it is doing those things.  We accomplish this by
-        implementing two of the repository event
-        hooks—pre-revprop-change and start-commit.  Our
-        <filename>pre-revprop-change</filename> hook script is found
-        in <xref
-        linkend="svn.reposadmin.maint.replication.pre-revprop-change"
-        />, and basically verifies that the user attempting the
-        property changes is our <literal>syncuser</literal> user.  If
-        so, the change is allowed; otherwise, it is denied.</para>
+        <para>We'll use the repository's hook system both to allow the
+          replication process to do what it needs to do and to enforce
+          that only it is doing those things.  We accomplish this by
+          implementing two of the repository event
+          hooks—pre-revprop-change and start-commit.  Our
+          <filename>pre-revprop-change</filename> hook script is found
+          in <xref
+          linkend="svn.reposadmin.maint.replication.pre-revprop-change"
+          />, and basically verifies that the user attempting the
+          property changes is our <literal>syncuser</literal> user.  If
+          so, the change is allowed; otherwise, it is denied.</para>
  -->
-      <para>Wir verwenden das Hook-System des Projektarchivs sowohl, um
-        dem Replikations-Prozess seine Arbeit zu ermöglichen, als auch,
-        um sicherzustellen, dass nur er diese Dinge tut. Wir
-        bewerkstelligen dies, indem wir zwei der
-        Projektarchiv-Ereignis-Hooks implementieren –
-        pre-revprop-change und start-commit. Unser
-        <filename>pre-revprop-change</filename>-Hook-Skript finden Sie
-        in <xref
-        linkend="svn.reposadmin.maint.replication.pre-revprop-change"
-        />; grundsätzlich stellt es sicher, dass der Benutzer, der die
-        Eigenschaften ändern möchte, unser <literal>syncuser</literal>
-        ist. Falls dies zutrifft, ist die Änderung erlaubt,
-        anderenfalls wird die Änderung abgelehnt.</para>
+        <para>Wir verwenden das Hook-System des Projektarchivs sowohl, um
+          dem Replikations-Prozess seine Arbeit zu ermöglichen, als auch,
+          um sicherzustellen, dass nur er diese Dinge tut. Wir
+          bewerkstelligen dies, indem wir zwei der
+          Projektarchiv-Ereignis-Hooks implementieren –
+          pre-revprop-change und start-commit. Unser
+          <filename>pre-revprop-change</filename>-Hook-Skript finden Sie
+          in <xref
+          linkend="svn.reposadmin.maint.replication.pre-revprop-change"
+          />; grundsätzlich stellt es sicher, dass der Benutzer, der die
+          Eigenschaften ändern möchte, unser <literal>syncuser</literal>
+          ist. Falls dies zutrifft, ist die Änderung erlaubt,
+          anderenfalls wird die Änderung abgelehnt.</para>

-      <example id="svn.reposadmin.maint.replication.pre-revprop-change">
+        <example id="svn.reposadmin.maint.replication.pre-revprop-change">
  <!--
-        <title>Mirror repository's pre-revprop-change hook script</title>
+          <title>Mirror repository's pre-revprop-change hook script</title>
  -->
-        <title>pre-revprop-change-Hook-Skript des  
Spiegel-Projektarchivs</title>
-
+          <title>pre-revprop-change-Hook-Skript des  
Spiegel-Projektarchivs</title>
  <!--
-        <programlisting>
+          <programlisting>
  #!/bin/sh

  USER="$3"
@@ -5611,7 +5632,7 @@
  exit 1
  </programlisting>
  -->
-        <programlisting>
+          <programlisting>
  #!/bin/sh

  USER="$3"
@@ -5621,33 +5642,33 @@
  echo "Ausschließlich der Benutzer syncuser darf Revisions-Eigenschaften  
ändern" >&2
  exit 1
  </programlisting>
-      </example>
+        </example>

  <!--
-      <para>That covers revision property changes.  Now we need to
-        ensure that only the <literal>syncuser</literal> user is
-        permitted to commit new revisions to the repository.  We do
-        this using a <filename>start-commit</filename> hook script
-        such as the one in <xref
-        linkend="svn.reposadmin.maint.replication.start-commit"
-        />.</para>
+        <para>That covers revision property changes.  Now we need to
+          ensure that only the <literal>syncuser</literal> user is
+          permitted to commit new revisions to the repository.  We do
+          this using a <filename>start-commit</filename> hook script
+          such as the one in <xref
+          linkend="svn.reposadmin.maint.replication.start-commit"
+          />.</para>
  -->
-      <para>Das deckt Änderungen an Revisions-Eigenschaften ab. Nun müssen
-        wir sicherstellen, dass nur der Benutzer
-        <literal>syncuser</literal> neue Revisionen an das Projektarchiv
-        übergeben darf. Wir machen das, indem wir ein
-        <filename>start-commit</filename>-Hook-Skript wie das in <xref
-        linkend="svn.reposadmin.maint.replication.start-commit" />
-        benutzen.</para>
+        <para>Das deckt Änderungen an Revisions-Eigenschaften ab. Nun  
müssen
+          wir sicherstellen, dass nur der Benutzer
+          <literal>syncuser</literal> neue Revisionen an das Projektarchiv
+          übergeben darf. Wir machen das, indem wir ein
+          <filename>start-commit</filename>-Hook-Skript wie das in <xref
+          linkend="svn.reposadmin.maint.replication.start-commit" />
+          benutzen.</para>

-      <example id="svn.reposadmin.maint.replication.start-commit">
+        <example id="svn.reposadmin.maint.replication.start-commit">
  <!--
-        <title>Mirror repository's start-commit hook script</title>
+          <title>Mirror repository's start-commit hook script</title>
  -->
-        <title>start-commit-Hook-Skript des Spiegel-Projektarchivs</title>
+          <title>start-commit-Hook-Skript des  
Spiegel-Projektarchivs</title>

  <!--
-        <programlisting>
+          <programlisting>
  #!/bin/sh

  USER="$2"
@@ -5658,7 +5679,7 @@
  exit 1
  </programlisting>
  -->
-        <programlisting>
+          <programlisting>
  #!/bin/sh

  USER="$2"
@@ -5668,46 +5689,47 @@
  echo "Ausschließlich der Benutzer syncuser darf neue Revisionen übergeben"  
>&2
  exit 1
  </programlisting>
-      </example>
+        </example>

  <!--
-      <para>After installing our hook scripts and ensuring that they
-        are executable by the Subversion server, we're finished with
-        the setup of the mirror repository.  Now, we get to actually
-        do the mirroring.</para>
+        <para>After installing our hook scripts and ensuring that they
+          are executable by the Subversion server, we're finished with
+          the setup of the mirror repository.  Now, we get to actually
+          do the mirroring.</para>
  -->
-      <para>Nachdem wir unsere Hook-Skripte installiert und uns
-        vergewissert haben, dass sie auf dem Subversion-Server
-        ausführbar sind, sind wir mit dem Aufsetzen des
-        Spiegel-Projektarchivs fertig. Nun kommen wir zum eigentlichen
-        Spiegeln.</para>
+        <para>Nachdem wir unsere Hook-Skripte installiert und uns
+          vergewissert haben, dass sie auf dem Subversion-Server
+          ausführbar sind, sind wir mit dem Aufsetzen des
+          Spiegel-Projektarchivs fertig. Nun kommen wir zum eigentlichen
+          Spiegeln.</para>

  <!--
-      <para>The first thing we need to do with
-        <command>svnsync</command> is to register in our target
-        repository the fact that it will be a mirror of the source
-        repository.  We do this using the <command>svnsync
-        initialize</command> subcommand.  The URLs we provide point to
-        the root directories of the target and source repositories,
-        respectively.  In Subversion 1.4, this is required—only
-        full mirroring of repositories is permitted.  Beginning with
-        Subversion 1.5, though, you can use <command>svnsync</command>
-        to mirror only some subtree of the repository, too.</para>
+        <para>The first thing we need to do with
+          <command>svnsync</command> is to register in our target
+          repository the fact that it will be a mirror of the source
+          repository.  We do this using the <command>svnsync
+          initialize</command> subcommand.  The URLs we provide point
+          to the root directories of the target and source
+          repositories, respectively.  In Subversion 1.4, this is
+          required—only full mirroring of repositories is
+          permitted.  Beginning with Subversion 1.5, though, you can
+          use <command>svnsync</command> to mirror only some subtree
+          of the repository, too.</para>
  -->
-      <para>Das Erste, was wir machen müssen ist, unserem
-        Ziel-Projektarchiv mit <command>svnsync</command> zu sagen, dass
-        es ein Spiegel des Quell-Projektarchivs sein wird. Wir machen das
-        mit dem Unterbefehl <command>svnsync initialize</command>. Die
-        URLs, die wir mitgeben, zeigen auf die Wurzelverzeichnisse des
-        Ziel- bzw. Quell-Projektarchivs. In Subversion 1.4 ist das
-        erforderlich – nur die vollständige Spiegelung von
-        Projektarchiven ist erlaubt. Beginnend mit Subversion 1.5
-        jedoch können Sie <command>svnsync</command> auch zum Spiegeln
-        von Teilbäumen des Projektarchivs verwenden.</para>
+        <para>Das Erste, was wir machen müssen ist, unserem
+          Ziel-Projektarchiv mit <command>svnsync</command> zu sagen, dass
+          es ein Spiegel des Quell-Projektarchivs sein wird. Wir machen das
+          mit dem Unterbefehl <command>svnsync initialize</command>. Die
+          URLs, die wir mitgeben, zeigen auf die Wurzelverzeichnisse des
+          Ziel- bzw. Quell-Projektarchivs. In Subversion 1.4 ist das
+          erforderlich – nur die vollständige Spiegelung von
+          Projektarchiven ist erlaubt. Beginnend mit Subversion 1.5
+          jedoch können Sie <command>svnsync</command> auch zum Spiegeln
+          von Teilbäumen des Projektarchivs verwenden.</para>

  <!--
-      <informalexample>
-        <screen>
+        <informalexample>
+          <screen>
  $ svnsync help init
  initialize (init): usage: svnsync initialize DEST_URL SOURCE_URL

@@ -5720,10 +5742,10 @@
  Copied properties for revision 0 (svn:sync-* properties skipped).
  $
  </screen>
-      </informalexample>
+        </informalexample>
  -->
-      <informalexample>
-        <screen>
+        <informalexample>
+          <screen>
  $ svnsync help init
  initialize (init): Aufruf: svnsync initialize ZIEL_URL QUELL_URL

@@ -5734,115 +5756,117 @@
                       http://svnbook.googlecode.com/svn \
                       --sync-username syncuser --sync-password syncpass
  Eigenschaften für Revision 0 kopiert (svn:sync-* Eigenschaften übergangen).
+NOTE: Normalized svn:* properties to LF line endings (1 rev-props, 0  
node-props).
  $
  </screen>
-      </informalexample>
+        </informalexample>

  <!--
-      <para>Our target repository will now remember that it is a
-        mirror of the public Subversion source code repository.
-        Notice that we provided a username and password as arguments
-        to <command>svnsync</command>—that was required by the
-        pre-revprop-change hook on our mirror repository.</para>
+        <para>Our target repository will now remember that it is a
+          mirror of the public Subversion source code repository.
+          Notice that we provided a username and password as arguments
+          to <command>svnsync</command>—that was required by the
+          pre-revprop-change hook on our mirror repository.</para>
  -->
-      <para>Unser Ziel-Projektarchiv wird sich nun erinnern, dass es ein
-        Spiegel des öffentlichen Subversion-Quelltext-Projektarchivs ist.
-        Beachten Sie, dass wir einen Benutzernamen und ein Passwort an
-        <command>svnsync</command> übergeben haben – das war für
-        den pre-revprop-change-Hook in unserem Spiegel-Projektarchiv
-        erforderlich.</para>
+        <para>Unser Ziel-Projektarchiv wird sich nun erinnern, dass es ein
+          Spiegel des öffentlichen Subversion-Quelltext-Projektarchivs ist.
+          Beachten Sie, dass wir einen Benutzernamen und ein Passwort an
+          <command>svnsync</command> übergeben haben – das war für
+          den pre-revprop-change-Hook in unserem Spiegel-Projektarchiv
+          erforderlich.</para>

-      <note>
+        <note>
  <!--
-        <para>In Subversion 1.4, the values given to
-          <command>svnsync</command>'s <option>- -username</option> and
-          <option>- -password</option> command-line options were used
-          for authentication against both the source and destination
-          repositories.  This caused problems when a user's
-          credentials weren't exactly the same for both repositories,
-          especially when running in noninteractive mode (with the
-          <option>- -non-interactive</option> option).  This was fixed
-          in Subversion 1.5 with the introduction of two new pairs of
-          options.  Use
-          <option>- -source-username</option> and
-          <option>- -source-password</option> to provide authentication
-          credentials for the source repository; use
-          <option>- -sync-username</option> and
-          <option>- -sync-password</option> to provide credentials for
-          the destination repository.  (The old
-          <option>- -username</option> and <option>- -password</option>
-          options still exist for compatibility, but we advise against
-          using them.)</para>
+          <para>In Subversion 1.4, the values given to
+            <command>svnsync</command>'s <option>- -username</option> and
+            <option>- -password</option> command-line options were used
+            for authentication against both the source and destination
+            repositories.  This caused problems when a user's
+            credentials weren't exactly the same for both repositories,
+            especially when running in noninteractive mode (with the
+            <option>- -non-interactive</option> option).  This was
+            fixed in Subversion 1.5 with the introduction of two new
+            pairs of options.  Use
+            <option>- -source-username</option> and
+            <option>- -source-password</option> to provide authentication
+            credentials for the source repository; use
+            <option>- -sync-username</option> and
+            <option>- -sync-password</option> to provide credentials for
+            the destination repository.  (The old
+            <option>- -username</option> and <option>- -password</option>
+            options still exist for compatibility, but we advise against
+            using them.)</para>
  -->
-        <para>In Subversion 1.4 wurden die an die
-          Kommandozeilenoptionen <option>--username</option> und
-          <option>--password</option> von <command>svnsync</command>
-          übergebenen Werte sowohl für die Authentisierung gegenüber
-          dem Quell-Projektarchiv als auch gegenüber dem Ziel-Projektarchiv
-          verwendet. Das führte zu Problemen, falls die Zugangsdaten
-          eines Benutzers nicht für beide Projektarchive identisch waren,
-          insbesondere im nicht-interaktiven Modus (mit der Option
-          <option>--non-interactive</option>). Dies ist in Subversion
-          1.5 mit der Einführung von zwei neuen Optionspaaren behoben
-          worden. Benutzen Sie <option>--source-username</option> und
-          <option>--source-password</option> für die Zugangsdaten des
-          Quell-Projektarchivs sowie <option>--sync-username</option>
-          und <option>--sync-password</option> für das
-          Ziel-Projektarchiv.  (Die alten Optionen
-          <option>--username</option> und <option>--password</option>
-          bleiben aus Kompatibilitätsgründen bestehen, doch raten wir
-          von deren Verwendung ab.)</para>
+          <para>In Subversion 1.4 wurden die an die
+            Kommandozeilenoptionen <option>--username</option> und
+            <option>--password</option> von <command>svnsync</command>
+            übergebenen Werte sowohl für die Authentisierung gegenüber
+            dem Quell-Projektarchiv als auch gegenüber dem  
Ziel-Projektarchiv
+            verwendet. Das führte zu Problemen, falls die Zugangsdaten
+            eines Benutzers nicht für beide Projektarchive identisch waren,
+            insbesondere im nicht-interaktiven Modus (mit der Option
+            <option>--non-interactive</option>). Dies ist in Subversion
+            1.5 mit der Einführung von zwei neuen Optionspaaren behoben
+            worden. Benutzen Sie <option>--source-username</option> und
+            <option>--source-password</option> für die Zugangsdaten des
+            Quell-Projektarchivs sowie <option>--sync-username</option>
+            und <option>--sync-password</option> für das
+            Ziel-Projektarchiv.  (Die alten Optionen
+            <option>--username</option> und <option>--password</option>
+            bleiben aus Kompatibilitätsgründen bestehen, doch raten wir
+            von deren Verwendung ab.)</para>

-      </note>
+        </note>

  <!--
-      <para>And now comes the fun part.  With a single subcommand, we
-        can tell <command>svnsync</command> to copy all the
-        as-yet-unmirrored revisions from the source repository to the
-        target.<footnote><para>Be forewarned that while it will take
-        only a few seconds for the average reader to parse this
-        paragraph and the sample output that follows it, the actual
-        time required to complete such a mirroring operation is, shall
-        we say, quite a bit longer.</para></footnote>
-        The <command>svnsync synchronize</command> subcommand will
-        peek into the special revision properties previously stored on
-        the target repository, and determine both what repository it
-        is mirroring as well as that the most recently mirrored
-        revision was revision 0.  Then it will query the source
-        repository and determine what the latest revision in that
-        repository is.  Finally, it asks the source repository's
-        server to start replaying all the revisions between 0 and that
-        latest revision.  As <command>svnsync</command> gets the
-        resultant response from the source repository's server, it
-        begins forwarding those revisions to the target repository's
-        server as new commits.</para>
+        <para>And now comes the fun part.  With a single subcommand, we
+          can tell <command>svnsync</command> to copy all the
+          as-yet-unmirrored revisions from the source repository to the
+          target.<footnote><para>Be forewarned that while it will take
+          only a few seconds for the average reader to parse this
+          paragraph and the sample output that follows it, the actual
+          time required to complete such a mirroring operation is, shall
+          we say, quite a bit longer.</para></footnote> The
+          <command>svnsync synchronize</command> subcommand will peek
+          into the special revision properties previously stored on the
+          target repository and determine how much of the source
+          repository has been previously mirrored—in this case,
+          the most recently mirrored revision is r0.  Then it will query
+          the source repository and determine what the latest revision
+          in that repository is.  Finally, it asks the source
+          repository's server to start replaying all the revisions
+          between 0 and that latest revision.  As
+          <command>svnsync</command> gets the resultant response from
+          the source repository's server, it begins forwarding those
+          revisions to the target repository's server as new
+          commits.</para>
  -->
-      <para>Und nun kommt der lustige Teil. Mit einem einfachen
-        Unterbefehl können wir <command>svnsync</command> auffordern,
-        alle bislang ungespiegelten Revisionen aus dem
-        Quell-Projektarchiv zum Ziel zu kopieren.<footnote><para>Seien
-        Sie jedoch vorgewarnt, dass, obwohl der durchschnittliche
-        Leser nur ein paar Sekunden benötigt, um diesen Absatz und die
-        ihm folgende Beispielausgabe zu erfassen, die tatsächlich für
-        eine vollständige Spiegelung erforderliche Zeit um Einiges
-        länger ist.</para></footnote> Der Unterbefehl
-        <command>svnsync synchronize</command> wird die bereits vorher
-        im Ziel-Projektarchiv gespeicherten besonderen
-        Revisions-Eigenschaften untersuchen und sowohl ermitteln,
-        welches Projektarchiv es spiegelt und dass die zuletzt
-        gespiegelte Revision die Revision 0 war. Dann fragt es das
-        Quell-Projektarchiv ab, welches die jüngste Revision in diesem
-        Projektarchiv ist.  Schließlich fordert es den Server des
-        Quell-Projektarchivs auf, alle Revisionen zwischen 0 und
-        dieser letzten Revision zu wiederholen. Sobald
-        <command>svnsync</command> die entsprechende Antwort vom
-        Quell-Projektarchiv-Server erhält, leitet es diese Revisionen
-        als neue Übergaben an den Server des Ziel-Projektarchivs
-        weiter.</para>
+        <para>Und nun kommt der lustige Teil. Mit einem einfachen
+          Unterbefehl können wir <command>svnsync</command> auffordern,
+          alle bislang ungespiegelten Revisionen aus dem
+          Quell-Projektarchiv zum Ziel zu kopieren.<footnote><para>Seien
+          Sie jedoch vorgewarnt, dass, obwohl der durchschnittliche
+          Leser nur ein paar Sekunden benötigt, um diesen Absatz und die
+          ihm folgende Beispielausgabe zu erfassen, die tatsächlich für
+          eine vollständige Spiegelung erforderliche Zeit um Einiges
+          länger ist.</para></footnote> Der Unterbefehl
+          <command>svnsync synchronize</command> wird die bereits vorher
+          im Ziel-Projektarchiv gespeicherten besonderen
+          Revisions-Eigenschaften untersuchen und sowohl ermitteln,
+          welches Projektarchiv es spiegelt und dass die zuletzt
+          gespiegelte Revision die Revision 0 war. Dann fragt es das
+          Quell-Projektarchiv ab, welches die jüngste Revision in diesem
+          Projektarchiv ist.  Schließlich fordert es den Server des
+          Quell-Projektarchivs auf, alle Revisionen zwischen 0 und
+          dieser letzten Revision zu wiederholen. Sobald
+          <command>svnsync</command> die entsprechende Antwort vom
+          Quell-Projektarchiv-Server erhält, leitet es diese Revisionen
+          als neue Übergaben an den Server des Ziel-Projektarchivs
+          weiter.</para>

  <!--
-      <informalexample>
-        <screen>
+        <informalexample>
+          <screen>
  $ svnsync help synchronize
  synchronize (sync): usage: svnsync synchronize DEST_URL

@@ -5869,10 +5893,10 @@
  Copied properties for revision 4065.
  $
  </screen>
-      </informalexample>
+        </informalexample>
  -->
-      <informalexample>
-        <screen>
+        <informalexample>
+          <screen>
  $ svnsync help synchronize
  synchronize (sync): Aufruf: svnsync synchronize ZIEL_URL

@@ -5899,257 +5923,301 @@
  Eigenschaften für Revision 4065 kopiert.
  $
  </screen>
-      </informalexample>
+        </informalexample>

  <!--
-      <para>Of particular interest here is that for each mirrored
-        revision, there is first a commit of that revision to the
-        target repository, and then property changes follow.  This
-        two-phase replication is required because the initial commit
-        is performed by (and attributed to) the user
-        <literal>syncuser</literal> and is datestamped with the time
-        as of that revision's creation.  <command>svnsync</command>
-        has to follow up with an immediate series of property
-        modifications that copy into the target repository all the
-        original revision properties found for that revision in the
-        source repository, which also has the effect of fixing the
-        author and datestamp of the revision to match that of the
-        source repository.</para>
+        <para>Of particular interest here is that for each mirrored
+          revision, there is first a commit of that revision to the
+          target repository, and then property changes follow.  This
+          two-phase replication is required because the initial commit
+          is performed by (and attributed to) the user
+          <literal>syncuser</literal> and is datestamped with the time
+          as of that revision's creation.  <command>svnsync</command>
+          has to follow up with an immediate series of property
+          modifications that copy into the target repository all the
+          original revision properties found for that revision in the
+          source repository, which also has the effect of fixing the
+          author and datestamp of the revision to match that of the
+          source repository.</para>
  -->
-      <para>Von besonderem Interesse ist hier, dass für jede
-        gespiegelte Revision zunächst eine Übergabe der Revision an
-        das Ziel-Projektarchiv erfolgt und dann die Änderungen der
-        Eigenschaften folgen. Diese zweiphasige Replizierung ist
-        notwendig, da die anfängliche Übergabe durch den Benutzer
-        <literal>syncuser</literal> durchgeführt (und ihm auch
-        zugeschrieben) wird und mit dem Zeitstempel der Erzeugung
-        dieser Revision versehen wird. <command>svnsync</command> hat
-        hinterher unmittelbaren Serie von Änderungen an den
-        Eigenschaften vorzunehmen, die all die Eigenschaften dieser
-        Revision vom Quell-Projektarchiv ins Ziel-Projektarchiv
-        kopieren, was auch den Effekt hat, dass der Autor und der
-        Zeitstempel so korrigiert werden, dass diese den
-        entsprechenden Werten im Quell-Projektarchiv
-        entsprechen.</para>
+        <para>Von besonderem Interesse ist hier, dass für jede
+          gespiegelte Revision zunächst eine Übergabe der Revision an
+          das Ziel-Projektarchiv erfolgt und dann die Änderungen der
+          Eigenschaften folgen. Diese zweiphasige Replizierung ist
+          notwendig, da die anfängliche Übergabe durch den Benutzer
+          <literal>syncuser</literal> durchgeführt (und ihm auch
+          zugeschrieben) wird und mit dem Zeitstempel der Erzeugung
+          dieser Revision versehen wird. <command>svnsync</command> hat
+          hinterher unmittelbaren Serie von Änderungen an den
+          Eigenschaften vorzunehmen, die all die Eigenschaften dieser
+          Revision vom Quell-Projektarchiv ins Ziel-Projektarchiv
+          kopieren, was auch den Effekt hat, dass der Autor und der
+          Zeitstempel so korrigiert werden, dass diese den
+          entsprechenden Werten im Quell-Projektarchiv
+          entsprechen.</para>

  <!--
-      <para>Also noteworthy is that <command>svnsync</command>
-        performs careful bookkeeping that allows it to be safely
-        interrupted and restarted without ruining the integrity of the
-        mirrored data.  If a network glitch occurs while mirroring a
-        repository, simply repeat the <command>svnsync
-        synchronize</command> command, and it will happily pick up
-        right where it left off.  In fact, as new revisions appear in
-        the source repository, this is exactly what you do
-        to keep your mirror up to date.</para>
+        <para>Also noteworthy is that <command>svnsync</command>
+          performs careful bookkeeping that allows it to be safely
+          interrupted and restarted without ruining the integrity of the
+          mirrored data.  If a network glitch occurs while mirroring a
+          repository, simply repeat the <command>svnsync
+          synchronize</command> command, and it will happily pick up
+          right where it left off.  In fact, as new revisions appear in
+          the source repository, this is exactly what you do
+          to keep your mirror up to date.</para>
  -->
-      <para>Bemerkenswert ist ebenfalls, dass
-        <command>svnsync</command> eine sorgfältige Buchführung
-        vornimmt, die es ihm erlaubt, sicher unterbrochen und erneut
-        gestartet zu werden, ohne die Integrität der gespiegelten
-        Daten zu gefährden. Falls während des Spiegelns ein
-        Netzproblem entsteht, wiederholen Sie einfach den Befehl
-        <command>svnsync synchronize</command>, und er wird einfach
-        damit weitermachen, womit er aufgehört hat. Das ist
-        tatsächlich genau das, was Sie machen, um Ihren Spiegel
-        aktuell zu halten, wenn neue Revisionen im Quell-Projektarchiv
-        auftauchen.</para>
+        <para>Erwähnenswert ist ebenfalls, dass
+          <command>svnsync</command> eine sorgfältige Buchführung
+          vornimmt, die es ihm erlaubt, sicher unterbrochen und erneut
+          gestartet zu werden, ohne die Integrität der gespiegelten
+          Daten zu gefährden. Falls während des Spiegelns ein
+          Netzproblem entsteht, wiederholen Sie einfach den Befehl
+          <command>svnsync synchronize</command>, und er wird einfach
+          damit weitermachen, womit er aufgehört hat. Das ist
+          tatsächlich genau das, was Sie machen, um Ihren Spiegel
+          aktuell zu halten, wenn neue Revisionen im Quell-Projektarchiv
+          auftauchen.</para>

-      <sidebar>
+        <warning>
+          <para>As part of its bookkeeping, <command>svnsync</command>
+            records in the mirror repository the URL with which the
+            mirror was initialized.  Because of this, invocations of
+            <command>svnsync</command> which follow the initialization
+            step do not <emphasis>require</emphasis> that you provide
+            the source URL on the command line again.  However, for
+            security purposes, we recommend that you continue to do so.
+            Depending on how it is deployed, it may not be safe for
+            <command>svnsync</command> to trust the source URL which it
+            retrieves from the mirror repository, and from which it
+            pulls versioned data.</para>
+        </warning>
+
+        <sidebar>
  <!--
***The diff for this file has been truncated for email.***


More information about the svnbook-dev mailing list