[svnbook commit] r3444 - trunk/src/de/book

codesite-noreply at google.com codesite-noreply at google.com
Mon Mar 9 17:19:26 CDT 2009


Author: jmfelderhoff at gmx.eu
Date: Mon Mar  9 14:38:57 2009
New Revision: 3444

Modified:
    trunk/src/de/book/ch05-repository-admin.xml

Log:
* trunk/src/de/book/ch05-repository-admin.xml
   - Fixes ticket #224 (cf. http://www.svnbook.de/report/6).


Modified: trunk/src/de/book/ch05-repository-admin.xml
==============================================================================
--- trunk/src/de/book/ch05-repository-admin.xml	(original)
+++ trunk/src/de/book/ch05-repository-admin.xml	Mon Mar  9 14:38:57 2009
@@ -4205,8 +4205,12 @@

      <!-- ===============================================================  
-->
      <sect2 id="svn.reposadmin.maint.filtering">
+<!--
        <title>Filtering Repository History</title>
+-->
+      <title>Filtern der Repository-Historie</title>

+<!--
        <para>Since Subversion stores your versioned history using, at
          the very least, binary differencing algorithms and data
          compression (optionally in a completely opaque database
@@ -4237,7 +4241,42 @@
          administrators need a more manageable and malleable
          representation of the data in their repositories—the
          Subversion repository dump format.</para>
+-->
+      <para>Da Subversion Ihre versionierte Historie mindestens mit
+        binären Differenzalgorithmen und Datenkompression abspeichert
+        (optional in einem völlig undurchsichtigen Datenbanksystem),
+        ist der Versuch manueller Eingiffe unklug, zumindest
+        schwierig und unter allen Umständen nicht angeraten. Sobald
+        Daten im Repository gespeichert sind, bietet Subversion im
+        Allgemeinen keine einfache Möglichkeit, diese Daten zu
+        entfernen.
+        <footnote>
+          <para>Das ist doch überhaupt der Grund dafür,
+            Versionskontrolle einzusetzen, oder?</para>
+        </footnote>
+        Doch zwangsläufig werden sich Gelegenheiten ergeben, bei denen
+        Sie die Historie Ihres Repositorys manipulieren müssen. Es
+        könnte sein, dass Sie alle Instanzen einer Datei entfernen
+        müssen, die versehentlich dem Repository hinzugefügt worden
+        ist, aber aus welchen Gründen auch immer nicht hineingehört).
+        <footnote>
+          <para>Das bewusste, vorsichtige Entfernen bestimmter Teile
+            versionierter Daten wird tatsächlich von wirlichen
+            Anwendungsfällen verlangt. Das ist der Grund, warum eine
+            <quote>Auslösch</quote>-Funktion eine der am häufigsten
+            gewünschten Funktionen von Subversion ist, von der die
+            Subversion-Entwickler hoffen, sie bald zur Verfügung
+            stellen zu können.</para>
+        </footnote>
+        Oder Sie haben vielleicht mehrere Projekte, die sich ein
+        Repository teilen und entscheiden sich nun, jedem Projekt sein
+        eigenes Repository zu geben. Um Aufgaben wie diese
+        bewerkstelligen zu können, benötigen Administratoren eine
+        besser handhabbare und bearbeitbare Repräsentation der Daten
+        in den Repositorys – das
+        Subversion-Repository-Auszugsformat.</para>

+<!--
        <para>As we described earlier in <xref
          linkend="svn.reposadmin.maint.migrate" />, the Subversion
          repository dump format is a human-readable representation of
@@ -4251,7 +4290,24 @@
          worth of repository activity encapsulated in what is likely to
          be a very large dump file, it could take you a long, long time
          to manually inspect and modify it.</para>
+-->
+      <para>Wie bereits in <xref
+        linkend="svn.reposadmin.maint.migrate" /> beschrieben, ist das
+        Subversion-Repository-Auszugsformat eine menschenlesbare
+        Wiedergabe der Änderungen, die Sie an Ihren versionierten
+        Daten im Laufe der Zeit vorgenommen haben. Verwenden Sie den
+        Befehl <command>svnadmin dump</command>, um den Auszug
+        anzulegen und <command>svnadmin load</command>, um ein neues
+        Repository damit zu füllen. Das Tolle an der
+        Menschenlesbarkeit des Auszugsformates ist, dass Sie, sofern
+        es Ihnen nicht egal ist, die Daten manuell untersuchen und
+        verändern können. Natürlich besteht ein Nachteil darin, dass
+        eine Auszugsdatei eines Repositorys, in das über drei Jahre
+        Änderungen eingeflossen sind, riesig groß sein wird, und es
+        Sie eine lange, lange Zeit kosten wird, die Daten manuell zu
+        untersuchen und zu verändern.</para>

+<!--
        <para>That's where <command>svndumpfilter</command> becomes
          useful.  This program acts as a path-based filter for
          repository dump streams.  Simply give it either a list of
@@ -4260,7 +4316,17 @@
          filter.  The result will be a modified stream of dump data
          that contains only the versioned paths you (explicitly or
          implicitly) requested.</para>
+-->
+      <para>Hierbei hilft <command>svndumpfilter</command>.  Dieses
+        Programm verhält sich wie ein pfadbasierter Filter für
+        Auszugsströme. Geben Sie ihm einfach eine Liste von Pfaden
+        mit, die Sie behalten möchten oder eine Liste von Pfaden, die
+        Sie nicht behalten möchten, und leiten Sie Ihre Auszugsdaten
+        durch diesen Filter. Das Ergebnis ist ein modifizierter Strom
+        der Auszugsdaten, der nur die versionierten Pfade beinhaltet,
+        die Sie (explizit oder implizit) verlangt haben.</para>

+<!--
        <para>Let's look at a realistic example of how you might use this
          program.  Earlier in this chapter (see <xref
          linkend="svn.reposadmin.projects.chooselayout"/>), we discussed the
@@ -4272,11 +4338,30 @@
          A common change is the decision to move multiple projects
          that are sharing a single repository into separate
          repositories for each project.</para>
+-->
+      <para>Lassen Sie uns an einem realistischen Beispiel betrachten,
+      wie Sie diesen Programm verwenden könnten. Früher in diesem
+      Kapitel (siehe <xref
+      linkend="svn.reposadmin.projects.chooselayout"/>) erörterten wir
+      das Entscheidungsfindungsverfahren, wie Sie Ihre Daten im
+      Repository anordnen sollen – ein Repository pro Projekt
+      oder kombiniert, wie Sie die Daten im Repository verteilen usw.
+      Doch manchmal, nachdem bereits einige Revisionen hinzugekommen
+      sind, überdenken Sie die Anordnung und würden gerne einige
+      Änderungen vornehmen. Eine verbreitete Änderung ist die
+      Entscheidung, mehrere Projekte, die sich ein Repository teilen,
+      auf getrennte Repositorys pro Projekt aufzuteilen.</para>

+<!--
        <para>Our imaginary repository contains three projects:
          <literal>calc</literal>, <literal>calendar</literal>, and
          <literal>spreadsheet</literal>.  They have been living
          side-by-side in a layout like this:</para>
+-->
+      <para>Unser imaginäres Repository beinhaltet drei Projekte:
+        <literal>calc</literal>, <literal>calendar</literal> und
+        <literal>spreadsheet</literal>. Sie waren miteinander in der
+        folgenden Anordnung abgelegt:</para>

        <screen>
  /
@@ -4294,9 +4379,15 @@
        tags/
  </screen>

+<!--
        <para>To get these three projects into their own repositories,
          we first dump the whole repository:</para>
+-->
+      <para>Um diese drei Projekte in ihre eigenen Repositorys zu
+        bekommen, erstellen wir zunächst einen Auszug des gesamten
+        Repositorys:</para>

+<!--
        <screen>
  $ svnadmin dump /var/svn/repos > repos-dumpfile
  * Dumped revision 0.
@@ -4306,10 +4397,26 @@
  …
  $
  </screen>
+-->
+      <screen>
+$ svnadmin dump /var/svn/repos > repos-dumpfile
+* Revision 0 ausgegeben.
+* Revision 1 ausgegeben.
+* Revision 2 ausgegeben.
+* Revision 3 ausgegeben.
+…
+$
+</screen>

+<!--
        <para>Next, run that dump file through the filter, each time
          including only one of our top-level directories.  This results
          in three new dump files:</para>
+-->
+      <para>Dann leiten wir die Auszugsdatei durch die Filter, wobei
+        jedesmal nur jeweils eins der obersten Verzeichnisse
+        ausgewählt wird.  Als Ergebnis erhalten wir drei
+        Auszugsdateien:</para>

        <screen>
  $ svndumpfilter include calc < repos-dumpfile > calc-dumpfile
@@ -4321,6 +4428,7 @@
  $
  </screen>

+<!--
        <para>At this point, you have to make a decision.  Each of your
          dump files will create a valid repository, but will preserve
          the paths exactly as they were in the original repository.
@@ -4337,6 +4445,24 @@
          component.  Also, you'll want to remove the section of dump
          data that creates the <filename>calc</filename> directory.  It
          will look something like the following:</para>
+-->
+      <para>An dieser Stelle müssen sie eine Entscheidung treffen.
+        Jede Ihrer Auszugsdateien wird ein gültiges Repository
+        erzeugen, allerdings unter Beibehaltung der Pfade wie sie im
+        ursprünglichen Repository waren. Das bedeutet, dass, obwohl
+        Sie ein Repository ausschließlich für Ihr
+        <literal>calc</literal> Projekt haben, wird es immer noch ein
+        Wurzelverzeichnis namens <filename>calc</filename> besitzen.
+        Falls Sie möchten, dass die Verzeichnisse
+        <filename>trunk</filename>, <filename>tags</filename> und
+        <filename>branches</filename> direkt im Wurzelverzeichnis
+        Ihres Repositorys liegen, sollten Sie Ihre Auszugsdateien
+        editieren, indem Sie die Einträge <literal>Node-path</literal>
+        und <literal>Node-copyfrom-path</literal> verändern, so dass
+        sie nicht mehr die erste Komponente <filename>calc/</filename>
+        im Pfad haben. Sie sollten auch den Abschnitt entfernen, der
+        das Verzeichnis <filename>calc</filename> anlegt. Es sollte
+        etwa wie folgt aussehen:</para>

        <screen>
  Node-path: calc
@@ -4346,6 +4472,7 @@

  </screen>

+<!--
        <warning>
          <para>If you do plan on manually editing the dump file to
            remove a top-level directory, make sure your editor is
@@ -4355,33 +4482,73 @@
            with the metadata.  This will render the dump file
            useless.</para>
        </warning>
+-->
+      <warning>
+        <para>Falls Sie sich entscheiden sollten, die Auszugsdatei
+          manuell zu editieren, um eins der obersten Verzeichnisse zu
+          entfernen, sollten Sie sicherstellen, dass Ihr Editor nicht
+          automatisch Zeilenenden in das native Format umwandelt (z.B.
+          <literal>\r\n</literal> in <literal>\n</literal>), da sonst
+          der Inhalt nicht zu den Metadaten passt. Das würde Ihre
+          Auszugsdatei nutzlos machen.</para>
+      </warning>

+<!--
        <para>All that remains now is to create your three new
          repositories, and load each dump file into the right
          repository, ignoring the UUID found in the dump stream:</para>
+-->
+      <para>Alles, was jetzt noch übrigbleibt, ist, Ihre drei neuen
+        Repositorys zu erstellen und jede Auszugsdatei in das richtige
+        Repository zu laden, wobei die UUID aus dem Auszugsstrom
+        ignoriert wird:</para>

+<!--
        <screen>
  $ svnadmin create calc
-$ svnadmin load --ignore-uuid calc < calc-dumpfile
+$ svnadmin load - -ignore-uuid calc < calc-dumpfile
  <<< Started new transaction, based on original revision 1
       * adding path : Makefile ... done.
       * adding path : button.c ... done.
  …
  $ svnadmin create calendar
-$ svnadmin load --ignore-uuid calendar < cal-dumpfile
+$ svnadmin load - -ignore-uuid calendar < cal-dumpfile
  <<< Started new transaction, based on original revision 1
       * adding path : Makefile ... done.
       * adding path : cal.c ... done.
  …
  $ svnadmin create spreadsheet
-$ svnadmin load --ignore-uuid spreadsheet < ss-dumpfile
+$ svnadmin load - -ignore-uuid spreadsheet < ss-dumpfile
  <<< Started new transaction, based on original revision 1
       * adding path : Makefile ... done.
       * adding path : ss.c ... done.
  …
  $
  </screen>
+-->
+      <screen>
+$ svnadmin create calc
+$ svnadmin load --ignore-uuid calc < calc-dumpfile
+<<< Neue Transaktion basierend auf Originalrevision 1 gestartet
+     * Füge Pfad hinzu: Makefile ... erledigt.
+     * Füge Pfad hinzu: button.c ... erledigt.
+…
+$ svnadmin create calendar
+$ svnadmin load --ignore-uuid calendar < cal-dumpfile
+<<< Neue Transaktion basierend auf Originalrevision 1 gestartet
+     * Füge Pfad hinzu: Makefile ... erledigt.
+     * Füge Pfad hinzu: cal.c ... erledigt.
+…
+$ svnadmin create spreadsheet
+$ svnadmin load --ignore-uuid spreadsheet < ss-dumpfile
+<<< Neue Transaktion basierend auf Originalrevision 1 gestartet
+     * Füge Pfad hinzu: Makefile ... erledigt.
+     * Füge Pfad hinzu: ss.c ... erledigt.
+…
+$
+</screen>

+<!--
        <para>Both of <command>svndumpfilter</command>'s subcommands
          accept options for deciding how to deal with
          <quote>empty</quote> revisions.  If a given revision
@@ -4390,27 +4557,47 @@
          unwanted.  So to give the user control over what to do with
          those revisions, <command>svndumpfilter</command> provides
          the following command-line options:</para>
+-->
+      <para>Beide Unterbefehle von <command>svndumpfilter</command>
+        akzeptieren Optionen, die angeben, wie <quote>leere</quote>
+        Revisionen behandelt werden sollen. Falls eine Revision nur
+        Änderungen an herausgefilterten Pfaden beinhaltet, könnte die
+        neue Revision als uninteressant oder gar unerwünscht gelten.
+        Um dem Benutzer die Kontrolle darüber zu geben, wie hiermit
+        verfahren werden soll, bietet <command>svndumpfilter</command>
+        die folgenden Kommandozeilenoptionen:</para>

        <variablelist>
          <varlistentry>
            <term><option>--drop-empty-revs</option></term>
            <listitem>
+<!--
              <para>Do not generate empty revisions at all—just
                omit them.</para>
+-->
+            <para>Überhaupt keine leeren Revisionen erzeugen –
+              einfach auslassen.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term><option>--renumber-revs</option></term>
            <listitem>
+<!--
              <para>If empty revisions are dropped (using the
-              <option>--drop-empty-revs</option> option), change the
+              <option>- -drop-empty-revs</option> option), change the
                revision numbers of the remaining revisions so that
                there are no gaps in the numeric sequence.</para>
+-->
+            <para>Falls leere Revisionen ausgelassen werden (mit der
+              Option <option>--drop-empty-revs</option>), die
+              Nummern der übriggebliebenen Revisionen ändern, so dass
+              keine Lücken in der Nummernfolge auftreten.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term><option>--preserve-revprops</option></term>
            <listitem>
+<!--
              <para>If empty revisions are not dropped, preserve the
                revision properties (log message, author, date, custom
                properties, etc.) for those empty revisions.
@@ -4418,10 +4605,19 @@
                original datestamp, and a generated log message that
                indicates that this revision was emptied by
                <command>svndumpfilter</command>.</para>
+-->
+            <para>Falls leere Revisionen nicht ausgelassen werden, die
+              Eigenschaften der leeren Revisionen bewahren
+              (Protokolleinrag, Autor, Datum, Propertys usw.). Sonst
+              beinhalten leere Revisionen lediglich den Zeitstempel
+              und einen erzeugten Protokolleintrag, der darauf
+              hinweist, dass diese Revision von
+              <command>svndumpfilter</command> geleert wurde.</para>
            </listitem>
          </varlistentry>
        </variablelist>
-
+
+<!--
        <para>While <command>svndumpfilter</command> can be very
          useful and a huge timesaver, there are unfortunately a
          couple of gotchas.  First, this utility is overly sensitive
@@ -4429,6 +4625,15 @@
          dump file are specified with or without leading slashes.
          You'll want to look at the <literal>Node-path</literal> and
          <literal>Node-copyfrom-path</literal> headers.</para>
+-->
+      <para>Obwohl <command>svndumpfilter</command> sehr nützlich und
+        eine Zeitersparnis sein kann, gibt es unglücklicherweise ein
+        paar Fallstricke. Erstens ist das Dienstprogramm
+        überempfindlich gegenüber der Pfadsemantik. Achten Sie darauf,
+        ob die Pfade in Ihrer Auszugsdatei mit oder ohne führende
+        Schrägstriche angegeben werden. Sie sollten sich die Einträge
+        <literal>Node-path</literal> und
+        <literal>Node-copyfrom-path</literal> ansehen.</para>

        <screen>
  …
@@ -4436,6 +4641,7 @@
  …
  </screen>

+<!--
        <para>If the paths have leading slashes, you should
          include leading slashes in the paths you pass to
          <command>svndumpfilter include</command> and
@@ -4450,7 +4656,25 @@
          </footnote>
          you should probably normalize those paths so that they all
          have, or all lack, leading slashes.</para>
+-->
+      <para>Falls die Pfade führende Schrägstriche haben, sollten auch
+        Sie Schrägstriche in den Pfaden angeben, die Sie an
+        <command>svndumpfilter include</command> und
+        <command>svndumpfilter exclude</command> übergeben (und wenn
+        sie keine haben, sollten Sie auch keine angeben). Falls Ihre
+        Auszugsdatei aus irgendwelchen Gründen einen nicht
+        konsistenten Gebrauch von führenden Schrägstrichen macht,
+        <footnote>
+          <para>Obwohl <command>svnadmin dump</command> ein
+            konsistentes Vorgehen bezüglich führender Schrägstriche
+            vorweisen kann (indem es sie nicht einfügt), sind andere
+            Programme, die Auszugsdateien erzeugen eventuell nicht so
+            konsistent.</para>
+        </footnote>
+        sollten Sie diese Pfade normalisieren, so dass sie alle
+        entweder Schrägstriche haben oder nicht.</para>

+<!--
        <para>Also, copied paths can give you some trouble.
          Subversion supports copy operations in the repository, where
          a new path is created by copying some already existing path.
@@ -4471,7 +4695,29 @@
          your set of included/excluded paths, perhaps including the
          paths that served as sources of your troublesome copy
          operations, too.</para>
+-->
+      <para>Ebenso können kopierte Pfade Probleme bereiten. Subversion
+        unterstützt Kopieroperationen im Repository, bei denen ein
+        neuer Pfad erzeugt wird, indem ein bereits bestehender kopiert
+        wird. Es kann vorkommen, dass Sie zu irgendeinem Zeitpunkt der
+        Lebenszeit Ihres Repositorys eine Datei oder ein Verzeichnis
+        von einer durch <command>svndumpfilter</command> ausgelassenen
+        Stelle an eine durch <command>svndumpfilter</command>
+        berücksichtigte Stelle kopiert haben. Um die Auszugsdateien
+        unabhängig zu machen, muss <command>svndumpfilter</command>
+        trotzdem das Hinzufügen des neuen Pfades anzeigen – mit
+        dem Inhalt aller durch die Kopie erzeugten Dateien –
+        allerdings nicht als eine Kopie aus einer Quelle, die es gar
+        nicht im gefilterten Auszugsstrom gibt. Da allerdings das
+        Subversion Auszugsdateiformat nur Änderungen von Revisionen
+        beinhaltet, kann es sein, dass der Inhalt der Quelle der Kopie
+        nicht verfügbar ist. Wenn Sie mutmaßen, dass Sie solche Kopien
+        in Ihrem Repository haben, sollten Sie die Auswahl der
+        ausgelassenen/berücksichtigten Pfade überdenken, indem Sie
+        vielleicht die Pfade, die als Quellen für die problematischen
+        Kopien dienten, hinzunehmen.</para>

+<!--
        <para>Finally, <command>svndumpfilter</command> takes path
          filtering quite literally.  If you are trying to copy the
          history of a project rooted at
@@ -4491,6 +4737,27 @@
          directories that the new dump stream expects to exist
          actually do exist in the target repository before trying to
          load the stream into that repository.</para>
+-->
+      <para>Schließlich behandelt <command>svndumpfilter</command>
+        Pfadfilterung ziemlich wörtlich. Wenn Sie die Historie eines
+        Projektes mit dem Wurzelverzeichnis
+        <filename>trunk/my-project</filename> kopieren und sie in ein
+        eigenes Repository verschieben möchten, werden Sie
+        selbstverständlich den Befehl <command>svndumpfilter
+        include</command> verwenden, um alle Änderungen in und
+        unterhalb von <filename>trunk/my-project</filename> zu
+        bewahren. Doch macht die entstehende Auszugsdatei keinerlei
+        Annahmen bezüglich des Repositorys, in das Sie die Daten zu
+        laden beabsichtigen. In diesem besonderen Fall könnten die
+        Auszugsdaten mit der Revision beginnen, die das Verzeichnis
+        <filename>trunk/my-project</filename> hinzugefügt hat, doch
+        sie werden <emphasis>keine</emphasis> Direktiven enthalten,
+        dir das Verzeichnis <filename>trunk</filename> selbst anlegen
+        (weil <filename>trunk</filename> nicht zum Filter der zu
+        berücksichtigenden Pfade passt). Sie müssen sicherstellen,
+        dass alle Verzeichnisse, die der Auszugsstrom erwartet,
+        tatsächlich im Ziel-Repository vorhanden sind, bevor Sie
+        versuchen, den Strom in dieses Repository zu laden.</para>

      </sect2>



More information about the svnbook-dev mailing list