[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