[svnbook] r3820 committed - * trunk/src/de/book/ch03-advanced-topics.xml...

svnbook at googlecode.com svnbook at googlecode.com
Mon Jan 24 14:54:17 CST 2011


Revision: 3820
Author: jmfelderhoff at gmx.eu
Date: Mon Jan 24 12:53:24 2011
Log: * trunk/src/de/book/ch03-advanced-topics.xml
   - Ticket #138 (Externals Definitions), cf.
     http://www.svnbook.de/ticket/138.

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

Modified:
  /trunk/src/de/book/ch03-advanced-topics.xml

=======================================
--- /trunk/src/de/book/ch03-advanced-topics.xml	Fri Nov 19 10:40:10 2010
+++ /trunk/src/de/book/ch03-advanced-topics.xml	Mon Jan 24 12:53:24 2011
@@ -5700,8 +5700,12 @@
    <!-- =================================================================  
-->
    <!-- =================================================================  
-->
    <sect1 id="svn.advanced.externals">
+<!--
      <title>Externals Definitions</title>
-
+-->
+    <title>Externals-Definitionen</title>
+
+<!--
      <para>Sometimes it is useful to construct a working copy that is
        made out of a number of different checkouts.  For example, you
        may want different subdirectories to come from different
@@ -5712,7 +5716,20 @@
        to achieve.  But if this layout is important for everyone who
        uses your repository, every other user will need to perform the
        same checkout operations that you did.</para>
-
+-->
+    <para>Manchmal kann es nützlich sein, eine Arbeitskopie anzulegen,
+      die aus einer Anzahl verschiedener Checkouts besteht. Es könnte
+      beispielsweise sein, dass Sie verschiedene Unterverzeichnisse
+      aus verschiedenen Bereichen des Projektarchivs haben möchten
+      oder vielleicht sogar aus völlig verschiedenen Projektarchiven.
+      Natürlich könnten Sie ein solches Szenario manuell erstellen
+      – indem Sie <command>svn checkout</command> verwenden, um
+      die verschachtelte Verzeichnisstruktur Ihrer Wahl anzulegen.
+      Wenn diese Struktur jedoch für jeden Benutzer Ihres
+      Projektarchivs wichtig ist, müsste jeder andere Benutzer
+      dieselben Checkouts ausführen wie Sie.</para>
+
+<!--
      <para>Fortunately, Subversion provides support for
        <firstterm>externals definitions</firstterm>.  An externals
        definition is a mapping of a local directory to the
@@ -5725,7 +5742,24 @@
        versioned directory, and its value describes both the external
        repository location and the client-side directory to which that
        location should be checked out.</para>
-
+-->
+    <para>Glücklicherweise unterstützt Subversion
+      <firstterm>Externals-Definitionen</firstterm>. Eine
+      Externals-Definition ist eine Abbildung eines lokalen
+      Verzeichnisses auf den URL – und idealerweise eine
+      bestimmte Revision – eines versionierten Verzeichnisses.
+      In Subversion deklarieren Sie Externals-Definitionen in Gruppen
+      unter Verwendung der Eigenschaft
+      <literal>svn:externals</literal>. Sie können diese Eigenschaft
+      mit <command>svn propset</command> oder <command>svn
+        propedit</command> erstellen oder ändern (siehe <xref
+        linkend="svn.advanced.props.manip" />). Sie kann jedem
+      versionierten Verzeichnis zugeordnet werden, und ihr Wert
+      beschreibt sowohl die Adresse des externen Projektarchivs als
+      auch das Verzeichnis auf dem Client, in dem diese Adresse
+      ausgecheckt werden soll.</para>
+
+<!--
      <para>The convenience of the <literal>svn:externals</literal>
        property is that once it is set on a versioned directory,
        everyone who checks out a working copy with that directory also
@@ -5734,14 +5768,31 @@
        copy structure, no one else has to bother—Subversion will,
        after checking out the original working copy, automatically also
        check out the external working copies.</para>
+-->
+    <para>Sobald sie mit einem versionierten Verzeichnis verknüpft
+      ist, bietet die Eigenschaft <literal>svn:externals</literal> den
+      Komfort, dass jeder, der eine Arbeitskopie mit diesem
+      Verzeichnis auscheckt, die Vorteile der Externals-Definition
+      mitbekommt. Mit anderen Worten: Sobald sich jemand die Mühe
+      gemacht hat, die verschachtelte Struktur der Arbeitskopie zu
+      definieren, braucht sich niemand mehr darum zu kümmern –
+      Subversion checkt nach der ursprünglichen Arbeitskopie
+      automatisch die externen Arbeitskopien aus.</para>

      <warning>
+<!--
        <para>The relative target subdirectories of externals
          definitions <emphasis>must not</emphasis> already exist on
          your or other users' systems—Subversion will create them
          when it checks out the external working copy.</para>
+-->
+      <para>Die relativen Zielverzeichnisse von Externals-Definitionen
+        <emphasis>dürfen nicht</emphasis> bereits auf Ihrem oder dem
+        Systemen anderer Benutzer vorhanden sein – Subversion
+        erzeugt sie beim Auschecken der externen Arbeitskopie.</para>
      </warning>

+<!--
      <para>You also get in the externals definition design all the
        regular benefits of Subversion properties.  The definitions are
        versioned.  If you need to change an externals definition, you
@@ -5752,20 +5803,48 @@
        <userinput>svn update</userinput>.  The same thing will happen when
        others update their working copies and receive your changes to
        the externals definition.</para>
+-->
+    <para>Mit dem Design der Externals-Definition bekommen Sie auch
+      alle normalen Vorteile der Subversion-Eigenschaften. Die
+      Definitionen sind versioniert. Falls Sie eine
+      Externals-Definition ändern müssen, können Sie das mit den
+      üblichen Unterbefehlen zum Ändern von Eigenschaften
+      bewerkstelligen. Wenn Sie eine Änderung an der Eigenschaft
+      <literal>svn:externals</literal> übergeben, wird Subversion beim
+      nächsten <userinput>svn update</userinput> die ausgecheckten
+      Elemente mit der geänderten Externals-Definition
+      synchronisieren. Dasselbe passiert, wenn andere ihre
+      Arbeitskopie aktualisieren und Ihre Änderungen an der
+      Externals-Definition erhalten.</para>

      <tip>
+<!--
        <para>Because the <literal>svn:externals</literal> property has
          a multiline value, we strongly recommend that you use
          <command>svn propedit</command> instead of <command>svn
          propset</command>.</para>
+-->
+      <para>Da die Eigenschaft <literal>svn:externals</literal> einen
+        mehrzeiligen Wert besitzt, empfehlen wir dringend, dass Sie
+        <command>svn propedit</command> statt <command>svn
+        propset</command> verwenden.</para>
      </tip>

+<!--
      <para>Subversion releases prior to 1.5 honor an externals
        definition format that is a multiline table of subdirectories
        (relative to the versioned directory on which the property is
        set), optional revision flags, and fully qualified, absolute
        Subversion repository URLs.  An example of this might looks as
        follows:</para>
+-->
+    <para>Subversion-Versionen vor 1.5 akzeptieren ein Format für
+      Externals-Definitionen, welches eine mehrzeilige Tabelle ist,
+      die aus Unterverzeichnissen (relativ zum versionierten
+      Verzeichnis, mit dem die Eigenschaft verknüpft ist), optionalen
+      Revisions-Flags und vollqualifizierten, absoluten
+      Subversion-Projektarchiv-URLs besteht. Ein Beispiel könnte so
+      aussehen:</para>

      <screen>
  $ svn propget svn:externals calc
@@ -5774,11 +5853,18 @@
  third-party/skins/toolkit -r21 http://svn.example.com/skin-maker
  </screen>

+<!--
      <para>When someone checks out a working copy of the
        <filename>calc</filename> directory referred to in the previous
        example, Subversion also continues to check out the items found
        in its externals definition.</para>
-
+-->
+    <para>Wenn jemand eine Arbeitskopie des Verzeichnisses
+      <filename>calc</filename> aus dem obigen Beispiel auscheckt,
+      fährt Subversion damit fort, die Objekte in der
+      Externals-Definition auszuchecken.</para>
+
+<!--
      <screen>
  $ svn checkout http://svn.example.com/repos/calc
  A  calc
@@ -5799,7 +5885,29 @@
  Fetching external item into calc/third-party/skins
  …
  </screen>
-
+-->
+    <screen>
+$ svn checkout http://svn.example.com/repos/calc
+A  calc
+A  calc/Makefile
+A  calc/integer.c
+A  calc/button.c
+Ausgecheckt. Revision 148.
+
+Hole externen Verweis nach calc/third-party/sounds
+A  calc/third-party/sounds/ding.ogg
+A  calc/third-party/sounds/dong.ogg
+A  calc/third-party/sounds/clang.ogg
+…
+A  calc/third-party/sounds/bang.ogg
+A  calc/third-party/sounds/twang.ogg
+Ausgecheckt. Revision 14.
+
+Hole externen Verweis nach calc/third-party/skins
+…
+</screen>
+
+<!--
      <para>As of Subversion 1.5, though, a new format of the
        <literal>svn:externals</literal> property is supported.
        Externals definitions are still multiline, but the order and
@@ -5813,6 +5921,23 @@
        format supports relative URLs and URLs that carry peg revisions.
        The previous example of an externals definition might, in
        Subversion 1.5, look like the following:</para>
+-->
+    <para>Seit Subversion 1.5 wird jedoch ein neues Format der
+      Eigenschaft <literal>svn:externals</literal> unterstützt.
+      Die Externals-Definitionen sind immer noch mehrzeilig, jedoch
+      hat sich die Reihenfolge und das Format der verschiedenen
+      Informationen geändert. Die neue Syntax lehnt sich nun mehr an
+      die Reihenfolge der Argumente an, die Sie <command>svn
+        checkout</command> übergeben: Zunächst kommen die
+      Revisions-Flags, dann der URL des externen
+      Subversion-Projektarchivs und schließlich das relative lokale
+      Unterverzeichnis. Beachten Sie jedoch, dass wir diesmal nicht
+      von <quote>vollqualifizierten, absoluten
+        Subversion-Projektarchiv-URLs</quote> gesprochen haben. Das
+      liegt daran, dass das neue Format relative URLs und URLs mit
+      Peg-Revisionen unterstützt. Das vorausgegangene Beispiel einer
+      Externals-Definition könnte in Subversion 1.5 so aussehen:
+    </para>

      <screen>
  $ svn propget svn:externals calc
@@ -5821,9 +5946,14 @@
  -r21  http://svn.example.com/skin-maker third-party/skins/toolkit
  </screen>

+<!--
      <para>Or, making use of the peg revision syntax (which we describe
        in detail in <xref linkend="svn.advanced.pegrevs" />), it might
        appear as:</para>
+-->
+    <para>Bei Verwendung der Syntax für Peg-Revisionen (die wir
+      detailliert in <xref linkend="svn.advanced.pegrevs" />
+      behandeln), könnte es so aussehen:</para>

      <screen>
  $ svn propget svn:externals calc
@@ -5832,6 +5962,7 @@
  http://svn.example.com/skin-maker@21 third-party/skins/toolkit
  </screen>

+<!--
      <tip>
        <para>You should seriously consider using explicit revision
          numbers in all of your externals definitions.  Doing so means
@@ -5849,7 +5980,27 @@
          be the difference between a successful and a failed build of
          an older snapshot of your complex codebase.</para>
      </tip>
-
+-->
+    <tip>
+      <para>Sie sollten ernsthaft erwägen, explizite Revisionsnummern
+        in all Ihren Externals-Definitionen zu verwenden. Wenn Sie das
+        tun, bedeutet dies, dass Sie entscheiden, wann ein anderer
+        Schnappschuss mit extenen Informationen herangezogen werden
+        soll und welcher Schnappschuss genau. Außer der Vermeidung
+        überraschender Änderungen an Projektarchiven Dritter, auf die
+        Sie keinen Einfluss haben, bedeuten explizite
+        Revisionsnummern, dass beim Zurücksetzen Ihrer Arbeitskopie
+        auf eine frühere Revision auch die Externals-Definitionen auf
+        den entsprechenden früheren Stand zurückgesetzt werden, was
+        wiederum bedeutet, dass die externen Arbeitskopien derart
+        aktualisiert werden, dass <emphasis>sie</emphasis> so aussehen
+        wie zum Zeitpunkt Ihres Projektarchivs der früheren Revision.
+        Für Software-Projekte kann das den Unterschied zwischen einem
+        erfolgreichen und einem gescheiterten Build eines älteren
+        Schnappschusses Ihrer komplexen Codebasis ausmachen.</para>
+    </tip>
+
+<!--
      <para>For most repositories, these three ways of formatting the
        externals definitions have the same ultimate effect.  They all
        bring the same benefits.  Unfortunately, they all bring the same
@@ -5865,7 +6016,24 @@
        (<filename>my-project/some-dir</filename>) that tracks the
        latest revision of another of its subdirectories
        (<filename>my-project/external-dir</filename>).</para>
-
+-->
+    <para>Bei den meisten Projektarchiven bewirken die drei Formate
+      der Externals-Definition letztendlich dasselbe. Alle bringen die
+      gleichen Vorteile. Leider bringen alle aber auch die gleichen
+      Ärgernisse. Da die Definitionen absolute URLs verwenden, hat das
+      Kopieren oder Verschieben eines damit verknüpften Verzeichnisses
+      keine Auswirkungen auf das, was als extern ausgescheckt wird
+      (obwohl natürlich das relative lokale Zielverzeichnis mit dem
+      umbenannten Verzeichnis mitwandert). Das kann in bestimmten
+      Situationen verwirrend – sogar frustrierend – sein.
+      Nehmen wir beispielsweise an, dass Sie ganz oben ein Verzeichnis
+      namens <filename>my-project</filename> haben und eine
+      Externals-Definition auf eins seiner Unterverzeichnisse erstellt
+      haben (<filename>my-project/some-dir</filename>), welches
+      wiederum die letzte Revision eines anderen Unterverzeichnisses
+      verfolgt (<filename>my-project/external-dir</filename>).</para>
+
+<!--
      <screen>
  $ svn checkout http://svn.example.com/projects .
  A    my-project
@@ -5881,13 +6049,38 @@

  $
  </screen>
-
+-->
+    <screen>
+$ svn checkout http://svn.example.com/projects .
+A    my-project
+A    my-project/some-dir
+A    my-project/external-dir
+…
+Hole externen Verweis nach »my-project/some-dir/subdir«
+Externer Verweis ausgecheckt, Revision 11.
+
+Ausgecheckt, Revision 11.
+$ svn propget svn:externals my-project/some-dir
+subdir http://svn.example.com/projects/my-project/external-dir
+
+$
+</screen>
+
+<!--
      <para>Now you use <command>svn move</command> to rename the
        <filename>my-project</filename> directory.  At this point, your
        externals definition will still refer to a path under the
        <filename>my-project</filename> directory, even though that
        directory no longer exists.</para>
-
+-->
+    <para>Nun benennen Sie mit <command>svn move</command> das
+      Verzeichnis <filename>my-project</filename> um. Zu diesem
+      Zeitpunkt verweist Ihre Externals-Definition noch immer auf
+      einen Pfad unterhalb des Verzeichnisses
+      <filename>my-project</filename>, obwohl das Verzeichnis nicht
+      mehr existiert.</para>
+
+<!--
      <screen>
  $ svn move -q my-project renamed-project
  $ svn commit -m "Rename my-project to renamed-project."
@@ -5901,7 +6094,22 @@
  svn: Target path does not exist
  $
  </screen>
-
+-->
+    <screen>
+$ svn move -q my-project renamed-project
+$ svn commit -m "Rename my-project to renamed-project."
+Lösche         my-project
+Hinzufügen     renamed-project
+
+Revision 12 übertragen.
+$ svn update
+
+Hole externen Verweis nach »renamed-project/some-dir/subdir«
+svn: Zielpfad existiert nicht
+$
+</screen>
+
+<!--
      <para>Also, absolute URLs can cause problems with repositories
        that are available via multiple URL schemes.  For example, if
        your Subversion server is configured to allow everyone to check
@@ -5917,45 +6125,98 @@
        client doesn't support <literal>https://</literal> will be
        unable to fetch the external items.  Be aware, too, that if you
        need to reparent your working copy (using <command>svn  
switch</command>
-      with the <option>--relocate</option> option), externals definitions  
will
+      with the <option>- -relocate</option> option), externals definitions  
will
        <emphasis>not</emphasis> also be reparented.</para>
-
+-->
+    <para>Absolute URLs können außerdem Probleme bei Projektarchiven
+      hervorrufen, die über verschiedene URL-Schemata verfügbar sind.
+      Falls Ihr Subversion-Server so konfiguriert sein sollte, dass
+      jeder das Projektarchiv über <literal>http://</literal> oder
+      <literal>https://</literal> auschecken darf, Übertragungen
+      jedoch nur über <literal>https://</literal> erlaubt sind, haben
+      Sie ein interessantes Problem. Wenn Ihre Externals-Definitionen
+      die <literal>http://</literal>-Form der Projektarchiv-URLs
+      verwenden, werden Sie nicht im Stande sein, irgend etwas aus den
+      mit diesen Externals erzeugten Arbeitskopien zu übertragen.
+      Wenn Sie andererseits die <literal>https://</literal>-Form der
+      URLs verwenden, kann jemand, der mit <literal>http://</literal>
+      auscheckt, da sein Client <literal>https://</literal> nicht
+      unterstützt, die externen Verweise nicht heranziehen. Beachten
+      Sie ferner, dass beim Umhängen Ihrer Arbeitskopie (mit
+      <command>svn switch</command> und der Option
+      <option>--relocate</option>) die Externals-Definitions
+      <emphasis>nicht</emphasis> automatisch umgehängt werden.</para>
+
+<!--
     <para>Subversion 1.5 takes a huge step in relieving these
       frustrations.  As mentioned earlier, the URLs used in the new
       externals definition format can be relative, and Subversion
       provides syntax magic for specifying multiple flavors of URL
       relativity.</para>
+-->
+   <para>Subversion 1.5 unternimmt einen riesiegen Schritt, um diese
+     Frustrationen zu lindern. Wie bereits früher erwähnt wurde,
+     können die URLs im neuen Externals-Format relativ sein, und
+     Subversion stellt eine besondere Syntax zur Verfügung, um
+     verschiedene Arten relativer URLs darzustellen.</para>

      <variablelist>
        <varlistentry>
          <term><literal>../</literal></term>
+<!--
          <listitem><para>Relative to the URL of the directory on which
            the <literal>svn:externals</literal> property is
            set</para></listitem>
+-->
+        <listitem><para>Relativ zum URL des Verzeichnisses, an dem die
+          Eigenschaft <literal>svn:externals</literal> gesetzt
+          ist</para></listitem>
        </varlistentry>
        <varlistentry>
          <term><literal>^/</literal></term>
+<!--
          <listitem><para>Relative to the root of the repository in
            which the <literal>svn:externals</literal> property is
            versioned</para></listitem>
+-->
+        <listitem><para>Relativ zur Wurzel des Projektarchivs, in dem
+          die  Eigenschaft <literal>svn:externals</literal>
+          versioniert ist</para></listitem>
        </varlistentry>
        <varlistentry>
          <term><literal>//</literal></term>
+<!--
          <listitem><para>Relative to the scheme of the URL of the
            directory on which the <literal>svn:externals</literal>
            property is set</para></listitem>
+-->
+        <listitem><para>Relativ zum Schema des URL des
+          Verzeichnisses, an dem die Eigenschaft
+          <literal>svn:externals</literal> gesetzt
+          ist</para></listitem>
        </varlistentry>
        <varlistentry>
          <term><literal>/</literal></term>
+<!--
          <listitem><para>Relative to the root URL of the server on
            which the <literal>svn:externals</literal> property is
            versioned</para></listitem>
+-->
+        <listitem><para>Relativ zum Wurzel-URL des Servers, auf dem
+          die Eigenschaft <literal>svn:externals</literal> versioniert
+          ist</para></listitem>
        </varlistentry>
      </variablelist>

+<!--
      <para>So, looking a fourth time at our previous externals
        definition example, and making use of the new absolute URL
        syntax in various ways, we might now see:</para>
+-->
+    <para>Wenn wir uns nun ein viertes Mal das vorangegangene Beispiel
+      mit der Externals-Definition ansehen und von der neuen absoluten
+      URL-Syntax auf verschiedene Weise Gebrauch machen, könnten wir
+      nun das sehen:</para>

      <screen>
  $ svn propget svn:externals calc
@@ -5964,6 +6225,7 @@
  //svn.example.com/skin-maker at 21 third-party/skins/toolkit
  </screen>

+<!--
      <para>The support that exists for externals definitions in
        Subversion remains less than ideal, though.  An externals
        definition can point only to directories, not to files.  Also, the
@@ -5980,7 +6242,27 @@
        must run <command>svn commit</command> explicitly on those
        working copies—committing on the primary working copy will
        not recurse into any external ones.</para>
-
+-->
+    <para>Subversions Unterstützung für Externals-Definitionen bleibt
+      aber trotzdem alles andere als ideal. Eine Externals-Definition
+      kann nur auf Verzeiichnisse zeigen, nicht auf Dateien. Auch
+      darf der lokale Unterverzeichnis-Teil keine
+      <literal>..</literal>-Verweise auf Elternverzeichnisse enthalten
+      (etwa <filename>../../skins/myskin</filename>). Die größte
+      Enttäuschung ist vielleicht, dass Arbeitskopien, die mit
+      Unterstützung von Externals-Definitionen erzeugt wurden, nach
+      wie vor getrennt sind von der primären Arbeitskopie (auf deren
+      versionierten Verzeichnissen die Eigenschaft
+      <literal>svn:externals</literal> ursprünglich gesetzt wurde).
+      Und Subversion arbeitet nur auf nicht-disjunkten Arbeitskopien
+      genau. Wenn Sie beispielsweise Änderungen übertragen möchten,
+      die Sie in einer oder mehreren dieser externen Arbeitskopien
+      vorgenommen haben, müssen Sie für diese Arbeitskopien explizit
+      <command>svn commit</command> aufrufen – das Übertragen
+      der primären Arbeitskopie greift nicht auf irgendwelche externen
+      über.</para>
+
+<!--
      <para>We've already mentioned some of the additional shortcomings
        of the old <literal>svn:externals</literal> format and how the
        new Subversion 1.5 format improves upon it.  But be careful when
@@ -5990,7 +6272,19 @@
        continue to recognize and support the original externals
        definition format, older clients will <emphasis>not</emphasis>
        be able to correctly parse the new format.</para>
-
+-->
+    <para>Wir haben bereits einige der Mängel des alten Formats von
+      <literal>svn:externals</literal> und die Verbesserungen durch
+      das neue Format von Subversion 1.5 erwähnt. Seien Sie jedoch
+      vorsichtig, dass Sie bei Verwendung des neuen Formats nicht
+      versehentlich Probleme für andere verursachen, die mit älteren
+      Subversion-Clients auf Ihr Projektarchiv zugreifen wollen.
+      Während Clients von Subversion 1.5 weiterhin das ursprüngliche
+      Format der Externals-Definitionen verstehen und unterstützen,
+      sind ältere Clients <emphasis>nicht</emphasis> in der Lage, das
+      neue Format korrekt zu verarbeiten.</para>
+
+<!--
      <para>Besides the <command>svn checkout</command>, <command>svn
        update</command>, <command>svn switch</command>, and
        <command>svn export</command> commands which actually manage the
@@ -6001,8 +6295,22 @@
        disjoint external subdirectories, and then recurses into those
        subdirectories to display the status of the external items
        themselves.  You can pass the
-      <option>--ignore-externals</option> option to any of these
+      <option>- -ignore-externals</option> option to any of these
        subcommands to disable externals definition processing.</para>
+-->
+    <para>Neben den Befehlen <command>svn checkout</command>,
+      <command>svn update</command>, <command>svn switch</command> und
+      <command>svn export</command>, welche die
+      <firstterm>disjunkten</firstterm> (oder unzusammenhängenden)
+      Unterverzeichnisse mit den ausgecheckten Externals eigentlich
+      verwalten, berücksichtigt auch der Befehl <command>svn
+      status</command> Externals-Definitionen. Er zeigt für die
+      disjunkten externen Unterverzeichnisse einen Zustandscode
+      <literal>X</literal> an und durchläuft dann diese Verzeichnisse,
+      um den Zustand der eigentlichen externen Objekte anzuzeigen. Sie
+      können jedem dieser Unterbefehle die Option
+      <option>--ignore-externals</option> mitgeben, um die Bearbeitung
+      der Externals-Definitionen zu unterbinden.</para>

    </sect1>



More information about the svnbook-dev mailing list