[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