[svnbook commit] r1828 - trunk/src/zh/book

leasun svnbook-dev at red-bean.com
Tue Nov 15 06:59:45 CST 2005


Author: leasun
Date: Tue Nov 15 06:59:43 2005
New Revision: 1828

Modified:
   trunk/src/zh/book/ch07.xml
Log:
* zh/book/ch07.xml: made a little adjusts.


Modified: trunk/src/zh/book/ch07.xml
==============================================================================
--- trunk/src/zh/book/ch07.xml	(original)
+++ trunk/src/zh/book/ch07.xml	Tue Nov 15 06:59:43 2005
@@ -536,7 +536,7 @@
  
         <para><literal>svn:executable</literal>属性用来控制一个版本化的文件自动执行文件权限设定,这个属性没有特定的值—它只是说明一个Subversion可以保留的文件权限的期望值,删除这个属性会恢复操作系统对这些权限的完全控制。</para>
 
-        <para>在多数操作系统,执行一个文件或命令的能力是由执行位管理的,这些位通常是关闭的,必须由用户显示的指定,这意味着你必须改变文件的执行位,然后更新你的工作拷贝,燃火如果你的文件成为更新的一部分,它的执行位会被关闭,所以Subversion提供了<literal>svn:executable</literal>这个属性来保持打开执行位。</para>
+        <para>在多数操作系统,执行一个文件或命令的能力是由执行位管理的,这些位通常是关闭的,必须由用户显式的指定,这意味着你必须改变文件的执行位,然后更新你的工作拷贝,燃火如果你的文件成为更新的一部分,它的执行位会被关闭,所以Subversion提供了<literal>svn:executable</literal>这个属性来保持打开执行位。</para>
 
         <para>这个属性对于没有可执行权限位的文件系统无效,如FAT32和NTFS。
           <footnote>
@@ -564,19 +564,15 @@
       <sect3 id="svn-ch-7-sect-2.3.3">
         <title><literal>svn:ignore</literal></title>
 
-        <para>这个<literal>svn:ignore</literal>属性保存了一个Subversion特定操作忽略的文件模式列表,或许这个是最常用的属性,它可以与<literal>global-ignores</literal>运行配置选项配合使用(见<xref linkend="svn-ch-7-sect-1.3.2" />)来过滤<command>svn status</command>、<command>svn
-          add</command>和<command>svn import</command>命令中操作的未版本化文件。
-          </para>
+        <para>这个<literal>svn:ignore</literal>属性保存了一个Subversion特定操作忽略的文件模式列表,或许这个是最常用的属性,它可以与<literal>global-ignores</literal>运行配置选项配合使用(见<xref linkend="svn-ch-7-sect-1.3.2" />)来过滤<command>svn status</command>、<command>svn add</command>和<command>svn import</command>命令中操作的未版本化文件。</para>
 
-        <para><literal>svn:ignore</literal>背后的基本原理很容易解释,Subversion不会假定工作拷贝中的所有文件或子目录是版本控制的一部分,资源必须被显示的使用<command>svn add</command>或者<command>svn import</command>放到Subversion的管理控制之下,作为结果,经常有许多工作拷贝的资源并没有版本化。
-       </para>
+        <para><literal>svn:ignore</literal>背后的基本原理很容易解释,Subversion不会假定工作拷贝中的所有文件或子目录是版本控制的一部分,资源必须被显示的使用<command>svn add</command>或者<command>svn import</command>放到Subversion的管理控制之下,作为结果,经常有许多工作拷贝的资源并没有版本化。</para>
 
         <para>现在,<command>svn status</command>命令会的显示会包括所有未纳入版本控制且没有用<literal>global-ignores</literal>(或是内置的缺省值)过滤掉的文件和子目录,这样可以帮助用户查看是否忘记了把某些自愿加入到版本控制。</para>
 
         <para>但是Subversion不可能猜测到需要忽略的资源的名字,但是也有一些资源是<emphasis>所有</emphasis>特定版本库的工作拷贝都有忽略的,强制版本库的每个用户来添加这些模式到他们的运行配置区域不仅仅是一个负担,也会与用户取出的其他工作拷贝配置需要存在潜在的冲突。</para>
 
-        <para>解决方案是保存的忽略模式必须对出现在给定目录和这个目录本身的资源是独立的,一个常见的例子就是一个未版本化资源对一个目录来说是唯一的,会出现在那个位置,包括程序编译的输出,或者是—用一个本书的例子—DocBook的文件生成的HTML、PDF或者是PostScript文件。
-       </para>
+        <para>解决方案是保存的忽略模式必须对出现在给定目录和这个目录本身的资源是独立的,一个常见的例子就是一个未版本化资源对一个目录来说是唯一的,会出现在那个位置,包括程序编译的输出,或者是—用一个本书的例子—DocBook的文件生成的HTML、PDF或者是PostScript文件。</para>
 
         <sidebar>
           <title>CVS用户的忽略模式</title>
@@ -614,21 +610,11 @@
 ?      calc/debug_log.3.gz
 </screen>
 
-        <para>在这个例子里,你对<filename>button.c</filename>文件作了一些属性修改,但是你的工作拷贝也有一些未版本化的文件:你从源代码编译的最新的<filename>计算器</filename>程序是<filename>data.c</filename>,一系列调试输出日志文件,现在你知道你的编译系统会编译<filename>calculator</filename>程序。
-        In this example, you have made some property
-          modifications to <filename>button.c</filename>, but in your
-          working copy you also have some unversioned files:
-          the latest <filename>calculator</filename> program
-          that you've compiled from your source code, a source file
-          named <filename>data.c</filename>, and a set of debugging
-          output log files.  Now, you know that your build system
-          always results in the <filename>calculator</filename>
-          program being generated.
+        <para>在这个例子里,你对<filename>button.c</filename>文件作了一些属性修改,但是你的工作拷贝也有一些未版本化的文件:你从源代码编译的最新的<filename>计算器</filename>程序是<filename>data.c</filename>,一系列调试输出日志文件,现在你知道你的编译系统会编译生成<filename>计算器</filename>程序。
           <footnote>
             <para>这不是编译系统的基本功能吗?</para>
           </footnote>
-          就像你知道的,你的测试组件总是会留下这些调试日志,这对所有的工作拷贝都是一样的,不仅仅使你的。你也知道你不会有兴趣在<command>svn status</command>命令中显示这些信息,所以使用<command>svn
-          propedit svn:ignore calc</command>来为<filename>calc</filename>目录增加一些忽略模式,举个例子,你或许会添加如下的值作为<literal>svn:ignore</literal>属性:</para>
+          就像你知道的,你的测试组件总是会留下这些调试日志,这对所有的工作拷贝都是一样的,不仅仅使你的。你也知道你不会有兴趣在<command>svn status</command>命令中显示这些信息,所以使用<command>svn propedit svn:ignore calc</command>来为<filename>calc</filename>目录增加一些忽略模式,举个例子,你或许会添加如下的值作为<literal>svn:ignore</literal>属性:</para>
 
         <programlisting>
 calculator
@@ -644,11 +630,10 @@
 ?      calc/data.c
 </screen>
 
-        <para>现在,所有多余的输出不见了!当然,这些文件还在工作拷贝,Subversion仅仅是不再提醒你它们的存在和未版本化。现在所有讨厌的噪音都已经删除了,你留下了更加感兴趣的项目—如你忘记添加到版本控制的源代码文件。
+        <para>现在,所有多余的输出不见了!当然,这些文件还在工作拷贝中,Subversion仅仅是不再提醒你它们的存在和未版本化。现在所有讨厌的噪音都已经删除了,你留下了更加感兴趣的项目—如你忘记添加到版本控制的源代码文件。
        </para>
 
-        <para>If you want to see the ignored files, you can pass the 
-          <option>--no-ignore</option> option to Subversion:</para>
+        <para>如果想查看被忽略的文件,可以设置Subversion的<option>--no-ignore</option>选项:</para>
 
 <screen>
 $ svn status --no-ignore
@@ -661,9 +646,7 @@
 I      calc/debug_log.3.gz
 </screen>
 
-        <para><command>svn add</command>和<command>svn
-          import</command>也会使用这个忽略模式列表,这两个操作都包括了询问Subversion来开始管理一组文件和目录。比强制用户挑拣目录树中那个文件要纳入版本控制的方式更好,Subversion使用忽略模式来检测那个文件不应该在大的迭代添加和导入操作中进入版本控制系统。
-         </para>
+        <para><command>svn add</command>和<command>svn import</command>也会使用这个忽略模式列表,这两个操作都包括了询问Subversion来开始管理一组文件和目录。比强制用户挑拣目录树中那个文件要纳入版本控制的方式更好,Subversion使用忽略模式来检测那个文件不应该在大的迭代添加和导入操作中进入版本控制系统。</para>
    
       </sect3>
 
@@ -838,7 +821,7 @@
       <sect3 id="svn-ch-7-sect-2.3.6">
         <title><literal>svn:externals</literal></title>
 
-        <para><literal>svn:externals</literal>属性保存了指导Subversion从一个或多个取出的工作拷贝移出目录的指导,关于这个关键字的工多信息,见<xref linkend="svn-ch-7-sect-3"/>。
+        <para><literal>svn:externals</literal>属性保存了指导Subversion从一个或多个取出的工作拷贝移出目录的指示,关于这个关键字的更多信息,见<xref linkend="svn-ch-7-sect-3"/>。
        </para>
 
       </sect3>
@@ -846,7 +829,7 @@
       <sect3 id="svn-ch-7-sect-2.3.7">
         <title><literal>svn:special</literal></title>
 
-        <para><literal>svn:special</literal>是唯一一个不是用户直接设置和修改的<literal>svn:</literal>属性,当<quote>特别的</quote>对象如一个对象链接计划加入到版本库,Subversion会自动设置这个属性。版本库像普通文件一样保存<literal>svn:special</literal>对象,然而,当一个客户端在检出和更新操作时看到这个属性时,就会翻译这个文件的内容,并且将文件转化为特殊类型的对象,在Subversion1.1,只有版本化的符号链接有这个属性附加,但在以后的版本中其他特殊的节点也有可能使用这个属性。</para>
+        <para><literal>svn:special</literal>是唯一一个不是用户直接设置和修改的<literal>svn:</literal>属性,当<quote>特别的</quote>对象如一个对象链接计划加入到版本库,Subversion会自动设置这个属性。版本库像普通文件一样保存<literal>svn:special</literal>对象,然而,当一个客户端在检出和更新操作时看到这个属性时,就会翻译这个文件的内容,并且将文件转化为特殊类型的对象,在Subversion1.1中,只有版本化的符号链接有这个属性附加,但在以后的版本中其他特殊的节点也有可能使用这个属性。</para>
 
         <para>注意:Windows客户端不会有符号链接,因此会忽略含有<literal>svn:special</literal>声明为符号链的文件,在Windows,用户会以一个工作拷贝中的版本化的文件作为结束。
        </para>
@@ -862,8 +845,7 @@
 
       <para>当你使用<command>svn add</command>或是<command>svn import</command>准备加入一个版本控制的文件时,Subversion会运行一个基本探测来检查文件是包括了可读还是不可读的内容,如果Subversion猜测错误,或者是你希望使用<literal>svn:mime-type</literal>属性更精确的设置—或许是<literal>image/png</literal>或者<literal>application/x-shockwave-flash</literal>—你可以一直删除或编辑那个属性。</para>
 
-      <para>Subversion也提供了自动属性特性,允许你创建文件名到属性名称与值影射,这个影射在你的运行配置区域设置,它们会影响添加和导入操作,而且不仅仅会覆盖Subversion所有缺省的MIME类型判断操作,也会设置额外的Subversion或者自定义的属性。举个例子,你会创建一个影射文件说在任何时候你添加了一个JPEG文件—一些符合<literal>*.jpg</literal>的文件—Subversion一定会自动设置它们的<literal>svn:mime-type</literal>属性为<literal>image/jpeg</literal>。或者是任何匹配<literal>*.cpp</literal>的文件,必须把<literal>svn:eol-style</literal>设置为<literal>native</literal>,并且<literal>svn:keywords</literal>设置为<literal>Id</literal>。自动属性支持是Subversion工具箱中属性相关最垂手可得的工具,见<xref linkend="svn-ch-7-sect-1.3.2"/>来查看更多的配置支持。
-     </para>
+      <para>Subversion也提供了自动属性特性,允许你创建文件名到属性名称与值影射,这个影射在你的运行配置区域设置,它们会影响添加和导入操作,而且不仅仅会覆盖Subversion所有缺省的MIME类型判断操作,也会设置额外的Subversion或者自定义的属性。举个例子,你会创建一个影射文件说在任何时候你添加了一个JPEG文件—一些符合<literal>*.jpg</literal>的文件—Subversion一定会自动设置它们的<literal>svn:mime-type</literal>属性为<literal>image/jpeg</literal>。或者是任何匹配<literal>*.cpp</literal>的文件,必须把<literal>svn:eol-style</literal>设置为<literal>native</literal>,并且<literal>svn:keywords</literal>设置为<literal>Id</literal>。自动属性支持是Subversion工具箱中属性相关最垂手可得的工具,见<xref linkend="svn-ch-7-sect-1.3.2"/>来查看更多的配置支持。</para>
 
     </sect2>     
   </sect1>
@@ -888,14 +870,12 @@
       </footnote>
       假定你叫你的软件为Frabnaggilywort,此刻,有必要把你的目录命名为反映项目名称的名字,所以<filename>concept</filename>改名为<filename>frabnaggilywort</filename>。生活还在继续,Frabnaggilywort发布了1.0版本,并且被许多希望改进他们生活的散落用户天天使用。</para>
     
-    <para>这是一个美好的故事,但是他没有在这里结束,作为主办人,你一定想到了另一件事,所以你创建了一个目录叫做<filename>concept</filename>,周期重新开始。实际上,这个循环在几年里开始了多次,每一个使用旧的<filename>concept</filename>î录开始,然后有时在想法成熟之后重新命名,有时你放弃了这个注意而删除了这个目录。或者更加变态一点,或许你把<filename>concept</filename>改成其他名字之后又因为一些原因重新改回<filename>concept</filename>。
+    <para>这是一个美好的故事,但是他没有在这里结束,作为主办人,你一定想到了另一件事,所以你创建了一个目录叫做<filename>concept</filename>,周期重新开始。实际上,这个循环在几年里开始了多次,每一个使用旧的<filename>concept</filename>目录开始,然后有时在想法成熟之后重新命名,有时你放弃了这个注意而删除了这个目录。或者更加变态一点,或许你把<filename>concept</filename>改成其他名字之后又因为一些原因重新改回<filename>concept</filename>。
    </para>
 
-    <para>当这样的情景发生时,指导Subversion工作在重新使用的路径上的尝试就像指导一个芝加哥西郊的乘客驾车到东面的罗斯福路并且左转到主大道。仅仅20分钟,你可以穿过惠顿、格伦埃林何朗伯德的<quote>主大道</quote>,但是他们不是一样的街道,我们的乘客—和我们的Subversion—需要更加详细的细节来做正确的事情。
-   </para>
+    <para>当这样的情景发生时,指导Subversion工作在重新使用的路径上的尝试就像指导一个芝加哥西郊的乘客驾车到东面的罗斯福路并且左转到主大道。仅仅20分钟,你可以穿过惠顿、格伦埃林何朗伯德的<quote>主大道</quote>,但是他们不是一样的街道,我们的乘客—和我们的Subversion—需要更加详细的细节来做正确的事情。</para>
 
-    <para>在1.1版本,Subversion提供了一种方法来说明你所指是哪一个街道,叫做<firstterm>peg revision</firstterm>,这是一个提供给Subversion的一个区别一个独立历史线路的单独目的修订版本,因为一个版本化的文件会在任何时间占用某个路径—路径和peg
-      revision的合并是可以指定一个历史的特定线路。Peg revisions可以在Subversion命令行客户端中用<firstterm>at语法</firstterm>指定,之所以叫做这个语法因为会在关联的修订版本的路径后面追加一个<quote>at符号</quote>(<literal>@</literal>)。
+    <para>在1.1版本,Subversion提供了一种方法来说明你所指是哪一个街道,叫做<firstterm>peg revision</firstterm>,这是一个提供给Subversion的一个区别一个独立历史线路的单独目的修订版本,因为一个版本化的文件会在任何时间占用某个路径—路径和peg revision的合并是可以指定一个历史的特定线路。Peg revisions可以在Subversion命令行客户端中用<firstterm>at语法</firstterm>指定,之所以叫做这个语法因为会在关联的修订版本的路径后面追加一个<quote>at符号</quote>(<literal>@</literal>)。
       </para>
 
     <para>但是我们在本书多次提到的<option>--revision (-r)</option>到底是什么?修订版本(或者是修订版本集)叫做<firstterm>实施的修订版本</firstterm>(或者叫做<firstterm>实施的修订版本范围</firstterm>),一旦一个特定历史线路通过一个路径和peg revision指定,Subversion会使用实施的修订版本执行要求的操作。为了影射这个岛我们类似的芝加哥道路,如果我们被告知到惠顿主大道606号, 
@@ -1000,8 +980,7 @@
 third-party/skins/toolkit -r21 http://svn.red-bean.com/repos/skin-maker
 </screen>
 
-    <para><literal>svn:externals</literal>的方便之处是这个属性设置到版本化的路径后,任何人可以从那个目录取出一个工作拷贝,同样得到外部定义的好处。换句话说,一旦一个人努力来定义这些嵌套的工作拷贝检出,其他任何人不需要再麻烦了—Subversion会在原先的工作拷贝检出之后,也会检出外部工作拷贝。
-   </para>
+    <para><literal>svn:externals</literal>的方便之处是这个属性设置到版本化的路径后,任何人可以从那个目录取出一个工作拷贝,同样得到外部定义的好处。换句话说,一旦一个人努力来定义这些嵌套的工作拷贝检出,其他任何人不需要再麻烦了—Subversion会在原先的工作拷贝检出之后,也会检出外部工作拷贝。</para>
 
     <para>注意前一个外部定义实例,当有人取出了一个<filename>calc</filename>目录的工作拷贝,Subversion会继续来取出外部定义的项目。</para>
 
@@ -1026,17 +1005,13 @@
 …
 </screen>
 
-    <para>如果你希望修改外部定义,你可以使用普通的属性修改子命令,当你提交一个<literal>svn:externals</literal>属性修改后,当你运行<command>svn update</command>时,Subversion会根据修改的外部定义同步检出的项目,同样的事情也会发生在别人更新他们的工作拷贝接受你的外部定义修改时。
-   </para>
+    <para>如果你希望修改外部定义,你可以使用普通的属性修改子命令,当你提交一个<literal>svn:externals</literal>属性修改后,当你运行<command>svn update</command>时,Subversion会根据修改的外部定义同步检出的项目,同样的事情也会发生在别人更新他们的工作拷贝接受你的外部定义修改时。</para>
 
-    <para><command>svn status</command>命令也认识外部定义,会为外部定义的脱节子目录显示<literal>X</literal>状态码,然后迭代这些子目录来显示外部项目的子目录状态信息。
-    </para>
+    <para><command>svn status</command>命令也认识外部定义,会为外部定义的脱节子目录显示<literal>X</literal>状态码,然后迭代这些子目录来显示外部项目的子目录状态信息。</para>
 
-    <para>Subversion目前对外部定义的支持可能会引起误导,首先,一个外部定义只可以指向目录,而不是文件。第二,外部定义不可以指向相对路径(如<filename>../../skins/myskin</filename>)。第三,同过外部定义创建的工作拷贝与主工作拷贝没有连接,所以举个例子,如果你希望提交一个或多个外部定义的拷贝,你必须在这些工作拷贝显示的运行<command>svn
-      commit</command>—对主工作拷贝的提交不会迭代到外部定义的部分。</para>
+    <para>Subversion目前对外部定义的支持可能会引起误导,首先,一个外部定义只可以指向目录,而不是文件。第二,外部定义不可以指向相对路径(如<filename>../../skins/myskin</filename>)。第三,同过外部定义创建的工作拷贝与主工作拷贝没有连接,所以举个例子,如果你希望提交一个或多个外部定义的拷贝,你必须在这些工作拷贝显示的运行<command>svn commit</command>—对主工作拷贝的提交不会迭代到外部定义的部分。</para>
 
-    <para>另外,因为定义本身使用绝对路径,移动和拷贝路径他们附着的路径不会影响他们作为外部的检出(尽管相对的本地目标子目录会这样,当然,根据重命名的目录)。这看起来有些迷惑—甚至让人沮丧—在特定情形。举个例子,如果你在<filename>/trunk</filename>开发线对一个目录使用外部定义,指向同一条线上的其他区域,然后使用<command>svn
-      copy</command>把分支开发线拷贝到<filename>/branches/my-branch</filename>这个新位置,这个项目新分支的外部定义仍然指向<filename>/trunk</filename>版本化资源。另外,需要意识到如果你需要一个重新规划你的工作拷贝的父目录(使用<command>svn switch --relocate</command>),外部定义<emphasis>不</emphasis>会重新选择父目录。</para>
+    <para>另外,因为定义本身使用绝对路径,移动和拷贝路径他们附着的路径不会影响他们作为外部的检出(尽管相对的本地目标子目录会这样,当然,根据重命名的目录)。这看起来有些迷惑—甚至让人沮丧—在特定情形。举个例子,如果你在<filename>/trunk</filename>开发线对一个目录使用外部定义,指向同一条线上的其他区域,然后使用<command>svn copy</command>把分支开发线拷贝到<filename>/branches/my-branch</filename>这个新位置,这个项目新分支的外部定义仍然指向<filename>/trunk</filename>版本化资源。另外,需要意识到如果你需要一个重新规划你的工作拷贝的父目录(使用<command>svn switch --relocate</command>),外部定义<emphasis>不</emphasis>会重新选择父目录。</para>
 
   </sect1>
 
@@ -1046,30 +1021,17 @@
   <sect1 id="svn-ch-7-sect-4">
     <title>卖主分支</title>
 
-    <para>当开发软件时有这样一个情况,你版本控制的数据可能关联于或者是依赖于其他人的数据,通常来讲,你的项目的需要会要求你自己的项目对外部实体提供的数据保持尽可能最新的版本,同时不会牺牲你自己工程的稳定性,这个情景使我们一直精疲力尽—无论何处信息是被一组人生成了会对是通过另一个小组生成的有直接效用。
-    As is especially the case when developing software, the data
-      that you maintain under version control is often closely related
-      to, or perhaps dependent upon, someone else's data.  Generally,
-      the needs of your project will dictate that you stay as
-      up-to-date as possible with the data provided by that external
-      entity without sacrificing the stability of your own project.
-      This scenario plays itself out all the time—anywhere that
-      the information generated by one group of people has a direct
-      effect on that which is generated by another group.</para>
+    <para>当开发软件时有这样一个情况,你版本控制的数据可能关联于或者是依赖于其他人的数据,通常来讲,你的项目的需要会要求你自己的项目对外部实体提供的数据保持尽可能最新的版本,同时不会牺牲稳定性,这中情况总是会出现—只要某个小组的信息对另一个小组的信息有直接的影响。</para>
  
-    <para>举个例子,软件开发者会工作在一个使用第三方库的应用,Subversion恰好是和Apache的Portable
-      Runtime library(见<xref linkend="svn-ch-8-sect-2.1" />)有这样一个关系。Subversion源代码依赖于APR库来实现可携带型需求。在Subversion的早期开发阶段,项目紧密地追踪APR的API修改,经常在库代码的<quote>流血的边缘</quote>粘住,现在APR和Subversion都已经成熟了,Subversion只尝试同步APR的经过良好测试的,稳定的API库。</para>
+    <para>举个例子,软件开发者会工作在一个使用第三方库的应用,Subversion恰好是和Apache的Portable Runtime library(见<xref linkend="svn-ch-8-sect-2.1" />)有这样一个关系。Subversion源代码依赖于APR库来实现可携带型需求。在Subversion的早期开发阶段,项目紧密地追踪APR的API修改,经常在库代码的<quote>流血的边缘</quote>粘住,现在APR和Subversion都已经成熟了,Subversion只尝试同步APR的经过良好测试的,稳定的API库。</para>
 
-    <para>现在,如果你的项目依赖于其他人的信息,有许多方法可以用来尝试同步你的信息,最痛苦的,你可以为项目所有的贡献者发布口头或书写的指导,告诉他们确信他们拥有你们的项目需要的特定版本的第三方信息。如果第三方信息是用Subversion版本库维护,你可以使用Subversion的外部定义来有效的<quote>强制</quote>特定的版本的信息在你的工作拷贝的的位置(见<xref linkend="svn-ch-7-sect-3" />)。
-   </para>
+    <para>现在,如果你的项目依赖于其他人的信息,有许多方法可以用来尝试同步你的信息,最痛苦的,你可以为项目所有的贡献者发布口头或书写的指导,告诉他们确信他们拥有你们的项目需要的特定版本的第三方信息。如果第三方信息是用Subversion版本库维护,你可以使用Subversion的外部定义来有效的<quote>强制</quote>特定的版本的信息在你的工作拷贝的的位置(见<xref linkend="svn-ch-7-sect-3" />)。</para>
 
-    <para>但是有时候,你希望在你自己的版本控制系统维护一个针对第三方数据的自定义修改,回到软件开发的例子,程序员为了他们自己的目的会需要修改第三方库,这些修改会包括新的功能和bug修正,在成为第三方工具官方发布之前,只是内部维护。或者这些修改永远不会传给库的维护者,只是作为满足软件开发需要的单独的自定义修改存在。
-   </para>
+    <para>但是有时候,你希望在你自己的版本控制系统维护一个针对第三方数据的自定义修改,回到软件开发的例子,程序员为了他们自己的目的会需要修改第三方库,这些修改会包括新的功能和bug修正,在成为第三方工具官方发布之前,只是内部维护。或者这些修改永远不会传给库的维护者,只是作为满足软件开发需要的单独的自定义修改存在。</para>
 
     <para>现在你会面对一个有趣的情形,你的项目可以用某种脱节的样式保持它关于第三方数据自己的修改,如使用补丁文件或者是完全的可选版本的文件和目录。但是这很快会成为维护的头痛的事情,需要一种机制来应用你对第三方数据的自定义修改,并且迫使在第三方数据的后续版本重建这些修改。</para>
 
-    <para>这个问题的解决方案是使用<firstterm>卖主分支</firstterm>,一个卖主分支是一个目录树保存了第三方实体或卖主的信息,每一个卖主数据的版本吸收到你的项目叫做<firstterm>卖主drop</firstterm>。
-   </para> 
+    <para>这个问题的解决方案是使用<firstterm>卖主分支</firstterm>,一个卖主分支是一个目录树保存了第三方实体或卖主的信息,每一个卖主数据的版本吸收到你的项目叫做<firstterm>卖主drop</firstterm>。</para>
 
     <para>卖主分支提供了两个关键的益处,第一,通过在我们的版本控制系统保存现在支持的卖主drop,你项目的成员不需要指导他们是否有了正确版本的卖主数据,他们只需要作为不同工作拷贝更新的一部份简单的接受正确的版本就可以了。第二,因为数据存在于你自己的Subversion版本库,你可以在恰当的位置保存你的自定义修改—你不需要一个自动的(或者是更坏,手工的)方法来交换你的自定义行为。</para>
 
@@ -1077,11 +1039,9 @@
     <sect2 id="svn-ch-7-sect-4.1">
       <title>常规的卖主分支管理过程</title>
 
-      <para>管理卖主分支通常会像这个样子,你创建一个顶级的目录(如<filename>/vendor</filename>)来保存卖主分支,然后你导入第三方的代码到你的子目录。然后你将拷贝这个子目录到主要的开发分支(例如<filename>/trunk</filename>)的适当位置。你一直在你的主要开发分支上做本地修改,当你的追踪的代码有了新版本,你会把带到卖主分支并且把它合并到你的<filename>/trunk</filename>,解决任何你的本地修改和他们的修改的冲突。
-     </para>
+      <para>管理卖主分支通常会像这个样子,你创建一个顶级的目录(如<filename>/vendor</filename>)来保存卖主分支,然后你导入第三方的代码到你的子目录。然后你将拷贝这个子目录到主要的开发分支(例如<filename>/trunk</filename>)的适当位置。你一直在你的主要开发分支上做本地修改,当你的追踪的代码有了新版本,你会把带到卖主分支并且把它合并到你的<filename>/trunk</filename>,解决任何你的本地修改和他们的修改的冲突。</para>
 
-      <para>也许一个例子有助于我们阐述这个算法,我们会使用这样一个场景,我们的开发团队正在开发一个计算器程序,与一个第三方的复杂数字运算库libcomplex关联。我们从卖主分支的初始创建开始,并且导入卖主drop,我们会把每株分支目录叫做<filename>libcomplex</filename>,我们的代码drop会进入到卖主分支的子目录<filename>current</filename>,并且因为<command>svn
-        import</command>创建所有的需要的中间父目录,我们可以使用一个命令完成这一步。</para>
+      <para>也许一个例子有助于我们阐述这个算法,我们会使用这样一个场景,我们的开发团队正在开发一个计算器程序,与一个第三方的复杂数字运算库libcomplex关联。我们从卖主分支的初始创建开始,并且导入卖主drop,我们会把每株分支目录叫做<filename>libcomplex</filename>,我们的代码drop会进入到卖主分支的子目录<filename>current</filename>,并且因为<command>svn import</command>创建所有的需要的中间父目录,我们可以使用一个命令完成这一步。</para>
 
       <screen>
 $ svn import /path/to/libcomplex-1.0 \
@@ -1110,15 +1070,11 @@
         </footnote>
       </para>
 
-      <para>几周之后,libcomplex得开发者发布了一个新的版本—版本1.1—包括了我们很需要的一些特性和功能。我们很希望升级到这个版本,但不希望失去在当前版本所作的修改。我们本质上会希望把我们当前基线版本是的libcomplex1.0的拷贝替换为libcomplex
-        1.1,然后把前面自定义的修改应用到新的版本。但是实际上我们通过一个相反的方向解决这个问题,应用libcomplex从版本1.0到1.1的修改到我们修改的拷贝。
-       </para>
+      <para>几周之后,libcomplex得开发者发布了一个新的版本—版本1.1—包括了我们很需要的一些特性和功能。我们很希望升级到这个版本,但不希望失去在当前版本所作的修改。我们本质上会希望把我们当前基线版本是的libcomplex1.0的拷贝替换为libcomplex 1.1,然后把前面自定义的修改应用到新的版本。但是实际上我们通过一个相反的方向解决这个问题,应用libcomplex从版本1.0到1.1的修改到我们修改的拷贝。</para>
       
       <para>为了执行这个升级,我们取出一个我们卖主分支的拷贝,替换<filename>current</filename>目录为新的libcomplex 1.1的代码,我们只是拷贝新文件到存在的文件上,或者是解压缩libcomplex 1.1的打包文件到我们存在的文件和目录。此时的目标是让我们的<filename>current</filename>目录只保留libcomplex 1.1的代码,并且保证所有的代码在版本控制之下,哦,我们希望在最小的版本控制历史扰动下完成这件事。</para>
 
-      <para>完成了这个从1.0到1.1的代码替换,<command>svn
-        status</command>会显示文件的本地修改,或许也包括了一些未版本化或者丢失的文件,如果我们做了无我们应该做的事情,未版本化的文件应该都是libcomplex在1.1新引入的文件—我们运行<command>svn add</command>来将它们加入到版本控制。丢失的文件是存在于1.1但是不是在1.1,在这些路径我们运行<command>svn delete</command>。最终一旦我们的<filename>current</filename>工作拷贝只是包括了libcomplex1.1的代码,我们可以提交这些改变目录和文件的修改。
-       </para>
+      <para>完成了这个从1.0到1.1的代码替换,<command>svn status</command>会显示文件的本地修改,或许也包括了一些未版本化或者丢失的文件,如果我们做了无我们应该做的事情,未版本化的文件应该都是libcomplex在1.1新引入的文件—我们运行<command>svn add</command>来将它们加入到版本控制。丢失的文件是存在于1.1但是不是在1.1,在这些路径我们运行<command>svn delete</command>。最终一旦我们的<filename>current</filename>工作拷贝只是包括了libcomplex1.1的代码,我们可以提交这些改变目录和文件的修改。</para>
 
       <para>我们的<filename>current</filename>分支现在保存了新的卖主drop,我们为这个新的版本创建一个新的标签(就像我们为1.0版本drop所作的),然后合并这从个标签前一个版本的区别到主要开发分支。</para>
 
@@ -1148,26 +1104,22 @@
       <title><command>svn_load_dirs.pl</command></title>
 
       <para>不仅仅包含一些删除、添加和移动的卖主drops使得升级第三方数据后续版本的过程变得复杂,所以Subversion提供了一个<command>svn_load_dirs.pl</command>脚本来辅助这个过程,这个脚本自动进行我们前面提到的常规卖主分支管理过程的导入步骤,从而使得错误最小化。你仍要负责使用合并命令合并第三方的新
-版本数据合并到主要开发分支,但是<command>svn_load_dirs.pl</command>帮助你快速到达这一步骤。
-</para>
+版本数据合并到主要开发分支,但是<command>svn_load_dirs.pl</command>帮助你快速到达这一步骤。</para>
 
       <para>一句话,<command>svn_load_dirs.pl</command>是一个增强的<command>svn import</command>,具备了许多重要的特性:</para>
 
       <itemizedlist>
         <listitem>
-          <para>它可以在任何有一个存在的版本库目录与一个外部的目录匹配时执行,会执行所有必要的添加和删除并且可以选则执行移动。
-         </para>
+          <para>它可以在任何有一个存在的版本库目录与一个外部的目录匹配时执行,会执行所有必要的添加和删除并且可以选则执行移动。</para>
         </listitem>
         <listitem>
-          <para>它可以用来操作一系列复杂的操作,如那些需要一个中间媒介的提交—如在操作之前重命名一个文件或者目录两次。
-         </para>
+          <para>它可以用来操作一系列复杂的操作,如那些需要一个中间媒介的提交—如在操作之前重命名一个文件或者目录两次。</para>
         </listitem>
         <listitem>
           <para>它可以随意的为新导入目录打上标签。</para>
         </listitem>
         <listitem>
-          <para>它可以随意为符合正则表达式的文件和目录添加任意的属性。
-          </para>
+          <para>它可以随意为符合正则表达式的文件和目录添加任意的属性。</para>
         </listitem>
       </itemizedlist>
 
@@ -1180,8 +1132,7 @@
 …
 </screen>
 
-      <para>你可以说明你会希望<command>svn_load_dirs.pl</command>同时打上标签,这使用<option>-t</option>命令行选项,需要制定一个标签名。这个标签是第一个参数的一个相对URL。
-      </para>
+      <para>你可以说明你会希望<command>svn_load_dirs.pl</command>同时打上标签,这使用<option>-t</option>命令行选项,需要制定一个标签名。这个标签是第一个参数的一个相对URL。</para>
 
       <screen>
 $ svn_load_dirs.pl -t libcomplex-1.1                              \
@@ -1191,8 +1142,7 @@
 …
 </screen>
 
-      <para>当你运行<command>svn_load_dirs.pl</command>,它会检验你的存在的<quote>current</quote>卖主drop,并且与提议的新卖主drop比较,在这个琐碎的例子里,没有文件只出现在一个版本里,脚本执行新的导入而不会发生意外。然而如果版本之间有了文件布局的区别,<command>svn_load_dirs.pl</command>会询问你如何解决这个区别,例如你会有机会告诉脚本libcomplex版本1.0的<filename>math.c</filename>文件在1.1已经重命名为<filename>arithmetic.c</filename>,任何没有解释为移动的差异都会被看作是常规的添加和删除。
-     </para>
+      <para>当你运行<command>svn_load_dirs.pl</command>,它会检验你的存在的<quote>current</quote>卖主drop,并且与提议的新卖主drop比较,在这个琐碎的例子里,没有文件只出现在一个版本里,脚本执行新的导入而不会发生意外。然而如果版本之间有了文件布局的区别,<command>svn_load_dirs.pl</command>会询问你如何解决这个区别,例如你会有机会告诉脚本libcomplex版本1.0的<filename>math.c</filename>文件在1.1已经重命名为<filename>arithmetic.c</filename>,任何没有解释为移动的差异都会被看作是常规的添加和删除。</para>
 
       <para>这个脚本也接受单独配置文件用来为<emphasis>添加到</emphasis>版本库的文件和目录设置匹配正则表达式的属性。配置文件通过<command>svn_load_dirs.pl</command>的<option>-p</option>命令行选项指定,这个配置文件的每一行都是一个空白分割的两列或者四列值:一个Perl样式的正则表达式来匹配添加的路径、一个控制关键字(<literal>break</literal>或者是<literal>cont</literal>)和可选的属性名和值。</para>
 
@@ -1204,8 +1154,7 @@
 .*                  break   svn:eol-style   native
 </screen>
 
-      <para>对每一个添加的路径,会按照顺序为匹配正则表达式的文件配置属性,除非控制标志是<literal>break</literal>(意味着不需要更多的路径匹配应用到这个路径)。如果控制说明是<literal>cont</literal>—<literal>continue</literal>的缩写—然后匹配工作会继续到配置文件的下一行。
-     </para>
+      <para>对每一个添加的路径,会按照顺序为匹配正则表达式的文件配置属性,除非控制标志是<literal>break</literal>(意味着不需要更多的路径匹配应用到这个路径)。如果控制说明是<literal>cont</literal>—<literal>continue</literal>的缩写—然后匹配工作会继续到配置文件的下一行。</para>
 
       <para>任何正则表达式,属性名或者属性值的空格必须使用单引号或者双银行环绕,你可以使用反斜杠(<literal>\</literal>)换码符来回避引号,反斜杠只会在解析配置文件时回避引号,所以不要保护对正则表达式不需要的其它字符。</para>
 
@@ -1221,13 +1170,11 @@
     <para><firstterm>本地化</firstterm>是让程序按照地区特定方式运行的行为,如果一个程序的格式、数字或者是日期是你的方式,或者是打印的信息(或者是接受的输入)是你本地的语言,这个程序被叫做已经<firstterm>本地化了</firstterm>,这部分描述了针对本地化的Subversion的步骤。</para>
 
     <sect2 id="svn-ch7-sect-5.1">
-      <title>理解位置</title>
+      <title>理解“地区”</title>
 
-      <para>许多现代操作系统都有一个<quote>当前位置</quote>的概念—也就是本地化习惯服务的国家和地区。这些习惯—通常是被一些运行配置机制选择—影响程序展现数据的方式,也有接受用户输入的方式。
-     </para>
+      <para>许多现代操作系统都有一个<quote>当前地区</quote>的概念—也就是本地化习惯服务的国家和地区。这些习惯—通常是被一些运行配置机制选择—影响程序展现数据的方式,也有接受用户输入的方式。</para>
 
-      <para>在类Unix的系统,你可以运行<command>locale</command>命令来检查本地关联的运行配置的选项值:
-      </para>
+      <para>在类Unix的系统,你可以运行<command>locale</command>命令来检查本地关联的运行配置的选项值:</para>
 
       <screen>
 $ locale
@@ -1241,19 +1188,16 @@
 LC_ALL="C"
 </screen>
 
-      <para>输出是一个本地相关的环境变量和它们的值,在这个例子里,所有的变量设置为缺省的<literal>C</literal>位置,但是用户可以设置这些变量为特定的国家/语言代码组合。举个例子,如果有人设置<literal>LC_TIME</literal>变量为<literal>fr_CA</literal>,然后程序会知道使用讲法语的加拿大期望的格式来显示时间和日期信息。如果一个人会设置<literal>LC_MESSAGES</literal>变量为<literal>zh_TW</literal>,程序会知道使用繁体中文显示可读信息。如果设置<literal>LC_ALL</literal>的效果同分别设置所有的位置变量为同一个值有相同的效果。<literal>LANG</literal>用来作为没有设置位置变量的缺省值,为了查看Unix系统所有的位置列表,运行<command>locale
-        -a</command>命令。</para>
+      <para>输出是一个本地相关的环境变量和它们的值,在这个例子里,所有的变量设置为缺省的<literal>C</literal>地区,但是用户可以设置这些变量为特定的国家/语言代码组合。举个例子,如果有人设置<literal>LC_TIME</literal>变量为<literal>fr_CA</literal>,然后程序会知道使用讲法语的加拿大期望的格式来显示时间和日期信息。如果一个人会设置<literal>LC_MESSAGES</literal>变量为<literal>zh_TW</literal>,程序会知道使用繁体中文显示可读信息。如果设置<literal>LC_ALL</literal>的效果同分别设置所有的位置变量为同一个值有相同的效果。<literal>LANG</literal>用来作为没有设置地区变量的缺省值,为了查看Unix系统所有的地区列表,运行<command>locale -a</command>命令。</para>
 
-      <para>在Windows,位置配置是通过<quote>地区和语言选项</quote>控制面板管理的,可以从已存在的位置查看选择,甚至可以自定义(会是个很讨厌的复杂事情)许多显示格式习惯。
-     </para>
+      <para>在Windows,地区配置是通过<quote>地区和语言选项</quote>控制面板管理的,可以从已存在的地区查看选择,甚至可以自定义(会是个很讨厌的复杂事情)许多显示格式习惯。</para>
 
     </sect2>
 
     <sect2 id="svn-ch7-sect-5.2">
-      <title>Subversion对位置的使用</title>
+      <title>Subversion对地区的支持</title>
 
-      <para>Subversion客户端,<command>svn</command>通过两种方式配备当前的位置配置。首先,它会注意<literal>LC_MESSAGES</literal>的值,然后尝试使用特定的语言打印所有的信息,例如:
-     </para>
+      <para>Subversion客户端,<command>svn</command>通过两种方式支持当前的地区配置。首先,它会注意<literal>LC_MESSAGES</literal>的值,然后尝试使用特定的语言打印所有的信息,例如:</para>
 
       <screen>
 $ export LC_MESSAGES=de_DE
@@ -1263,31 +1207,27 @@
 …
 </screen>
 
-      <para>这个行为在Unix和Windows上同样工作,注意,尽管有时你的操作系统支持某个位置,Subversion客户端可能不能讲特定的语言。为了制作本地化信息,志愿者可以提供各种语言的翻译。翻译使用GNU gettext包编写,导致翻译模块使用<filename>.mo</filename>作为后缀名。举个例子,德国翻译文件为<filename>de.mo</filename>。翻译文件安装到你的系统的某个位置,在Unix它们会在<filename>/usr/share/locale/</filename>,而在Windows它们通常会在Subversion安装的<filename>\share\locale\</filename>目录。一旦安装,一个命名在程序后面的模块会为此提供翻译。举个例子,<filename>de.mo</filename>会最终安装到<filename>/usr/share/locale/de/LC_MESSAGES/subversion.mo</filename>,通过查看安装的<filename>.mo</filename>文件,我们可以看到Subversion可以说的语言。
-     </para>
+      <para>这个行为在Unix和Windows上同样工作,注意,尽管有时你的操作系统支持某个地区,Subversion客户端可能不能讲特定的语言。为了制作本地化信息,志愿者可以提供各种语言的翻译。翻译使用GNU gettext包编写,相关的翻译模块使用<filename>.mo</filename>作为后缀名。举个例子,德国翻译文件为<filename>de.mo</filename>。翻译文件安装到你的系统的某个位置,在Unix它们会在<filename>/usr/share/locale/</filename>,而在Windows它们通常会在Subversion安装的<filename>\share\locale\</filename>目录。一旦安装,一个命名在程序后面的模块会为此提供翻译。举个例子,<filename>de.mo</filename>会最终安装到<filename>/usr/share/locale/de/LC_MESSAGES/subversion.mo</filename>,通过查看安装的<filename>.mo</filename>文件,我们可以看到Subversion支持的语言。</para>
 
-      <para>第二种配备位置的方式包括<command>svn</command>怎样解释你的输入,版本库使用UTF-8保存了所有的路径,文件名和日志信息。在这种情况下,版本库是<firstterm>国际化的</firstterm>—也就是版本库准备接受任何人类的语言。这意味着,无论如何Subversion客户端要负责发送UTF-8的文件名和日志信息到版本库,为此,必须将数据从本地位置转化为UTF-8。
-      </para>
+      <para>第二种支持地区设置的方式包括<command>svn</command>怎样解释你的输入,版本库使用UTF-8保存了所有的路径,文件名和日志信息。在这种情况下,版本库是<firstterm>国际化的</firstterm>—也就是版本库准备接受任何人类的语言。这意味着,无论如何Subversion客户端要负责发送UTF-8的文件名和日志信息到版本库,为此,必须将数据从本地位置转化为UTF-8。</para>
 
-      <para>举个例子,你创建了一个文件叫做<filename>caffè.txt</filename>,然后提交了这个文件,你写的日志信息是<quote>Adesso il caffè è più forte</quote>,文件名和日志信息都包含非ASCII字符,但是因为你的位置设置为<literal>it_IT</literal>,Subversion知道把它们作为意大利语解释,在发送到版本库之前,它用一个意大利字符集转化数据为UTF-8。
-     </para>
+      <para>举个例子,你创建了一个文件叫做<filename>caffè.txt</filename>,然后提交了这个文件,你写的日志信息是<quote>Adesso il caffè è più forte</quote>,文件名和日志信息都包含非ASCII字符,但是因为你的位置设置为<literal>it_IT</literal>,Subversion知道把它们作为意大利语解释,在发送到版本库之前,它用一个意大利字符集转化数据为UTF-8。</para>
 
       <para>注意当版本库要求UTF-8文件名和日志信息时,它<emphasis>不会</emphasis>注意到文件的内容,Subversion会把文件内容看作波umingde字节串,没有任何客户端和服务器会尝试理解或是编码这些内容。</para>
 
       <sidebar>
         <title>字符集转换错误</title>
 
-        <para>当使用Subversion,你或许会碰到一个字符集转化关联的错误:
-        </para>
+        <para>当使用Subversion,你或许会碰到一个字符集转化关联的错误:</para>
 
         <screen>
 svn: Can't recode string.
 </screen>
     
-        <para>这个信息是神秘的,但是通常会发生在Subversion客户端从版本库接收到一个UTF-8串,但是字符不能转化为当前的位置,举个例子,如果你的位置是<literal>en_US</literal>,但是一个写作者使用日本文件名提交,你会在<command>svn
+        <para>这个信息是神秘的,但是通常会发生在Subversion客户端从版本库接收到一个UTF-8串,但是字符不能转化为当前的地区文字,举个例子,如果你的地区设置是<literal>en_US</literal>,但是一个写作者使用日本文件名提交,你会在<command>svn
           update</command>接受文件时会看到这个错误。</para>
 
-        <para>解决方案或者是设置你的位置为<emphasis>可以</emphasis>表示即将到来的UTF-8数据,或者是修改版本库的文件名或信息。(不要忘记和你的合作者拍拍手—项目必须首先决定通用的语言,这样所有的参与者会使用相同的位置。)</para>
+        <para>解决方案或者是设置你的地区为<emphasis>可以</emphasis>表示即将到来的UTF-8数据,或者是修改版本库的文件名或信息。(不要忘记和你的合作者拍拍手—项目必须首先决定通用的语言,这样所有的参与者会使用相同的地区设置。)</para>
       </sidebar>
 
     </sect2>
@@ -1300,16 +1240,14 @@
   <sect1 id="svn-ch-7-sect-6">
     <title>Subversion版本库URL</title>
 
-    <para>正如我们在整个书里描述的,Subversion使用URL来识别Subversion版本库中的版本化的资源,在大多数情况,这些URL使用标准的语法,允许服务器名称和端口作为URL的一部分:
-   </para>
+    <para>正如我们在整个书里描述的,Subversion使用URL来识别Subversion版本库中的版本化的资源,在大多数情况,这些URL使用标准的语法,允许服务器名称和端口作为URL的一部分:</para>
 
     <screen>
 $ svn checkout http://svn.example.com:9834/repos
 …
 </screen>
 
-    <para>但是Subversion处理URL还是有一些细微的差别需要注意,例如,使用<literal>file:</literal>访问方法的URL(用来访问本地版本库)必须与习惯一直,可以包括一个<literal>localhost</literal>服务器名或者没有服务器名:
-   </para>
+    <para>但是Subversion处理URL还是有一些细微的差别需要注意,例如,使用<literal>file:</literal>访问方法的URL(用来访问本地版本库)必须与习惯一直,可以包括一个<literal>localhost</literal>服务器名或者没有服务器名:</para>
  
     <screen>
 $ svn checkout file:///path/to/repos
@@ -1318,8 +1256,7 @@
 …
 </screen>
 
-    <para>同样在Windows平台下使用<literal>file:</literal>模式时需要使用一个非正式的<quote>标准</quote>语法来访问本机但不在同一个磁盘的版本库。下b的任意一个URL路径语法都可以工作,其中的<literal>X</literal>表示版本库所在的磁盘:
-   </para>
+    <para>同样在Windows平台下使用<literal>file:</literal>模式时需要使用一个非正式的<quote>标准</quote>语法来访问本机但不在同一个磁盘的版本库。下面的任意一个URL路径语法都可以工作,其中的<literal>X</literal>表示版本库所在的磁盘:</para>
 
     <screen>
 C:\> svn checkout file:///X:/path/to/repos
@@ -1328,10 +1265,9 @@
 …
 </screen>
  
-    <para>在第二个语法,你需要引号整个URL,这样竖线字符才不会被解释为管道。当然,注意URL使用普通的斜线而不是Windows本地(不是URL)的反斜线。
-   </para>
+    <para>在第二个语法,你需要使用引号包含整个URL,这样竖线字符才不会被解释为管道。当然,注意URL使用普通的斜线而不是Windows本地(不是URL)的反斜线。</para>
     
-    <para>最后,必须注意Subversion的客户端会根据需要自动编码URL,就像web浏览器作的,举个例子,如果一个URL包括了空格或是一个高ASCII的字符:
+    <para>最后,必须注意Subversion的客户端会根据需要自动编码URL,这一点和一般的web浏览器一样,举个例子,如果一个URL包括了空格或是一个高ASCII的字符:
     Finally, it should be noted that the Subversion client will
       automatically encode URLs as necessary, just like a web browser
       does.  For example, if a URL contains a space or upper-ASCII
@@ -1347,7 +1283,7 @@
 $ svn checkout http://host/path%20with%20space/project/espa%C3%B1a
 </screen>
 
-    <para>如果URL包含空格,一定使用引号标记,这样你的脚本才会把它做一个单独的<command>svn</command>参数。
+    <para>如果URL包含空格,一定要使用引号,这样你的脚本才会把它做一个单独的<command>svn</command>参数。
     </para>
 
   </sect1>



More information about the svnbook-dev mailing list