From 7e531f696ad7e49851a78053e3fe3b9596ed71e0 Mon Sep 17 00:00:00 2001 From: Dongsheng Song Date: Fri, 16 Nov 2007 10:18:42 +0800 Subject: [PATCH] [svnbook] Translation update. --- doc/svnbook/build.xml | 15 +- doc/svnbook/po/zh_CN.po | 1717 ++++++++++++++++++++--------------------------- 2 files changed, 724 insertions(+), 1008 deletions(-) diff --git a/doc/svnbook/build.xml b/doc/svnbook/build.xml index 09bf3fa..5193875 100644 --- a/doc/svnbook/build.xml +++ b/doc/svnbook/build.xml @@ -77,6 +77,7 @@ + @@ -187,7 +188,7 @@ - + @@ -222,17 +223,17 @@ - + - + - + @@ -251,7 +252,7 @@ - + @@ -260,8 +261,8 @@ - - + + diff --git a/doc/svnbook/po/zh_CN.po b/doc/svnbook/po/zh_CN.po index c4965db..418eea7 100644 --- a/doc/svnbook/po/zh_CN.po +++ b/doc/svnbook/po/zh_CN.po @@ -52,109 +52,108 @@ msgstr "" #. (None) #: ../source/book.xml:956 msgid "@@image: 'images/ch01dia1.png'; md5=d5cf54020bcbb99fb12150481d94bffa" -msgstr "" +msgstr "@@image: 'images/ch01dia1.png'; md5=d5cf54020bcbb99fb12150481d94bffa" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:1086 msgid "@@image: 'images/ch02dia1.png'; md5=9f98bd2bd15fabc36d55db0572a7b32b" -msgstr "" +msgstr "@@image: 'images/ch02dia1.png'; md5=9f98bd2bd15fabc36d55db0572a7b32b" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:1157 msgid "@@image: 'images/ch02dia2.png'; md5=4c3e6e55f9a0c50d6925f5ca4587e47b" -msgstr "" +msgstr "@@image: 'images/ch02dia2.png'; md5=4c3e6e55f9a0c50d6925f5ca4587e47b" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:1186 msgid "@@image: 'images/ch02dia3.png'; md5=e9cd778666a999ab329a069efed37500" -msgstr "" +msgstr "@@image: 'images/ch02dia3.png'; md5=e9cd778666a999ab329a069efed37500" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:1271 msgid "@@image: 'images/ch02dia4.png'; md5=8d13576c2af1db88349f6ff144ef6fc2" -msgstr "" +msgstr "@@image: 'images/ch02dia4.png'; md5=8d13576c2af1db88349f6ff144ef6fc2" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:1281 msgid "@@image: 'images/ch02dia5.png'; md5=f4ec352cd843cf130fe500cfdbc358ca" -msgstr "" +msgstr "@@image: 'images/ch02dia5.png'; md5=f4ec352cd843cf130fe500cfdbc358ca" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:1469 msgid "@@image: 'images/ch02dia6.png'; md5=d4eac305c63464419d945a616284c4ce" -msgstr "" +msgstr "@@image: 'images/ch02dia6.png'; md5=d4eac305c63464419d945a616284c4ce" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:1652 msgid "@@image: 'images/ch02dia7.png'; md5=067bb47f6fe3dcdeefac6755da876cdf" -msgstr "" +msgstr "@@image: 'images/ch02dia7.png'; md5=067bb47f6fe3dcdeefac6755da876cdf" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:6672 msgid "@@image: 'images/ch04dia1.png'; md5=a157a2c9fc737cab3db918aaf489bf7e" -msgstr "" +msgstr "@@image: 'images/ch04dia1.png'; md5=a157a2c9fc737cab3db918aaf489bf7e" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:6710 msgid "@@image: 'images/ch04dia2.png'; md5=5c6b571282ff05d99a99d69fdef50378" -msgstr "" +msgstr "@@image: 'images/ch04dia2.png'; md5=5c6b571282ff05d99a99d69fdef50378" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:6855 msgid "@@image: 'images/ch04dia3.png'; md5=7226def64bf6dea42b547d968b853a08" -msgstr "" +msgstr "@@image: 'images/ch04dia3.png'; md5=7226def64bf6dea42b547d968b853a08" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:6945 msgid "@@image: 'images/ch04dia4.png'; md5=03cbad24eee5abe0cadc452be19c2613" -msgstr "" +msgstr "@@image: 'images/ch04dia4.png'; md5=03cbad24eee5abe0cadc452be19c2613" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:15551 msgid "@@image: 'images/ch08dia1.png'; md5=870a5b07012b21f7b187fdb1d912d8d6" -msgstr "" +msgstr "@@image: 'images/ch08dia1.png'; md5=870a5b07012b21f7b187fdb1d912d8d6" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #. (None) #: ../source/book.xml:15580 msgid "@@image: 'images/ch08dia2.png'; md5=a72633f0cc8f6f83fa4d8a96b47202ca" -msgstr "" +msgstr "@@image: 'images/ch08dia2.png'; md5=a72633f0cc8f6f83fa4d8a96b47202ca" #. (title) #: ../source/book.xml:4 msgid "Version Control with Subversion" -msgstr "使用Subversion进行版本控制" +msgstr "Subversion 权威指南" #. (subtitle) #: ../source/book.xml:5 -#, fuzzy msgid "For Subversion 1.5(Compiled from r2881)" -msgstr "针对 Subversion 1.5(编译自版本 r2880)" +msgstr "针对 Subversion 1.5(编译自版本 r2881)" #. (edition) #: ../source/book.xml:6 @@ -263,8 +262,9 @@ msgstr "C. Michael Pilato" #. (para) #: ../source/book.xml:48 +#, fuzzy msgid "This work is licensed under the Creative Commons Attribution License. To view a copy of this license, visit http://creativecommons.org/licenses/by/2.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA." -msgstr "本作品使用共同创造许可证。如果要查看本许可证,可以访问 http://creativecommons.org/licenses/by/2.0/ 或发送邮件到 Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA。" +msgstr "本作品使用共同创造许可证,可以访问或发送邮件到Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.查看本许可证。" #. (title) #: ../source/book.xml:62 @@ -299,7 +299,7 @@ msgstr "Q:怎样使用Glorbosoft XYZ最大程度的提高团队生产率?" #. (para) #: ../source/book.xml:80 msgid "A: Many of our customers want to know how they can maximize productivity through our patented office groupware innovations. The answer is simple: first, click on the File menu, scroll down to Increase Productivity, then…" -msgstr "A:许多客户希望知道怎样利用我们革命性的独创办公套件最大程度的提高生产率。答案非常简单:首先,点击文件菜单,找到提高生产率菜单项,然后…" +msgstr "A:许多客户希望知道怎样利用我们革命性的专利办公套件最大程度的提高生产率。答案非常简单:首先,点击文件 菜单,找到提高生产率菜单项,然后…" #. (para) #: ../source/book.xml:87 @@ -353,9 +353,8 @@ msgstr "即使你能确认什么是完美,也不要让完美成为好的敌人 #. (para) #: ../source/book.xml:189 -#, fuzzy msgid "Concurrent Versions System (CVS) In the world of open-source software, the Concurrent Versions System (CVS) was the tool of choice for version control for many years. And rightly so. CVS was open-source software itself, and its non-restrictive modus operandi and support for networked operation allowed dozens of geographically dispersed programmers to share their work. It fit the collaborative nature of the open-source world very well. CVS and its semi-chaotic development model have since become cornerstones of open-source culture." -msgstr "并行版本系统(CVS)在开源软件世界,长久以来,并行版本系统(CVS)一直是版本控制工具的唯一选择。事实证明,这个选择不错。CVS的自由软件身份,无约束的处事态度,和对网络化操作的支持(网络使众多身处不同地方的程序员可以共享他们的工作成果),正符合了开源世界协作的精神,CVS和它半混乱状态的开发模式已成为开源文化的基石。" +msgstr "并行版本系统(CVS)在开源软件世界,长久以来,并行版本系统(CVS)一直是版本控制工具的唯一选择。事实证明,这个选择不错。CVS的自由软件身份,无约束的处事态度,和对网络化操作的支持(网络使众多身处不同地方的程序员可以共享他们的工作成果),正符合了开源世界协作的精神,CVS和它半混乱状态的开发模式已成为开源文化的基石。" #. (para) #: ../source/book.xml:200 @@ -375,15 +374,13 @@ msgstr "读者" #. (para) #: ../source/book.xml:225 -#, fuzzy msgid "This book is written for computer-literate folk who want to use Subversion to manage their data. While Subversion runs on a number of different operating systems, its primary user interface is command-line based. That command-line tool (svn), and some auxiliary programs, are the focus of this book." -msgstr "本书是为了那些在计算机领域有丰富知识,并且希望使用Subversion管理数据的人士准备的。尽管Subversion可以在多种不同的操作系统上运行,但其基本用户操作界面是基于命令行的,也就是我们将要在本书中讲述和使用的命令行工具(svn)。" +msgstr "本书是为了那些在计算机领域有丰富知识,并且希望使用Subversion管理数据的人士准备的。尽管Subversion可以在多种不同的操作系统上运行,但其基本用户操作界面是基于命令行的,也就是我们将要在本书中讲述和使用的命令行工具(svn)。" #. (para) #: ../source/book.xml:231 -#, fuzzy msgid "For consistency, the examples in this book assume the reader is using a Unix-like operating system and is relatively comfortable with Unix and command-line interfaces. That said, the svn program also runs on non-Unix platforms like Microsoft Windows. With a few minor exceptions, such as the use of backward slashes (\\) instead of forward slashes (/) for path separators, the input to and output from this tool when run on Windows are identical to its Unix counterpart." -msgstr "出于一致性的考虑,本书的例子假定读者使用的是类Unix的操作系统,并且熟悉Unix和命令行界面。当然,svn程序也可以在入Microsoft Windows这样的非Unix平台上运行,除了一些微小的不同,如使用反斜线(\\)代替正斜线(/)作为路径分隔符,在Windows上运行svn程序的输入和输出与在Unix平台上运行完全一致。" +msgstr "出于一致性的考虑,本书的例子假定读者使用的是类Unix的操作系统,并且熟悉Unix和命令行界面。当然,svn程序也可以在入Microsoft Windows这样的非Unix平台上运行,除了一些微小的不同,如使用反斜线(\\)代替正斜线(/)作为路径分隔符,在Windows上运行svn程序的输入和输出与在Unix平台上运行完全一致。" #. (para) #: ../source/book.xml:240 @@ -408,11 +405,10 @@ msgstr "怎样阅读本书" #. (para) #: ../source/book.xml:267 msgid "Technical books always face a certain dilemma: whether to cater to top-down or bottom-up learners. A top-down learner prefers to read or skim documentation, getting a large overview of how the system works; only then does she actually start using the software. A bottom-learner is a learn by doing person, someone who just wants to dive into the software and figure it out as she goes, referring to book sections when necessary. Most books tend to be written for one type of person or the other, and this book is undoubtedly biased towards top-down learners. (And if you're actually reading this section, you're probably already a top-down learner yourself!) However, if you're a bottom-up person, don't despair. While the book may be laid out as a broad survey of Subversion topics, the contents of each section tends to be heavy with specific examples that you can try-by-doing. For the impatient folks who just want to get going, you can jump right to ." -msgstr "" +msgstr "技术书籍经常要面对这样两难的困境:是迎合自上至下的初学者,还是自下至上的初学者。一个自上至下的学习者会喜欢略读文档,得到对系统工作原理的总体看法;然后她才会开始实际使用软件。而一个自下至上的学习者,是通过实践学习的人,他们希望快速的开始使用软件,自己领会软件的使用,只在必要时读取相关章节。大多数图书会倾向于针对某一类读者,而本书毫无疑问倾向于自上至下的方法。(如果你阅读了本节,那你也一定是一个自上至下的学习者!)然而,如果你是自下至上的人,不要失望,本书以Subversion主题的广泛观察进行组织,每个章节都包含了大量可以尝试的详细实例。如果你希望马上开工,没有耐心等待,你可以看。" #. (para) #: ../source/book.xml:285 -#, fuzzy msgid "Regardless of your learning style, this book aims to be useful to people of widely different backgrounds—from people with no previous experience in version control to experienced system administrators. Depending on your own background, certain chapters may be more or less important to you. The following can be considered a recommended reading list for various types of readers:" msgstr "本书适用于具有不同背景知识的各个层次的读者—从未使用过版本控制的新手到经验丰富的系统管理员都能够从本书中获益。根据基础的不同,某些的章节可能对某些读者更有价值。下面的内容可以看作是为不同类型的读者提供的推荐阅读清单:" @@ -484,7 +480,7 @@ msgstr "等宽字体" #. (para) #: ../source/book.xml:368 msgid "Used for commands, command output, and options" -msgstr "用于命令,命令输出和命令选型" +msgstr "用于命令,命令输出和选项" #. (replaceable) #: ../source/book.xml:373 @@ -568,9 +564,8 @@ msgstr "讲述Subversion版本库的基本概念,怎样建立、配置和维 #. (para) #: ../source/book.xml:483 -#, fuzzy msgid "Explains how to configure your Subversion server and different ways to access your repository: HTTP, the svn protocol, and local disk access. It also covers the details of authentication, authorization and anonymous access." -msgstr "描述了如何配置Subversion服务器,以及三种访问版本库的方式,HTTPsvn协议和本地访问。这里也介绍了认证的细节,以及授权与匿名访问。" +msgstr "描述了如何配置Subversion服务器,以及三种访问版本库的方式,HTTPsvn协议和本地磁盘访问。这里也介绍了认证,授权与匿名访问的细节。" #. (para) #: ../source/book.xml:496 @@ -584,9 +579,8 @@ msgstr "介绍了Subversion的核心部件、Subversion的文件系统,以及 #. (para) #: ../source/book.xml:519 -#, fuzzy msgid "Explains in great detail every subcommand of svn, svnadmin, and svnlook with plenty of examples for the whole family!" -msgstr "以大量的实例,详细描述了svnsvnadminsvnlook的所有子命令。" +msgstr "以大量的实例,详细描述了svnsvnadminsvnlook的所有子命令。" #. (para) #: ../source/book.xml:530 @@ -597,7 +591,7 @@ msgstr "因为缺乏耐心,我们会立刻解释如何安装和使用Subversio #: ../source/book.xml:540 #, fuzzy msgid "Covers the similarities and differences between Subversion and CVS, with numerous suggestions on how to break all the bad habits you picked up from years of using CVS. Included are descriptions of Subversion revision numbers, versioned directories, offline operations, update vs. status, branches, tags, metadata, conflict resolution, and authentication." -msgstr "详细比较了Subversion与CVS的异同,并针对如何消除多年使用CVS养成的坏习惯提出建议。内容包括Subversion修订版本号、版本化的目录、离线操作、updatestatus的对比、分支、标签、元数据、冲突处理和认证。" +msgstr "详细比较了Subversion与CVS的异同,并针对如何消除多年使用CVS养成的坏习惯提出建议。内容包括Subversion修订版本号、版本化的目录、离线操作、updatestatus的对比、分支、标签、元数据、冲突处理和认证。" #. (para) #: ../source/book.xml:555 @@ -1035,7 +1029,7 @@ msgstr "一个通过网络增量镜像版本库的程序。" #: ../source/book.xml:1038 #, fuzzy msgid "Assuming you have Subversion installed correctly, you should be ready to start. The next two chapters will walk you through the use of svn, Subversion's command-line client program." -msgstr "如果已经正确完成了Subversion的安装,我们就可以开始我们的学习之旅了。在后面的两章中,我们将讲解如何使用Subversion的客户端程序svn。" +msgstr "如果已经正确完成了Subversion的安装,我们就可以开始我们的学习之旅了。在后面的两章中,我们将讲解如何使用Subversion的客户端程序svn。" #. (title) #: ../source/book.xml:1052 @@ -1327,7 +1321,7 @@ msgstr "" #: ../source/book.xml:1416 #, fuzzy msgid "If the URL contains spaces, be sure to place it within quote marks, so that your shell treats the whole thing as a single argument to the svn program." -msgstr "如果URL包含空格,一定要使用引号,这样你的脚本才会把它做一个单独的svn参数。" +msgstr "如果URL包含空格,一定要使用引号,这样你的脚本才会把它做一个单独的svn参数。" #. (title) #: ../source/book.xml:1423 @@ -1417,7 +1411,7 @@ msgstr "假定你修改了button.c,因 #: ../source/book.xml:1505 #, fuzzy msgid "To publish your changes to others, you can use Subversion's commit command." -msgstr "将你的修改发布给别人,你可以使用Subversion的提交(commit)命令:" +msgstr "将你的修改发布给别人,你可以使用Subversion的提交(commit)命令:" #. (screen) #: ../source/book.xml:1507 @@ -1451,7 +1445,7 @@ msgstr "假设你有个合作者,Sally,她和你同时取出了update her working copy, by using the Subversion update command. This will incorporate your changes into her working copy, as well as any others that have been committed since she checked it out." -msgstr "要使项目最新,Sally可以要求Subversion更新她的工作备份,通过使用更新(update)命令,将结合你和所有其他人在她上次更新之后的改变到她的工作拷贝。" +msgstr "要使项目最新,Sally可以要求Subversion更新她的工作备份,通过使用更新(update)命令,将结合你和所有其他人在她上次更新之后的改变到她的工作拷贝。" #. (screen) #: ../source/book.xml:1531 @@ -1483,7 +1477,7 @@ msgstr "" #: ../source/book.xml:1542 #, fuzzy msgid "The output from the svn update command indicates that Subversion updated the contents of button.c. Note that Sally didn't need to specify which files to update; Subversion uses the information in the .svn directory, and further information in the repository, to decide which files need to be brought up to date." -msgstr "svn update命令的输出表明Subversion更新了button.c的内容,注意,Sally不必指定要更新的文件,subversion利用.svn以及版本库的进一步信息决定哪些文件需要更新。" +msgstr "svn update命令的输出表明Subversion更新了button.c的内容,注意,Sally不必指定要更新的文件,subversion利用.svn以及版本库的进一步信息决定哪些文件需要更新。" #. (title) #: ../source/book.xml:1551 @@ -1575,7 +1569,7 @@ msgstr "修订版本" #: ../source/book.xml:1622 #, fuzzy msgid "An svn commit operation publishes changes to any number of files and directories as a single atomic transaction. In your working copy, you can change files' contents; create, delete, rename and copy files and directories; then commit a complete set of changes as an atomic transaction." -msgstr "一个svn commit操作可以作为一个原子事务操作发布任意数量文件和目录的修改,在你的工作拷贝里,你可以改变文件内容、删除、改名以及拷贝文件和目录,然后作为一个整体提交。" +msgstr "一个svn commit操作可以作为一个原子事务操作发布任意数量文件和目录的修改,在你的工作拷贝里,你可以改变文件内容、删除、改名以及拷贝文件和目录,然后作为一个整体提交。" #. (para) #: ../source/book.xml:1628 @@ -1651,7 +1645,7 @@ msgstr "" #: ../source/book.xml:1698 #, fuzzy msgid "Suppose that, at this point, Sally commits a change to integer.c, creating revision 6. If you use svn update to bring your working copy up to date, then it will look like this:" -msgstr "假设此刻,Sally提交了对integer.c的修改,建立修订版本6,如果你使用svn update来更新你的工作拷贝,你会看到:" +msgstr "假设此刻,Sally提交了对integer.c的修改,建立修订版本6,如果你使用svn update来更新你的工作拷贝,你会看到:" #. (screen) #: ../source/book.xml:1702 @@ -1708,7 +1702,7 @@ msgstr "未修改且是当前的" #: ../source/book.xml:1743 #, fuzzy msgid "The file is unchanged in the working directory, and no changes to that file have been committed to the repository since its working revision. An svn commit of the file will do nothing, and an svn update of the file will do nothing." -msgstr "文件在工作目录里没有修改,在工作修订版本之后没有修改提交到版本库。svn commit操作不做任何事情,svn update不做任何事情。" +msgstr "文件在工作目录里没有修改,在工作修订版本之后没有修改提交到版本库。svn commit操作不做任何事情,svn update不做任何事情。" #. (term) #: ../source/book.xml:1752 @@ -1719,7 +1713,7 @@ msgstr "本地已修改且是当前的" #: ../source/book.xml:1754 #, fuzzy msgid "The file has been changed in the working directory, and no changes to that file have been committed to the repository since you last updated. There are local changes that have not been committed to the repository, thus an svn commit of the file will succeed in publishing your changes, and an svn update of the file will do nothing." -msgstr "在工作目录已经修改,从基本修订版本之后没有修改提交到版本库。本地修改没有提交,因此svn commit会成功提交,svn update不做任何事情。" +msgstr "在工作目录已经修改,从基本修订版本之后没有修改提交到版本库。本地修改没有提交,因此svn commit会成功提交,svn update不做任何事情。" #. (term) #: ../source/book.xml:1764 @@ -1730,7 +1724,7 @@ msgstr "未修改且不是当前的了" #: ../source/book.xml:1766 #, fuzzy msgid "The file has not been changed in the working directory, but it has been changed in the repository. The file should eventually be updated, to make it current with the latest public revision. An svn commit of the file will do nothing, and an svn update of the file will fold the latest changes into your working copy." -msgstr "这个文件在工作目录没有修改,但在版本库中已经修改了。这个文件最终将更新到最新版本,成为当时的公共修订版本。svn commit不做任何事情,svn update将会取得最新的版本到工作拷贝。" +msgstr "这个文件在工作目录没有修改,但在版本库中已经修改了。这个文件最终将更新到最新版本,成为当时的公共修订版本。svn commit不做任何事情,svn update将会取得最新的版本到工作拷贝。" #. (term) #: ../source/book.xml:1776 @@ -1741,13 +1735,13 @@ msgstr "本地已修改且不是最新的" #: ../source/book.xml:1778 #, fuzzy msgid "The file has been changed both in the working directory, and in the repository. An svn commit of the file will fail with an out-of-date error. The file should be updated first; an svn update command will attempt to merge the public changes with the local changes. If Subversion can't complete the merge in a plausible way automatically, it leaves it to the user to resolve the conflict." -msgstr "这个文件在工作目录和版本库都得到修改。一个svn commit将会失败,这个文件必须首先更新,svn update命令会合并公共和本地修改,如果Subversion不可以自动完成,将会让用户解决冲突。" +msgstr "这个文件在工作目录和版本库都得到修改。一个svn commit将会失败,这个文件必须首先更新,svn update命令会合并公共和本地修改,如果Subversion不可以自动完成,将会让用户解决冲突。" #. (para) #: ../source/book.xml:1790 #, fuzzy msgid "This may sound like a lot to keep track of, but the svn status command will show you the state of any item in your working copy. For more information on that command, see ." -msgstr "这看起来需要记录很多事情,但是svn status命令可以告诉你工作拷贝中文件的状态,关于此命令更多的信息,请看。" +msgstr "这看起来需要记录很多事情,但是svn status命令可以告诉你工作拷贝中文件的状态,关于此命令更多的信息,请看。" #. (title) #: ../source/book.xml:1799 @@ -1768,7 +1762,7 @@ msgstr "更新和提交是分开的" #: ../source/book.xml:1814 #, fuzzy msgid "One of the fundamental rules of Subversion is that a push action does not cause a pull, nor the other way around. Just because you're ready to submit new changes to the repository doesn't mean you're ready to receive changes from other people. And if you have new changes still in progress, then svn update should gracefully merge repository changes into your own, rather than forcing you to publish them." -msgstr "Subversion有一个基本原则就是一个push动作不会导致pull,或者相反的过程,因为你准备好了提交你的修改并不意味着你已经准备好了从其他人那里接受修改。如果你的新的修改还在进行,svn update将会优雅的合并版本库的修改到你的工作拷贝,而不会强迫将修改发布。" +msgstr "Subversion有一个基本原则就是一个push动作不会导致pull,或者相反的过程,因为你准备好了提交你的修改并不意味着你已经准备好了从其他人那里接受修改。如果你的新的修改还在进行,svn update将会优雅的合并版本库的修改到你的工作拷贝,而不会强迫将修改发布。" #. (para) #: ../source/book.xml:1823 @@ -1779,7 +1773,7 @@ msgstr "这个规则的主要副作用就是工作拷贝需要记录额外的信 #: ../source/book.xml:1828 #, fuzzy msgid "For example, suppose you have a working copy entirely at revision 10. You edit the file foo.html and then perform an svn commit, which creates revision 15 in the repository. After the commit succeeds, many new users would expect the working copy to be entirely at revision 15, but that's not the case! Any number of changes might have happened in the repository between revisions 10 and 15. The client knows nothing of those changes in the repository, since you haven't yet run svn update, and svn commit doesn't pull down new changes. If, on the other hand, svn commitwere to automatically download the newest changes, then it would be possible to set the entire working copy to revision 15—but then we'd be breaking the fundamental rule of push and pull remaining separate actions. Therefore the only safe thing the Subversion client can do is mark the one file—foo.html—as being at revision 15. The rest of the working copy remains at revision 10. Only by running svn update can the latest changes be downloaded, and the whole working copy be marked as revision 15." -msgstr "举个例子,假定你有一个工作拷贝,修订版本号是10。你修改了foo.html,然后执行svn commit,在版本库里创建了修订版本15。当成功提交之后,许多用户希望工作拷贝完全变成修订版本15,但是事实并非如此。修订版本从10到15会发生任何修改,可是客户端在运行svn update之前不知道版本库发生了怎样的改变,svn commit不会拖出任何新的修改。另一方面,如果svn commit会自动下载最新的修改,可以使得整个工作拷贝成为修订版本15—但是,那样我们会打破pushpull完全分开的原则。因此,Subversion客户端最安全的方式是标记一个文件—foo.html—为修订版本15,工作拷贝余下的部分还是修订版本10。只有运行svn update才会下载最新的修改,整个工作拷贝被标记为修订版本15。" +msgstr "举个例子,假定你有一个工作拷贝,修订版本号是10。你修改了foo.html,然后执行svn commit,在版本库里创建了修订版本15。当成功提交之后,许多用户希望工作拷贝完全变成修订版本15,但是事实并非如此。修订版本从10到15会发生任何修改,可是客户端在运行svn update之前不知道版本库发生了怎样的改变,svn commit不会拖出任何新的修改。另一方面,如果svn commit会自动下载最新的修改,可以使得整个工作拷贝成为修订版本15—但是,那样我们会打破pushpull完全分开的原则。因此,Subversion客户端最安全的方式是标记一个文件—foo.html—为修订版本15,工作拷贝余下的部分还是修订版本10。只有运行svn update才会下载最新的修改,整个工作拷贝被标记为修订版本15。" #. (title) #: ../source/book.xml:1856 @@ -1790,13 +1784,13 @@ msgstr "混合版本很常见" #: ../source/book.xml:1858 #, fuzzy msgid "The fact is, every time you run svn commit, your working copy ends up with some mixture of revisions. The things you just committed are marked as having larger working revisions than everything else. After several commits (with no updates in-between) your working copy will contain a whole mixture of revisions. Even if you're the only person using the repository, you will still see this phenomenon. To examine your mixture of working revisions, use the svn status --verbose command (see for more information.)" -msgstr "事实上,每次运行svn commit,你的工作拷贝都会进入混合多个修订版本的状态,刚刚提交的文件会比其他文件有更高的修订版本号。经过多次提交(之间没有更新),你的工作拷贝会完全是混合的修订版本。即使只有你一个人使用版本库,你依然会见到这个现象。为了检验混合工作修订版本,可以使用svn status --verbose命令(详细信息见)。" +msgstr "事实上,每次运行svn commit,你的工作拷贝都会进入混合多个修订版本的状态,刚刚提交的文件会比其他文件有更高的修订版本号。经过多次提交(之间没有更新),你的工作拷贝会完全是混合的修订版本。即使只有你一个人使用版本库,你依然会见到这个现象。为了检验混合工作修订版本,可以使用svn status --verbose命令(详细信息见)。" #. (para) #: ../source/book.xml:1869 #, fuzzy msgid "Often, new users are completely unaware that their working copy contains mixed revisions. This can be confusing, because many client commands are sensitive to the working revision of the item they're examining. For example, the svn log command is used to display the history of changes to a file or directory (see ). When the user invokes this command on a working copy object, they expect to see the entire history of the object. But if the object's working revision is quite old (often because svn update hasn't been run in a long time), then the history of the older version of the object is shown." -msgstr "通常,新用户对于工作拷贝的混合修订版本一无所知,这会让人糊涂,因为许多客户端命令对于所检验条目的修订版本很敏感。例如svn log命令显示一个文件或目录的历史修改信息(见),当用户对一个工作拷贝对象调用这个命令,他们希望看到这个对象的整个历史信息。但是如果这个对象的修订版本已经相当老了(通常因为很长时间没有运行svn update),此时会显示比这个对象更老的历史。" +msgstr "通常,新用户对于工作拷贝的混合修订版本一无所知,这会让人糊涂,因为许多客户端命令对于所检验条目的修订版本很敏感。例如svn log命令显示一个文件或目录的历史修改信息(见),当用户对一个工作拷贝对象调用这个命令,他们希望看到这个对象的整个历史信息。但是如果这个对象的修订版本已经相当老了(通常因为很长时间没有运行svn update),此时会显示比这个对象更老的历史。" #. (title) #: ../source/book.xml:1886 @@ -1885,7 +1879,7 @@ msgstr "求助!" #: ../source/book.xml:1986 #, fuzzy msgid "Before reading on, here is the most important command you'll ever need when using Subversion: svn help. The Subversion command-line client is self-documenting—at any time, a quick svn help SUBCOMMAND will describe the syntax, options, and behavior of the subcommand." -msgstr "在继续阅读之前,需要知道Subversion使用中最重要的命令:svn help,Subversion命令行工具是一个自文档的工具—在任何时候你可以运行svn help <subcommand>来查看子命令的语法、参数以及行为方式。" +msgstr "在继续阅读之前,需要知道Subversion使用中最重要的命令:svn help,Subversion命令行工具是一个自文档的工具—在任何时候你可以运行svn help <subcommand>来查看子命令的语法、参数以及行为方式。" #. (screen) #: ../source/book.xml:1992 @@ -1932,7 +1926,7 @@ msgstr "导入数据到你的版本库" #: ../source/book.xml:2016 #, fuzzy msgid "There are two ways to get new files into your Subversion repository: svn import and svn add. We'll discuss svn import here and svn add later in this chapter when we review a typical day with Subversion." -msgstr "有两种方法可以将新文件引入Subversion版本库,svn importsvn add,我们将在本章讨论svn import,而会在回顾Subversion的典型一天时讨论svn add。" +msgstr "有两种方法可以将新文件引入Subversion版本库,svn importsvn add,我们将在本章讨论svn import,而会在回顾Subversion的典型一天时讨论svn add。" #. (title), (refname) #: ../source/book.xml:2024 ../source/book.xml:18346 @@ -1943,7 +1937,7 @@ msgstr "svn import" #: ../source/book.xml:2026 #, fuzzy msgid "The svn import command is a quick way to copy an unversioned tree of files into a repository, creating intermediate directories as necessary. svn import doesn't require a working copy, and your files are immediately committed to the repository. This is typically used when you have an existing tree of files that you want to begin tracking in your Subversion repository. For example:" -msgstr "svn import是将未版本化文件导入版本库的最快方法,会根据需要创建中介目录。svn import不需要一个工作拷贝,你的文件会直接提交到版本库,这通常用在你希望将一组文件加入到Subversion版本库时,例如:" +msgstr "svn import是将未版本化文件导入版本库的最快方法,会根据需要创建中介目录。svn import不需要一个工作拷贝,你的文件会直接提交到版本库,这通常用在你希望将一组文件加入到Subversion版本库时,例如:" #. (screen) #: ../source/book.xml:2033 @@ -1997,7 +1991,7 @@ msgstr "" #: ../source/book.xml:2053 #, fuzzy msgid "Note that after the import is finished, the original tree is not converted into a working copy. To start working, you still need to svn checkout a fresh working copy of the tree." -msgstr "注意,在导入之后,原来的目录树并没有转化成工作拷贝,为了开始工作,你还是需要运行svn checkout导出一个工作拷贝。" +msgstr "注意,在导入之后,原来的目录树并没有转化成工作拷贝,为了开始工作,你还是需要运行svn checkout导出一个工作拷贝。" #. (title) #: ../source/book.xml:2061 @@ -2099,7 +2093,7 @@ msgstr "尽管上面的例子取出了trunk目录,你也完全可以通过输 #. (screen) #: ../source/book.xml:2147 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "$ svn checkout \\\n" @@ -2113,7 +2107,7 @@ msgid "" "Checked out revision 8810.\n" msgstr "" "\n" -"$ svn checkout \\\n" +"$ svn checkout -r 8810 \\\n" " http://svn.collab.net/repos/svn/trunk/subversion/tests/cmdline/\n" "A cmdline/revert_tests.py\n" "A cmdline/diff_tests.py\n" @@ -2133,7 +2127,7 @@ msgstr "因为Subversion使用拷贝-修改-合并模型而不是 #: ../source/book.xml:2166 #, fuzzy msgid "While your working copy is just like any other collection of files and directories on your system, you can edit files at will, but you must tell Subversion about everything else that you do. For example, if you want to copy or move an item in a working copy, you should use svn copy or svn move instead of the copy and move commands provided by your operating system. We'll talk more about them later in this chapter." -msgstr "因为你的工作拷贝同你系统上的文件和目录没有任何区别,你可以随意修改文件,但是你必须告诉Subversion你做的其他任何事。例如,你希望拷贝或移动工作拷贝的一个文件,你应该使用svn copy或者 svn move而不要使用操作系统的拷贝移动命令,我们会在本章后面详细介绍。" +msgstr "因为你的工作拷贝同你系统上的文件和目录没有任何区别,你可以随意修改文件,但是你必须告诉Subversion你做的其他任何事。例如,你希望拷贝或移动工作拷贝的一个文件,你应该使用svn copy或者 svn move而不要使用操作系统的拷贝移动命令,我们会在本章后面详细介绍。" #. (para) #: ../source/book.xml:2176 @@ -2156,7 +2150,7 @@ msgstr "工作拷贝中的任何一个目录包括一个名为.svn subdirectory, the easiest way to fix the problem is to remove the entire containing directory (a normal system deletion, not svn delete), then run svn update from a parent directory. The Subversion client will re-download the directory you've deleted, with a new .svn area as well." -msgstr "" +msgstr "如果你不小心删除了子目录.svn,最简单的解决办法是删除包含的目录(普通的文件系统删除,而不是svn delete),然后在父目录运行svn update,Subversion客户端会重新下载你删除的目录,并包含新的.svn。" #. (para) #: ../source/book.xml:2199 @@ -2165,7 +2159,7 @@ msgstr "因为你可以使用版本库的URL作为唯一参数取出一个工作 #. (screen) #: ../source/book.xml:2203 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "$ svn checkout http://svn.collab.net/repos/svn/trunk subv\n" @@ -2178,7 +2172,7 @@ msgid "" "Checked out revision 8810.\n" msgstr "" "\n" -"$ svn checkout http://svn.collab.net/repos/svn/trunk subv\n" +"$ svn -r 8810 checkout http://svn.collab.net/repos/svn/trunk subv\n" "A subv/Makefile.in\n" "A subv/ac-helpers\n" "A subv/ac-helpers/install.sh\n" @@ -2331,7 +2325,7 @@ msgstr "更新你的工作副本" #: ../source/book.xml:2362 #, fuzzy msgid "When working on a project with a team, you'll want to update your working copy to receive any changes made since your last update by other developers on the project. Use svn update to bring your working copy into sync with the latest revision in the repository." -msgstr "当你在一个团队的项目里工作时,你希望更新你的工作拷贝得到所有其他人这段时间作出的修改,使用svn update让你的工作拷贝与最新的版本同步。" +msgstr "当你在一个团队的项目里工作时,你希望更新你的工作拷贝得到所有其他人这段时间作出的修改,使用svn update让你的工作拷贝与最新的版本同步。" #. (screen) #: ../source/book.xml:2367 @@ -2359,7 +2353,7 @@ msgstr "这种情况下,其他人在你上次更新之后提交了对svn update, a letter code is displayed next to each item to let you know what actions Subversion performed to bring your working copy up-to-date. To find out what these letters mean, see ." -msgstr "当服务器通过svn update将修改传递到你的工作拷贝时,每一个项目之前会有一个字母,来让你知道Subversion为保持最新对你的工作拷贝作了哪些工作。关于这些字母的详细含义,可以看" +msgstr "当服务器通过svn update将修改传递到你的工作拷贝时,每一个项目之前会有一个字母,来让你知道Subversion为保持最新对你的工作拷贝作了哪些工作。关于这些字母的详细含义,可以看" #. (title) #: ../source/book.xml:2386 @@ -2370,7 +2364,7 @@ msgstr "修改你的工作副本" #: ../source/book.xml:2388 #, fuzzy msgid "Now you can get to work and make changes in your working copy. It's usually most convenient to decide on a discrete change (or set of changes) to make, such as writing a new feature, fixing a bug, etc. The Subversion commands that you will use here are svn add, svn delete, svn copy, svn move, and svn mkdir. However, if you are merely editing files that are already in Subversion, you may not need to use any of these commands until you commit." -msgstr "现在你可以开始工作并且修改你的工作拷贝了,你很容易决定作出一个修改(或者是一组),像写一个新的特性,修正一个错误等等。这时可以使用的Subversion命令包括svn addsvn deletesvn copysvn move。如果你只是修改版本库中已经存在的文件,在你提交之前,不必使用上面的任何一个命令。" +msgstr "现在你可以开始工作并且修改你的工作拷贝了,你很容易决定作出一个修改(或者是一组),像写一个新的特性,修正一个错误等等。这时可以使用的Subversion命令包括svn addsvn deletesvn copysvn move。如果你只是修改版本库中已经存在的文件,在你提交之前,不必使用上面的任何一个命令。" #. (para) #: ../source/book.xml:2398 @@ -2436,7 +2430,7 @@ msgstr "svn copy foo bar" #: ../source/book.xml:2485 #, fuzzy msgid "Create a new item bar as a duplicate of foo and automatically schedule bar for addition. When bar is added to the repository on the next commit, its copy history is recorded (as having originally come from foo). svn copy does not create intermediate directories." -msgstr "建立一个新的项目bar作为foo的复制品,会自动预定将bar添加,当在下次提交时会将bar添加到版本库,这种拷贝历史会记录下来(按照来自foo的方式记录),svn copy并不建立中介目录。" +msgstr "建立一个新的项目bar作为foo的复制品,会自动预定将bar添加,当在下次提交时会将bar添加到版本库,这种拷贝历史会记录下来(按照来自foo的方式记录),svn copy并不建立中介目录。" #. (command) #: ../source/book.xml:2497 @@ -2447,7 +2441,7 @@ msgstr "svn move foo bar" #: ../source/book.xml:2500 #, fuzzy msgid "This command is exactly the same as running svn copy foo bar; svn delete foo. That is, bar is scheduled for addition as a copy of foo, and foo is scheduled for removal. svn move does not create intermediate directories." -msgstr "这个命令与与运行svn copy foo bar; svn delete foo完全相同,bar作为foo的拷贝准备添加,foo已经预定要被删除,svn move不建立中介的目录。" +msgstr "这个命令与与运行svn copy foo bar; svn delete foo完全相同,bar作为foo的拷贝准备添加,foo已经预定要被删除,svn move不建立中介的目录。" #. (command) #: ../source/book.xml:2511 @@ -2458,7 +2452,7 @@ msgstr "svn mkdir blort" #: ../source/book.xml:2514 #, fuzzy msgid "This command is exactly the same as running mkdir blort; svn add blort. That is, a new directory named blort is created and scheduled for addition." -msgstr "这个命令同运行 mkdir blort; svn add blort相同,也就是创建一个叫做blort的文件,并且预定添加到版本库。" +msgstr "这个命令同运行 mkdir blort; svn add blort相同,也就是创建一个叫做blort的文件,并且预定添加到版本库。" #. (title) #: ../source/book.xml:2523 @@ -2469,7 +2463,7 @@ msgstr "不通过工作副本修改版本库" #: ../source/book.xml:2525 #, fuzzy msgid "There are some use cases that immediately commit tree changes to the repository. This only happens when a subcommand is operating directly on a URL, rather than on a working-copy path. In particular, specific uses of svn mkdir, svn copy, svn move, and svn delete can work with URLs (And don't forget that svn import always makes changes to a URL)." -msgstr "有一些情况下会立刻提交目录树的修改到版本库,这只发生在子命令直接操作URL,而不是工作拷贝路径时。以特定的方式使用svn mkdirsvn copysvn movesvn delete可以针对URL操作(并且不要忘记svn import只针对URL操作)。" +msgstr "有一些情况下会立刻提交目录树的修改到版本库,这只发生在子命令直接操作URL,而不是工作拷贝路径时。以特定的方式使用svn mkdirsvn copysvn movesvn delete可以针对URL操作(并且不要忘记svn import只针对URL操作)。" #. (para) #: ../source/book.xml:2534 @@ -2485,7 +2479,7 @@ msgstr "检查你的修改" #: ../source/book.xml:2548 #, fuzzy msgid "Once you've finished making changes, you need to commit them to the repository, but before you do so, it's usually a good idea to take a look at exactly what you've changed. By examining your changes before you commit, you can make a more accurate log message. You may also discover that you've inadvertently changed a file, and this gives you a chance to revert those changes before committing. Additionally, this is a good opportunity to review and scrutinize changes before publishing them. You can see an overview of the changes you've made by using svn status, and dig into the details of those changes by using svn diff." -msgstr "当你完成修改,你需要提交他们到版本库,但是在此之前,检查一下做过什么修改是个好主意,通过提交前的检查,你可以整理一份精确的日志信息,你也可以发现你不小心修改的文件,给了你一次恢复修改的机会。此外,这是一个审查和仔细察看修改的好机会,你可通过命令svn status浏览所做的修改,通过svn diff检查修改的详细信息。" +msgstr "当你完成修改,你需要提交他们到版本库,但是在此之前,检查一下做过什么修改是个好主意,通过提交前的检查,你可以整理一份精确的日志信息,你也可以发现你不小心修改的文件,给了你一次恢复修改的机会。此外,这是一个审查和仔细察看修改的好机会,你可通过命令svn status浏览所做的修改,通过svn diff检查修改的详细信息。" #. (title) #: ../source/book.xml:2562 @@ -2501,7 +2495,7 @@ msgstr "而且你也没有WAN卡,考虑到你得到我们,哈!" #: ../source/book.xml:2564 #, fuzzy msgid "The commands svn status, svn diff, and svn revert can be used without any network access even if your repository is across the network. This makes it easy to manage your changes-in-progress when you are somewhere without a network connection, such as travelling on an airplane, riding a commuter train or hacking on the beach." -msgstr "这三个命令(svn statussvn diffsvn revert)都可以在没有网络的情况下工作(假定你的版本库是通过网络而不是本地访问的),这让你在没有网络连接时的管理修改过程更加容易,像在飞机上旅行,乘坐火车往返或是在海滩上奋力工作时。" +msgstr "这三个命令(svn statussvn diffsvn revert)都可以在没有网络的情况下工作(假定你的版本库是通过网络而不是本地访问的),这让你在没有网络连接时的管理修改过程更加容易,像在飞机上旅行,乘坐火车往返或是在海滩上奋力工作时。" #. (para) #: ../source/book.xml:2574 @@ -2524,7 +2518,7 @@ msgstr "查看你的修改概况" #: ../source/book.xml:2602 #, fuzzy msgid "To get an overview of your changes, you'll use the svn status command. You'll probably use svn status more than any other Subversion command." -msgstr "为了浏览修改的内容,你会使用这个svn status命令,在所有Subversion命令里,你可能会最多使用svn status。" +msgstr "为了浏览修改的内容,你会使用这个svn status命令,在所有Subversion命令里,你可能会最多使用svn status。" #. (title) #: ../source/book.xml:2608 @@ -2535,19 +2529,19 @@ msgstr "CVS 用户:控制另类的更新!" #: ../source/book.xml:2610 #, fuzzy msgid "You're probably used to using cvs update to see what changes you've made to your working copy. svn status will give you all the information you need regarding what has changed in your working copy—without accessing the repository or potentially incorporating new changes published by other users." -msgstr "你也许使用cvs update来看你做了哪些修改,svn status会给你所有你做的改变—而不需要访问版本库,并且不会在不知情的情况下与其他用户作的更改比较。" +msgstr "你也许使用cvs update来看你做了哪些修改,svn status会给你所有你做的改变—而不需要访问版本库,并且不会在不知情的情况下与其他用户作的更改比较。" #. (para) #: ../source/book.xml:2617 #, fuzzy msgid "In Subversion, update does just that—it updates your working copy with any changes committed to the repository since the last time you've updated your working copy. You may have to break the habit of using the update command to see what local modifications you've made." -msgstr "在Subversion,update只是做这件事—将工作拷贝更新到版本库的最新版本,你可以消除使用update察看本地修改的习惯。" +msgstr "在Subversion,update只是做这件事—将工作拷贝更新到版本库的最新版本,你可以消除使用update察看本地修改的习惯。" #. (para) #: ../source/book.xml:2624 #, fuzzy msgid "If you run svn status at the top of your working copy with no arguments, it will detect all file and tree changes you've made. Below are a few examples of the most common status codes that svn status can return. (Note that the text following # is not actually printed by svn status.)" -msgstr "如果你在工作拷贝的顶级目录运行不带参数的svn status命令,它会检测你做的所有的文件或目录的修改,以下的例子是来展示svn status可能返回的状态码(注意,#之后的不是svn status打印的)。" +msgstr "如果你在工作拷贝的顶级目录运行不带参数的svn status命令,它会检测你做的所有的文件或目录的修改,以下的例子是来展示svn status可能返回的状态码(注意,#之后的不是svn status打印的)。" #. (screen) #: ../source/book.xml:2631 @@ -2569,7 +2563,7 @@ msgstr "" #: ../source/book.xml:2637 #, fuzzy msgid "In this output format svn status prints six columns of characters, followed by several whitespace characters, followed by a file or directory name. The first column tells the status of a file or directory and/or its contents. The codes we listed are:" -msgstr "在这种格式下,svn status打印6列字符,紧跟一些空格,接着是文件或者目录名。第一列告诉一个文件或目录的状态或它的内容,返回代码如下:" +msgstr "在这种格式下,svn status打印6列字符,紧跟一些空格,接着是文件或者目录名。第一列告诉一个文件或目录的状态或它的内容,返回代码如下:" #. (computeroutput) #: ../source/book.xml:2645 @@ -2623,7 +2617,7 @@ msgstr "文件item的内容被修改了 #: ../source/book.xml:2686 #, fuzzy msgid "If you pass a specific path to svn status, you get information about that item alone:" -msgstr "如果你传递一个路径给svn status,它只给你这个项目的信息:" +msgstr "如果你传递一个路径给svn status,它只给你这个项目的信息:" #. (screen) #: ../source/book.xml:2689 @@ -2641,7 +2635,7 @@ msgstr "" #: ../source/book.xml:2693 #, fuzzy msgid "svn status also has a option, which will show you the status of every item in your working copy, even if it has not been changed:" -msgstr "svn status也有一个)选项,它可以显示工作拷贝中的所有项目,即使没有改变过:" +msgstr "svn status也有一个)选项,它可以显示工作拷贝中的所有项目,即使没有改变过:" #. (screen) #: ../source/book.xml:2697 @@ -2675,13 +2669,13 @@ msgstr "" #: ../source/book.xml:2709 #, fuzzy msgid "This is the long form output of svn status. The letters in the first column mean the same as before, but the second column shows the working-revision of the item. The third and fourth columns show the revision in which the item last changed, and who changed it." -msgstr "这是svn status加长形式,第一列保持相同,第二列显示一个工作版本号,第三和第四列显示最后一次修改的版本号和修改人(这些列不会与我们刚才提到的字符混淆)。" +msgstr "这是svn status加长形式,第一列保持相同,第二列显示一个工作版本号,第三和第四列显示最后一次修改的版本号和修改人(这些列不会与我们刚才提到的字符混淆)。" #. (para) #: ../source/book.xml:2715 #, fuzzy msgid "None of the prior invocations to svn status contact the repository—instead, they compare the metadata in the .svn directory with the working copy. Finally, there is the option, which contacts the repository and adds information about things that are out-of-date:" -msgstr "上面所有的svn status调用并没有联系版本库,只是与.svn中的原始数据进行比较的结果,最后,是)参数,它将会联系版本库为已经过时的数据添加新信息:" +msgstr "上面所有的svn status调用并没有联系版本库,只是与.svn中的原始数据进行比较的结果,最后,是)参数,它将会联系版本库为已经过时的数据添加新信息:" #. (screen) #: ../source/book.xml:2722 @@ -2709,13 +2703,13 @@ msgstr "" #: ../source/book.xml:2731 #, fuzzy msgid "Notice the two asterisks: if you were to run svn update at this point, you would receive changes to README and trout.c. This tells you some very useful information—you'll need to update and get the server changes on README before you commit, or the repository will reject your commit for being out-of-date. (More on this subject later.)" -msgstr "注意这两个星号:如果你现在执行svn update,你的READMEtrout.c会被更新,这告诉你许多有用的信息—你可以在提交之前,需要使用更新操作得到文件README的更新,或者说文件已经过时,版本库会拒绝了你的提交。(后面还有更多关于此主题)。" +msgstr "注意这两个星号:如果你现在执行svn update,你的READMEtrout.c会被更新,这告诉你许多有用的信息—你可以在提交之前,需要使用更新操作得到文件README的更新,或者说文件已经过时,版本库会拒绝了你的提交。(后面还有更多关于此主题)。" #. (para) #: ../source/book.xml:2739 #, fuzzy msgid "svn status can display much more information about the files and directories in your working copy than we've shown here—for an exhaustive description of svn status and its output, see ." -msgstr "关于文件和目录,svn status可以比我们的展示显示更多的内容,完整的描述可以看。" +msgstr "关于文件和目录,svn status可以比我们的展示显示更多的内容,完整的描述可以看。" #. (title) #: ../source/book.xml:2747 @@ -2726,7 +2720,7 @@ msgstr "检查你的本地修改的详情" #: ../source/book.xml:2749 #, fuzzy msgid "Another way to examine your changes is with the svn diff command. You can find out exactly how you've modified things by running svn diff with no arguments, which prints out file changes in unified diff format:" -msgstr "另一种检查修改的方式是svn diff命令,你可以通过不带参数的svn diff精确的找出你所做的修改,这会输出统一区别格式的区别信息:" +msgstr "另一种检查修改的方式是svn diff命令,你可以通过不带参数的svn diff精确的找出你所做的修改,这会输出统一区别格式的区别信息:" #. (screen) #: ../source/book.xml:2755 @@ -2816,13 +2810,13 @@ msgstr "" #: ../source/book.xml:2795 #, fuzzy msgid "The svn diff command produces this output by comparing your working files against the cached pristine copies within the .svn area. Files scheduled for addition are displayed as all added-text, and files scheduled for deletion are displayed as all deleted text." -msgstr "svn diff命令通过比较你的文件和.svn原始文件来输出信息,预定要增加的文件会显示所有增加的文本,要删除的文件会显示所有要删除的文本。" +msgstr "svn diff命令通过比较你的文件和.svn原始文件来输出信息,预定要增加的文件会显示所有增加的文本,要删除的文件会显示所有要删除的文本。" #. (para) #: ../source/book.xml:2802 #, fuzzy msgid "Output is displayed in unified diff format. That is, removed lines are prefaced with - and added lines are prefaced with +. svn diff also prints filename and offset information useful to the patch program, so you can generate patches by redirecting the diff output to a file:" -msgstr "输出的格式为统一区别格式(unified diff format),删除的行前面加一个-,添加的行前面有一个+svn diff命令也打印文件名和打补丁需要的信息,所以你可以通过重定向一个区别文件来生成补丁:" +msgstr "输出的格式为统一区别格式(unified diff format),删除的行前面加一个-,添加的行前面有一个+svn diff命令也打印文件名和打补丁需要的信息,所以你可以通过重定向一个区别文件来生成补丁:" #. (screen) #: ../source/book.xml:2810 @@ -2843,7 +2837,7 @@ msgstr "举个例子,你可以把补丁文件发送邮件到其他开发者, #: ../source/book.xml:2815 #, fuzzy msgid "Subversion uses its internal diff engine, which produces unified diff format, by default. If you want diff output in a different format, specify an external diff program using and pass any flags you'd like to it using the option. For example, to see local differences in file foo.c in context output format while ignoring case differences, you might run svn diff --diff-cmd /usr/bin/diff --extensions '-i' foo.c." -msgstr "Subversion使用内置区别引擎,缺省情况下输出为统一区别格式。如果你期望不同的输出格式,你可以使用指定外置的区别程序,并且通过传递其他参数,举个例子,察看本地文件foo.c的区别,同时忽略大小写差异,你可以运行svn diff --diff-cmd /usr/bin/diff --extensions '-bc' foo.c。" +msgstr "Subversion使用内置区别引擎,缺省情况下输出为统一区别格式。如果你期望不同的输出格式,你可以使用指定外置的区别程序,并且通过传递其他参数,举个例子,察看本地文件foo.c的区别,同时忽略大小写差异,你可以运行svn diff --diff-cmd /usr/bin/diff --extensions '-bc' foo.c。" #. (title) #: ../source/book.xml:2830 @@ -2854,13 +2848,13 @@ msgstr "取消本地修改" #: ../source/book.xml:2832 #, fuzzy msgid "Suppose while viewing the output of svn diff you determine that all the changes you made to a particular file are mistakes. Maybe you shouldn't have changed the file at all, or perhaps it would be easier to make different changes starting from scratch." -msgstr "假定我们在看svn diff的输出,你发现对某个文件的所有修改都是错误的,或许你根本不应该修改这个文件,或者是从开头重新修改会更加容易。" +msgstr "假定我们在看svn diff的输出,你发现对某个文件的所有修改都是错误的,或许你根本不应该修改这个文件,或者是从开头重新修改会更加容易。" #. (para) #: ../source/book.xml:2837 #, fuzzy msgid "This is a perfect opportunity to use svn revert:" -msgstr "这是使用svn revert的好机会:" +msgstr "这是使用svn revert的好机会:" #. (screen) #: ../source/book.xml:2839 @@ -2878,7 +2872,7 @@ msgstr "" #: ../source/book.xml:2843 #, fuzzy msgid "Subversion reverts the file to its pre-modified state by overwriting it with the cached pristine copy from the .svn area. But also note that svn revert can undo any scheduled operations—for example, you might decide that you don't want to add a new file after all:" -msgstr "Subversion把文件恢复到未修改的状态,叫做.svn目录的原始拷贝,应该知道svn revert可以恢复任何预定要做的操作,举个例子,你不再想添加一个文件:" +msgstr "Subversion把文件恢复到未修改的状态,叫做.svn目录的原始拷贝,应该知道svn revert可以恢复任何预定要做的操作,举个例子,你不再想添加一个文件:" #. (screen) #: ../source/book.xml:2850 @@ -2914,7 +2908,7 @@ msgstr "" #: ../source/book.xml:2864 #, fuzzy msgid "svn revertITEM has exactly the same effect as deleting ITEM from your working copy and then running svn update -r BASEITEM. However, if you're reverting a file, svn revert has one very noticeable difference—it doesn't have to communicate with the repository to restore your file." -msgstr "svn revertITEM的效果与删除ITEM然后执行svn update -r BASEITEM完全一样,但是,如果你使用svn revert它不必通知版本库就可以恢复文件。" +msgstr "svn revertITEM的效果与删除ITEM然后执行svn update -r BASEITEM完全一样,但是,如果你使用svn revert它不必通知版本库就可以恢复文件。" #. (para) #: ../source/book.xml:2873 @@ -2960,7 +2954,7 @@ msgstr "解决冲突(合并别人的修改)" #: ../source/book.xml:2894 #, fuzzy msgid "We've already seen how svn status -u can predict conflicts. Suppose you run svn update and some interesting things occur:" -msgstr "我们可以使用svn status -u来预测冲突,当你运行svn update一些有趣的事情发生了:" +msgstr "我们可以使用svn status -u来预测冲突,当你运行svn update一些有趣的事情发生了:" #. (screen) #: ../source/book.xml:2897 @@ -3122,7 +3116,7 @@ msgstr "用某一个临时文件覆盖你的工作文件。" #: ../source/book.xml:3023 #, fuzzy msgid "Run svn revert <filename> to throw away all of your local changes." -msgstr "运行svn revert <filename>来放弃所有的修改。" +msgstr "运行svn revert <filename>来放弃所有的修改。" #. (para) #: ../source/book.xml:3031 @@ -3133,7 +3127,7 @@ msgstr "你也可以手工的删除这三个临时文件,但是当Subversion #: ../source/book.xml:3027 #, fuzzy msgid "Once you've resolved the conflict, you need to let Subversion know by running svn resolved. This removes the three temporary files and Subversion no longer considers the file to be in a state of conflict." -msgstr "一旦你解决了冲突,你需要通过命令svn resolved让Subversion知道,这样就会删除三个临时文件,Subversion就不会认为这个文件是在冲突状态了。" +msgstr "一旦你解决了冲突,你需要通过命令svn resolved让Subversion知道,这样就会删除三个临时文件,Subversion就不会认为这个文件是在冲突状态了。" #. (screen) #: ../source/book.xml:3034 @@ -3289,7 +3283,7 @@ msgstr "" #: ../source/book.xml:3115 #, fuzzy msgid "Now run svn resolved, and you're ready to commit your changes:" -msgstr "现在运行svn resolved,你已经准备好提交了:" +msgstr "现在运行svn resolved,你已经准备好提交了:" #. (screen) #: ../source/book.xml:3117 @@ -3307,7 +3301,7 @@ msgstr "" #: ../source/book.xml:3121 #, fuzzy msgid "Note that svn resolved, unlike most of the other commands we deal with in this chapter, requires an argument. In any case, you want to be careful and only run svn resolved when you're certain that you've fixed the conflict in your file—once the temporary files are removed, Subversion will let you commit the file even if it still contains conflict markers." -msgstr "现在我们准备好提交修改了,注意svn resolved不像我们本章学过的其他命令一样需要参数,在任何你认为解决了冲突的时候,只需要小心运行svn resolved,—一旦删除了临时文件,Subversion会让你提交这文件,即使文件中还存在冲突标记。" +msgstr "现在我们准备好提交修改了,注意svn resolved不像我们本章学过的其他命令一样需要参数,在任何你认为解决了冲突的时候,只需要小心运行svn resolved,—一旦删除了临时文件,Subversion会让你提交这文件,即使文件中还存在冲突标记。" #. (para) #: ../source/book.xml:3128 @@ -3350,7 +3344,7 @@ msgstr "" #: ../source/book.xml:3157 #, fuzzy msgid "Punting: Using svn revert" -msgstr "脚注:使用svn revert" +msgstr "脚注:使用svn revert" #. (para) #: ../source/book.xml:3159 @@ -3377,7 +3371,7 @@ msgstr "" #: ../source/book.xml:3168 #, fuzzy msgid "Note that when you revert a conflicted file, you don't have to run svn resolved." -msgstr "注意,当你恢复一个冲突的文件时,不需要再运行svn resolved。" +msgstr "注意,当你恢复一个冲突的文件时,不需要再运行svn resolved。" #. (title) #: ../source/book.xml:3175 @@ -3393,7 +3387,7 @@ msgstr "最后!你的修改结束了,你合并了服务器上所有的修改 #: ../source/book.xml:3180 #, fuzzy msgid "The svn commit command sends all of your changes to the repository. When you commit a change, you need to supply a log message, describing your change. Your log message will be attached to the new revision you create. If your log message is brief, you may wish to supply it on the command line using the (or ) option:" -msgstr "svn commit命令发送所有的修改到版本库,当你提交修改时,你需要提供一些描述修改的日志信息,你的信息会附到这个修订版本上,如果信息很简短,你可以在命令行中使用)选项:" +msgstr "svn commit命令发送所有的修改到版本库,当你提交修改时,你需要提供一些描述修改的日志信息,你的信息会附到这个修订版本上,如果信息很简短,你可以在命令行中使用)选项:" #. (screen) #: ../source/book.xml:3188 @@ -3492,13 +3486,13 @@ msgstr "" #. (para) #: ../source/book.xml:3239 msgid "(The exact wording of this error message depends on the network protocol and server you're using, but the idea is the same in all cases.)" -msgstr "" +msgstr "(错误信息的精确措辞依赖于网络协议和你使用的服务器,但对于所有的情况,其思想完全一样。)" #. (para) #: ../source/book.xml:3242 #, fuzzy msgid "At this point, you need to run svn update, deal with any merges or conflicts that result, and attempt your commit again." -msgstr "此刻,你需要运行svn update来处理所有的合并和冲突,然后再尝试提交。" +msgstr "此刻,你需要运行svn update来处理所有的合并和冲突,然后再尝试提交。" #. (para) #: ../source/book.xml:3245 @@ -3566,7 +3560,7 @@ msgstr "产生历史修改列表" #: ../source/book.xml:3315 #, fuzzy msgid "To find information about the history of a file or directory, use the svn log command. svn log will provide you with a record of who made changes to a file or directory, at what revision it changed, the time and date of that revision, and, if it was provided, the log message that accompanied the commit." -msgstr "找出一个文件或目录的历史信息,使用svn log命令,svn log将会提供你一条记录,包括:谁对文件或目录作了修改、哪个修订版本作了修改、修订版本的日期和时间、还有如果你当时提供了日志信息,也会显示。" +msgstr "找出一个文件或目录的历史信息,使用svn log命令,svn log将会提供你一条记录,包括:谁对文件或目录作了修改、哪个修订版本作了修改、修订版本的日期和时间、还有如果你当时提供了日志信息,也会显示。" #. (screen) #: ../source/book.xml:3322 @@ -3657,7 +3651,7 @@ msgstr "这样只会显示这个工作文件(或者URL) #: ../source/book.xml:3361 #, fuzzy msgid "If you want even more information about a file or directory, svn log also takes a option. Because Subversion allows you to move and copy files and directories, it is important to be able to track path changes in the filesystem, so in verbose mode, svn log will include a list of changed paths in a revision in its output:" -msgstr "如果你希望得到目录和文件更多的信息,你可以对svn log命令使用)开关,因为Subversion允许移动和复制文件和目录,所以跟踪路径修改非常重要,在详细模式下,svn log 输出中会包括一个路径修改的历史:" +msgstr "如果你希望得到目录和文件更多的信息,你可以对svn log命令使用)开关,因为Subversion允许移动和复制文件和目录,所以跟踪路径修改非常重要,在详细模式下,svn log 输出中会包括一个路径修改的历史:" #. (screen) #: ../source/book.xml:3368 @@ -3693,13 +3687,13 @@ msgstr "" #: ../source/book.xml:3381 #, fuzzy msgid "svn log also takes a () option, which suppresses the body of the log message. When combined with , it gives just the names of the changed files." -msgstr "svn log也有一个 ()选项,会禁止日志信息的主要部分,当与结合使用,仅会显示修改的文件名。" +msgstr "svn log也有一个 ()选项,会禁止日志信息的主要部分,当与结合使用,仅会显示修改的文件名。" #. (title) #: ../source/book.xml:3387 #, fuzzy msgid "Why Does svn log Give Me an Empty Response?" -msgstr "为什么svn log给我一个空的回应?" +msgstr "为什么svn log给我一个空的回应?" #. (para) #: ../source/book.xml:3390 @@ -3724,7 +3718,7 @@ msgstr "" #: ../source/book.xml:3397 #, fuzzy msgid "At first glance, this seems like an error. But recall that while revisions are repository-wide, svn log operates on a path in the repository. If you supply no path, Subversion uses the current working directory as the default target. As a result, if you're operating in a subdirectory of your working copy and attempt to see the log of a revision in which neither that directory nor any of its children was changed, Subversion will show you an empty log. If you want to see what changed in that revision, try pointing svn log directly at the top-most URL of your repository, as in svn log -r 2 http://svn.collab.net/repos/svn." -msgstr "乍一看,好像是一个错误,但是想一下修订版本号是作用在版本库整体之上的,如果你没有提供路径,svn log会使用当前目录作为默认的目标,所以,作为结果,如果你对一个本身和子目录在指定版本到现在没有做过修改的目录运行这个命令,你会得到空的日志。如果你希望察看某个版本做的修改的日志,只需要直接告诉svn log使用版本库顶级的目录作为参数,例如svn log -r 2 http://svn.collab.net/repos/svn。" +msgstr "乍一看,好像是一个错误,但是想一下修订版本号是作用在版本库整体之上的,如果你没有提供路径,svn log会使用当前目录作为默认的目标,所以,作为结果,如果你对一个本身和子目录在指定版本到现在没有做过修改的目录运行这个命令,你会得到空的日志。如果你希望察看某个版本做的修改的日志,只需要直接告诉svn log使用版本库顶级的目录作为参数,例如svn log -r 2 http://svn.collab.net/repos/svn。" #. (title) #: ../source/book.xml:3414 @@ -3735,28 +3729,31 @@ msgstr "检查历史修改的详情" #: ../source/book.xml:3416 #, fuzzy msgid "We've already seen svn diff before—it displays file differences in unified diff format; it was used to show the local modifications made to our working copy before committing to the repository." -msgstr "我们已经看过svn diff—使用标准区别文件格式显示区别,它在提交前用来显示本地工作拷贝与版本库的区别。" +msgstr "我们已经看过svn diff—使用标准区别文件格式显示区别,它在提交前用来显示本地工作拷贝与版本库的区别。" #. (para) #: ../source/book.xml:3420 #, fuzzy msgid "In fact, it turns out that there are three distinct uses of svn diff:" -msgstr "事实上,svn diff种不同的用法:" +msgstr "事实上,svn diff种不同的用法:" #. (para) #: ../source/book.xml:3425 +#, fuzzy msgid "Examining local changes" -msgstr "检查本地修改" +msgstr "比较本地修改" #. (para) #: ../source/book.xml:3428 +#, fuzzy msgid "Comparing your working copy to the repository" -msgstr "比较工作副本和版本库" +msgstr "比较工作拷贝与版本库" #. (para) #: ../source/book.xml:3431 +#, fuzzy msgid "Comparing repository to repository" -msgstr "比较版本库和版本库" +msgstr "比较版本库与版本库" #. (title) #: ../source/book.xml:3437 @@ -3767,7 +3764,7 @@ msgstr "比较本地修改" #: ../source/book.xml:3439 #, fuzzy msgid "As we've seen, invoking svn diff with no options will compare your working files to the cached pristine copies in the .svn area:" -msgstr "像我们看到的,不使用任何参数调用时,svn diff将会比较你的工作文件与缓存在.svn原始拷贝:" +msgstr "像我们看到的,不使用任何参数调用时,svn diff将会比较你的工作文件与缓存在.svn原始拷贝:" #. (screen) #: ../source/book.xml:3443 @@ -3929,7 +3926,7 @@ msgstr "" #. (para) #: ../source/book.xml:3523 msgid "Lastly, you can compare repository revisions even when you don't have a working copy on your local machine, just by including the appropriate URL on the command line:" -msgstr "" +msgstr "最后,即使你在本机没有工作拷贝,还是可以比较版本库的修订版本,只需要在命令行中输入合适的URL:" #. (screen) #: ../source/book.xml:3526 @@ -3954,13 +3951,13 @@ msgstr "浏览版本库" #: ../source/book.xml:3538 #, fuzzy msgid "Using svn cat and svn list, you can view various revisions of files and directories without changing the working revision of your working copy. In fact, you don't even need a working copy to use either one." -msgstr "通过svn catsvn list,你可以在未修改工作修订版本的情况下查看文件和目录的内容,实际上,你甚至也不需要有一个工作拷贝。" +msgstr "通过svn catsvn list,你可以在未修改工作修订版本的情况下查看文件和目录的内容,实际上,你甚至也不需要有一个工作拷贝。" #. (para) #: ../source/book.xml:3550 #, fuzzy msgid "If you want to examine an earlier version of a file and not necessarily the differences between two files, you can use svn cat:" -msgstr "如果你只是希望检查一个过去的版本而不希望察看它们的区别,使用svn cat:" +msgstr "如果你只是希望检查一个过去的版本而不希望察看它们的区别,使用svn cat:" #. (screen) #: ../source/book.xml:3553 @@ -4003,7 +4000,7 @@ msgstr "" #: ../source/book.xml:3575 #, fuzzy msgid "The svn list command shows you what files are in a repository directory without actually downloading the files to your local machine:" -msgstr "svn list可以在不下载文件到本地目录的情况下来察看目录中的文件:" +msgstr "svn list可以在不下载文件到本地目录的情况下来察看目录中的文件:" #. (screen) #: ../source/book.xml:3578 @@ -4058,7 +4055,7 @@ msgstr "这些列告诉你文件和目录最后修改的修订版本、做出修 #. (para) #: ../source/book.xml:3602 msgid "The svn list with no arguments defaults to the repository URL of the current working directory, not the local working copy directory. After all, if you wanted a listing of your local directory, you could use just plain ls (or any reasonable non-Unixy equivalent)." -msgstr "" +msgstr "没有任何参数的svn list命令缺省使用当前工作拷贝的版本库URL,而不是本地工作拷贝的目录。毕竟,如果你希望列出本地目录,你只需要使用ls(或任何合理的非UNIX等价物)。" #. (title) #: ../source/book.xml:3615 @@ -4074,7 +4071,7 @@ msgstr "看到了吧?我们说过Subversion是一个时间机器。" #: ../source/book.xml:3617 #, fuzzy msgid "In addition to all of the above commands, you can use svn update and svn checkout with the option to take an entire working copy back in time:" -msgstr "除了以上的命令,你可以使用带参数svn updatesvn checkout来使整个工作拷贝回到过去:" +msgstr "除了以上的命令,你可以使用带参数svn updatesvn checkout来使整个工作拷贝回到过去:" #. (screen) #: ../source/book.xml:3623 @@ -4096,13 +4093,13 @@ msgstr "" #: ../source/book.xml:3630 #, fuzzy msgid "Many Subversion newcomers attempt to use the above svn update example to undo committed changes, but this won't work as you can't commit changes that you obtain from backdating a working copy if the changed files have newer revisions. See for a description of how to undo a commit." -msgstr "许多Subversion新手以上的svn update实例来回退修改,但是你不能提交修改,你获得有新修订版本的过时工作拷贝也是没有用的。关于如何回退,我们可以看。" +msgstr "许多Subversion新手以上的svn update实例来回退修改,但是你不能提交修改,你获得有新修订版本的过时工作拷贝也是没有用的。关于如何回退,我们可以看。" #. (para) #: ../source/book.xml:3637 #, fuzzy msgid "Lastly, if you're building a release and wish to bundle up your files from Subversion but don't want those pesky .svn directories in the way, then you can use svn export to create a local copy of all or part of your repository sans .svn directories. As with svn update and svn checkout, you can also pass the option to svn export:" -msgstr "最后,如果你构建了一个版本,并且希望从Subversion打包文件,但是你不希望有讨厌的.svn目录,这时你可以导出版本库的一部分文件而没有.svn目录。就像svn updatesvn checkout,你也可以传递选项给svn export:" +msgstr "最后,如果你构建了一个版本,并且希望从Subversion打包文件,但是你不希望有讨厌的.svn目录,这时你可以导出版本库的一部分文件而没有.svn目录。就像svn updatesvn checkout,你也可以传递选项给svn export:" #. (screen) #: ../source/book.xml:3647 @@ -4124,6 +4121,7 @@ msgstr "" #. (title) #: ../source/book.xml:3661 +#, fuzzy msgid "Sometimes You Just Need to Clean Up" msgstr "有时你只需要清理" @@ -4137,7 +4135,7 @@ msgstr "当Subversion改变你的工作拷贝(或是svn cleanup does: it searches your working copy and runs any leftover logs, removing working copy locks in the process. If Subversion ever tells you that some part of your working copy is locked, then this is the command that you should run. Also, svn status will display an L next to locked items:" -msgstr "这就是svn cleanup所作的:它查找工作拷贝中的所有遗留的日志文件,删除进程中工作拷贝的锁。如果Subversion告诉你工作拷贝中的一部分已经锁定了,你就需要运行这个命令了。同样,svn status将会使用L 显示锁定的项目:" +msgstr "这就是svn cleanup所作的:它查找工作拷贝中的所有遗留的日志文件,删除进程中工作拷贝的锁。如果Subversion告诉你工作拷贝中的一部分已经锁定了,你就需要运行这个命令了。同样,svn status将会使用L 显示锁定的项目:" #. (screen) #: ../source/book.xml:3685 @@ -4180,7 +4178,7 @@ msgstr "高级主题" #: ../source/book.xml:3727 #, fuzzy msgid "If you've been reading this book chapter by chapter, from start to finish, you should by now have acquired enough knowledge to use the Subversion client to perform the most common version control operations. You understand how to check out a working copy from a Subversion repository. You are comfortable with submitting and receiving changes using the svn commit and svn update functions. You've probably even developed a reflex which causes you to run the svn status command almost unconsciously. For all intents and purposes, you are ready to use Subversion in a typical environment." -msgstr "如果你是从头到尾按章节阅读本书,你一定已经具备了使用Subversion客户端执行大多数不同的版本控制操作足够的知识,你理解了怎样从Subversion版本库取出一个工作拷贝,你已经熟悉了通过svn commitsvn update来提交和接收修改,你甚至也经常下意识的使用svn status,无论目的是什么,你已经可以正常使用Subversion了。" +msgstr "如果你是从头到尾按章节阅读本书,你一定已经具备了使用Subversion客户端执行大多数不同的版本控制操作足够的知识,你理解了怎样从Subversion版本库取出一个工作拷贝,你已经熟悉了通过svn commitsvn update来提交和接收修改,你甚至也经常下意识的使用svn status,无论目的是什么,你已经可以正常使用Subversion了。" #. (para) #: ../source/book.xml:3738 @@ -4208,7 +4206,7 @@ msgstr "就像你在见到的,Subv #: ../source/book.xml:3768 #, fuzzy msgid "But occasionally, you need to pinpoint a moment in time for which you don't already have a revision number memorized or handy. So besides the integer revision numbers, svn allows as input some additional forms of revision specifiers—revision keywords, and revision dates." -msgstr "但是有时候,你需要精确指定一个时间,而无法记住或者记录了某个版本,这时除了使用修订版本号码,svn允许使用其他形式来指定修订版本—修订版本关键字和修订版本日期。" +msgstr "但是有时候,你需要精确指定一个时间,而无法记住或者记录了某个版本,这时除了使用修订版本号码,svn允许使用其他形式来指定修订版本—修订版本关键字和修订版本日期。" #. (para) #: ../source/book.xml:3775 @@ -4482,7 +4480,7 @@ msgstr "作为目录和文件版本化的补充,Subversion提供了对每一 #. (para) #: ../source/book.xml:4002 msgid "Subversion has reserved the set of properties whose names begin with svn: as its own. While there are only a handful of such properties in use today, you should avoid creating custom properties for your own needs whose names begin with this prefix. Otherwise, you run the risk that a future release of Subversion will grow support for a feature or behavior driven by a property of the same name but with perhaps an entirely different interpretation." -msgstr "" +msgstr "Subversion自己保留了一组名称以svn:开头的属性,现在已经有了一些在用的属性,所以在你根据需要创建自定义属性时,需要避免这些前缀开头的名称,否则,Subversion的新版本可能会采用同名的属性来满足新的特性,而其含义可能会完全不同。" #. (para) #: ../source/book.xml:4011 @@ -4499,7 +4497,7 @@ msgstr "Subversion不关心如何使用属性,但是要求你不要使用svn subcommands, and how property modifications affect your normal Subversion workflow." -msgstr "在本小节,我们将会检验这个工具—不仅是对Subversion的用户,也对Subversion本身—对于属性的支持。你会学到与属性相关的svn子命令,和属性怎样影响你的普通Subversion工作流,希望你会感到Subversion的属性可以提高你的版本控制体验。" +msgstr "在本小节,我们将会检验这个工具—不仅是对Subversion的用户,也对Subversion本身—对于属性的支持。你会学到与属性相关的svn子命令,和属性怎样影响你的普通Subversion工作流,希望你会感到Subversion的属性可以提高你的版本控制体验。" #. (title) #: ../source/book.xml:4043 @@ -4527,7 +4525,7 @@ msgstr "现在,你可以利用这些功能使用传统文件。你可以有一 #: ../source/book.xml:4069 #, fuzzy msgid "Now consider the same website deployed in a way that makes use of Subversion's file properties. Imagine having a single image file, image123.jpg, and then properties set on that file named caption, datestamp, and even thumbnail. Now your working copy directory looks much more manageable—in fact, it looks to the casual browser like there are nothing but image files in it. But your automation scripts know better. They know that they can use svn (or better yet, they can use the Subversion language bindings—see ) to dig out the extra information that your site needs to display without having to read an index file or play path manipulation games." -msgstr "现在考虑使用Subversion文件的属性的方式来管理这个站点,想象我们有一个单独的图像文件image123.jpg,然后这个文件的属性集包括captiondatestamp甚至thumbnail。现在你的工作拷贝目录看起来更容易管理—实际上,它看起来只有图像文件,但是你的自动化脚本知道得更多,它们知道可以用svn(更好的选择是使用Subversion的语言绑定—见)来挖掘更多的站点显示需要的额外信息,而不必去阅读一个索引文件或者是玩一个路径处理的游戏。" +msgstr "现在考虑使用Subversion文件的属性的方式来管理这个站点,想象我们有一个单独的图像文件image123.jpg,然后这个文件的属性集包括captiondatestamp甚至thumbnail。现在你的工作拷贝目录看起来更容易管理—实际上,它看起来只有图像文件,但是你的自动化脚本知道得更多,它们知道可以用svn(更好的选择是使用Subversion的语言绑定—见)来挖掘更多的站点显示需要的额外信息,而不必去阅读一个索引文件或者是玩一个路径处理的游戏。" #. (para) #: ../source/book.xml:4083 @@ -4550,13 +4548,13 @@ msgstr "对于Subversion属性的所有功能—或者更准确的讲,对于 #: ../source/book.xml:4104 #, fuzzy msgid "Trying to locate a custom revision property generally involves performing a linear walk across all the revisions of the repository, asking of each revision, \"Do you have the property I'm looking for?\" Trying to find a custom versioned property is painful, too, and often involves a recursive svn propget across an entire working copy. In your situation, that might not be as bad as a linear walk across all revisions. But it certainly leaves much to be desired in terms of both performance and likelihood of success, especially if the scope of your search would require a working copy from the root of your repository." -msgstr "为了定位一个自定义属性通常要线形访问版本库的所有修订版本,向每个修订版本询问,“你们有我找的属性吗?”尝试查找自定义版本化属性也是同样的痛苦,通常需要在整个工作拷贝递归调用svn propget。在你的情况下,可能不会比遍历所有修订版本差。但也在性能和成功可能性里留下了许多悬念,特别是当你需要从版本库的根开始搜索时。" +msgstr "为了定位一个自定义属性通常要线形访问版本库的所有修订版本,向每个修订版本询问,“你们有我找的属性吗?”尝试查找自定义版本化属性也是同样的痛苦,通常需要在整个工作拷贝递归调用svn propget。在你的情况下,可能不会比遍历所有修订版本差。但也在性能和成功可能性里留下了许多悬念,特别是当你需要从版本库的根开始搜索时。" #. (para) #: ../source/book.xml:4116 #, fuzzy msgid "For this reason, you might choose—especially in the revision property use-case—to simply add your metadata to the revision's log message, using some policy-driven (and perhaps programmatically-enforced) formatting that is designed to be quickly parsed from the output of svn log. It is quite common to see in Subversion log messages the likes of:" -msgstr "因为这个原因,你会选择—特别是在修订版本属性用例—简单的添加你的元数据到修订版本日志信息,使用一些政策驱动(并且是编程强制的)且可以通过svn log快速解析格式。如下的Subversion日志信息会很常见:" +msgstr "因为这个原因,你会选择—特别是在修订版本属性用例—简单的添加你的元数据到修订版本日志信息,使用一些政策驱动(并且是编程强制的)且可以通过svn log快速解析格式。如下的Subversion日志信息会很常见:" #. (programlisting) #: ../source/book.xml:4123 @@ -4590,7 +4588,7 @@ msgstr "操作属性" #: ../source/book.xml:4141 #, fuzzy msgid "The svn command affords a few ways to add or modify file and directory properties. For properties with short, human-readable values, perhaps the simplest way to add a new property is to specify the property name and value on the command line of the propset subcommand." -msgstr "svn命令提供一些方法来添加和修改文件或目录的属性,对于短的,可读的属性,最简单的添加方法是在propset子命令里指定正确的名称和值。" +msgstr "svn命令提供一些方法来添加和修改文件或目录的属性,对于短的,可读的属性,最简单的添加方法是在propset子命令里指定正确的名称和值。" #. (screen) #: ../source/book.xml:4147 @@ -4610,7 +4608,7 @@ msgstr "" #: ../source/book.xml:4152 #, fuzzy msgid "But we've been touting the flexibility that Subversion offers for your property values. And if you are planning to have a multi-line textual, or even binary, property value, you probably do not want to supply that value on the command line. So the propset subcommand takes a option for specifying the name of a file which contains the new property value." -msgstr "但是我们已经吹捧了Subversion提供的属性功能的灵活性,如果你计划使用多行文本,或者是二进制属性值,你可能不会希望通过命令行提供这些值,所以propset子命令提供的选项可以指定包含属性值的文件。" +msgstr "但是我们已经吹捧了Subversion提供的属性功能的灵活性,如果你计划使用多行文本,或者是二进制属性值,你可能不会希望通过命令行提供这些值,所以propset子命令提供的选项可以指定包含属性值的文件。" #. (screen) #: ../source/book.xml:4159 @@ -4641,7 +4639,7 @@ msgstr "对于属性名称也有一些限制,属性名必须以一个字符、 #: ../source/book.xml:4173 #, fuzzy msgid "In addition to the propset command, the svn program supplies the propedit command. This command uses the configured editor program (see ) to add or modify properties. When you run the command, svn invokes your editor program on a temporary file that contains the current value of the property (or which is empty, if you are adding a new property). Then, you just modify that value in your editor program until it represents the new value you wish to store for the property, save the temporary file, and then exit the editor program. If Subversion detects that you've actually changed the existing value of the property, it will accept that as the new property value. If you exit your editor without making any changes, no property modification will occur:" -msgstr "作为propset命令的补充,svn提供了一个propedit命令,这个命令使用定制的编辑器程序(见)来添加和修改属性。当你运行这个命令,svn调用你的编辑器程序打开一个临时文件,文件中保存当前的属性值(或者是空文件,如果你正在添加新的属性)。然后你只需要修改为你想要的值,保存临时文件,然后离开编辑器程序。如果Subversion发现你已经修改了属性值,就会接受新值,如果你未作任何修改而离开,不会产生属性修改操作。" +msgstr "作为propset命令的补充,svn提供了一个propedit命令,这个命令使用定制的编辑器程序(见)来添加和修改属性。当你运行这个命令,svn调用你的编辑器程序打开一个临时文件,文件中保存当前的属性值(或者是空文件,如果你正在添加新的属性)。然后你只需要修改为你想要的值,保存临时文件,然后离开编辑器程序。如果Subversion发现你已经修改了属性值,就会接受新值,如果你未作任何修改而离开,不会产生属性修改操作。" #. (screen) #: ../source/book.xml:4188 @@ -4661,7 +4659,7 @@ msgstr "" #: ../source/book.xml:4193 #, fuzzy msgid "We should note that, as with other svn subcommands, those related to properties can act on multiple paths at once. This enables you to modify properties on whole sets of files with a single command. For example, we could have done:" -msgstr "我们也应该注意导,像其它svn子命令一样,这些关联的属性可以一次添加到多个路径上,这样就可以通过一个命令修改一组文件的属性。举个例子,我们可以:" +msgstr "我们也应该注意导,像其它svn子命令一样,这些关联的属性可以一次添加到多个路径上,这样就可以通过一个命令修改一组文件的属性。举个例子,我们可以:" #. (screen) #: ../source/book.xml:4198 @@ -4687,7 +4685,7 @@ msgstr "" #: ../source/book.xml:4206 #, fuzzy msgid "All of this property adding and editing isn't really very useful if you can't easily get the stored property value. So the svn program supplies two subcommands for displaying the names and values of properties stored on files and directories. The svn proplist command will list the names of properties that exist on a path. Once you know the names of the properties on the node, you can request their values individually using svn propget. This command will, given a property name and a path (or set of paths), print the value of the property to the standard output stream." -msgstr "如果不能方便的得到存储的属性值,那么属性的添加和编辑操作也不会很容易,所以svn提供了两个子命令来显示文件和目录存储的属性名和值。svn proplist命令会列出路径上存在的所有属性名称,一旦你知道了某个节点的属性名称,你可以用svn propget获取它的值,这个命令获取给定的路径(或者是一组路径)和属性名称,打印这个属性的值到标准输出。" +msgstr "如果不能方便的得到存储的属性值,那么属性的添加和编辑操作也不会很容易,所以svn提供了两个子命令来显示文件和目录存储的属性名和值。svn proplist命令会列出路径上存在的所有属性名称,一旦你知道了某个节点的属性名称,你可以用svn propget获取它的值,这个命令获取给定的路径(或者是一组路径)和属性名称,打印这个属性的值到标准输出。" #. (screen) #: ../source/book.xml:4217 @@ -4713,7 +4711,7 @@ msgstr "" #: ../source/book.xml:4225 #, fuzzy msgid "There's even a variation of the proplist command that will list both the name and value of all of the properties. Simply supply the () option." -msgstr "还有一个proplist变种命令会列出所有属性的名称和值,只需要设置)选项。" +msgstr "还有一个proplist变种命令会列出所有属性的名称和值,只需要设置)选项。" #. (screen) #: ../source/book.xml:4229 @@ -4755,7 +4753,7 @@ msgstr "" #: ../source/book.xml:4245 #, fuzzy msgid "The last property-related subcommand is propdel. Since Subversion allows you to store properties with empty values, you can't remove a property altogether using propedit or propset. For example, this command will not yield the desired effect:" -msgstr "最后一个与属性相关的子命令是propdel,因为Subversion允许属性值为空,所有不能用propedit或者propset命令删除一个属性。举个例子,这个命令不会产生预期的效果:" +msgstr "最后一个与属性相关的子命令是propdel,因为Subversion允许属性值为空,所有不能用propedit或者propset命令删除一个属性。举个例子,这个命令不会产生预期的效果:" #. (screen) #: ../source/book.xml:4251 @@ -4783,7 +4781,7 @@ msgstr "" #: ../source/book.xml:4260 #, fuzzy msgid "You need to use the propdel subcommand to delete properties altogether. The syntax is similar to the other property commands:" -msgstr "你需要用propdel来删除属性,语法与其它与属性命令相似:" +msgstr "你需要用propdel来删除属性,语法与其它与属性命令相似:" #. (screen) #: ../source/book.xml:4263 @@ -4814,7 +4812,7 @@ msgstr "修正提交日志信息的拼写错误,文法错误和简单 #: ../source/book.xml:4271 #, fuzzy msgid "Remember those unversioned revision properties? You can modify those, too, using the same svn subcommands that we just described. Simply add the command-line parameter, and specify the revision whose property you wish to modify. Since revisions are global, you don't need to specify a target path to these property-related commands so long as you are positioned in a working copy of the repository whose revision property you wish to modify. Otherwise, you can simply provide the URL of any path in the repository of interest (including the repository's root URL). For example, you might want to replace the commit log message of an existing revision. If your current working directory is part of a working copy of your repository, you can simply run the svn propset command with no target path:" -msgstr "还记的这些未版本化的修订版本属性?你也可以使用svn子命令修改这些属性。只需要添加命令参数,说明希望修改属性的修订版本。因为修订版本是全局的,你不需要指定一个路径,只要你已经位于你希望修改属性的工作拷贝路径,或者,你也可以提供版本库的URL的任何路径(也包括版本苦的根URL)。例如,如果你当前的工作路径是一个版本库工作拷贝的一部分,你可以简单的运行没有目标路径的svn propset命令:" +msgstr "还记的这些未版本化的修订版本属性?你也可以使用svn子命令修改这些属性。只需要添加命令参数,说明希望修改属性的修订版本。因为修订版本是全局的,你不需要指定一个路径,只要你已经位于你希望修改属性的工作拷贝路径,或者,你也可以提供版本库的URL的任何路径(也包括版本苦的根URL)。例如,如果你当前的工作路径是一个版本库工作拷贝的一部分,你可以简单的运行没有目标路径的svn propset命令:" #. (screen) #: ../source/book.xml:4291 @@ -4861,7 +4859,7 @@ msgstr "注意,修改这些未版本化的属性的能力一定要明确的添 #: ../source/book.xml:4314 #, fuzzy msgid "Users should, where possible, use svn propedit instead of svn propset. While the end result of the commands is identical, the former will allow them to see the current value of the property they are about to change, which helps them to verify that they are, in fact, making the change they think they are making. This is especially true when modifying unversioned revision properties. Also, it is significantly easier to modify multiline property values in a text editor than at the command line." -msgstr "用户必须在可能的情况下使用svn propedit,而不是svn propset。然而这两个命令的结果是相同的,前一个会允许他们查看修改以前的内容,可以帮助用户验证,实际上,作出他们所期望的修改,当修改未版本化修订版本属性时,这一点特别需要。另外,这个命令也可以通过文本编辑器或命令行轻松的修改多行属性。" +msgstr "用户必须在可能的情况下使用svn propedit,而不是svn propset。然而这两个命令的结果是相同的,前一个会允许他们查看修改以前的内容,可以帮助用户验证,实际上,作出他们所期望的修改,当修改未版本化修订版本属性时,这一点特别需要。另外,这个命令也可以通过文本编辑器或命令行轻松的修改多行属性。" #. (title) #: ../source/book.xml:4329 @@ -4872,13 +4870,13 @@ msgstr "属性和 Subversion 工作流程" #: ../source/book.xml:4331 #, fuzzy msgid "Now that you are familiar with all of the property-related svn subcommands, let's see how property modifications affect the usual Subversion workflow. As we mentioned earlier, file and directory properties are versioned, just like your file contents. As a result, Subversion provides the same opportunities for merging—cleanly or with conflicts—someone else's modifications into your own." -msgstr "现在你已经熟悉了所有与属性相关的svn子命令,让我们看看属性修改如何影响Subversion的工作流。我们前面提到过,文件和目录的属性是版本化的,这一点类似于版本化的文件内容。后果之一,就是Subversion具有了同样的机制来合并—用干净或者冲突的方式—其他人的修改应用到你的修改。" +msgstr "现在你已经熟悉了所有与属性相关的svn子命令,让我们看看属性修改如何影响Subversion的工作流。我们前面提到过,文件和目录的属性是版本化的,这一点类似于版本化的文件内容。后果之一,就是Subversion具有了同样的机制来合并—用干净或者冲突的方式—其他人的修改应用到你的修改。" #. (para) #: ../source/book.xml:4339 #, fuzzy msgid "And as with file contents, your property changes are local modifications, only made permanent when you commit them to the repository with svn commit. Your property changes can be easily unmade, too—the svn revert command will restore your files and directories to their un-edited states—contents, properties, and all. Also, you can receive interesting information about the state of your file and directory properties by using the svn status and svn diff commands." -msgstr "就像文件内容,你的属性修改是本地修改,只有使用svn commit命令提交后才会保存到版本库中,属性修改也可以很容易的取消—svn revert命令会恢复你的文件和目录为编辑前状态,包括内容、属性和其它的信息。另外,你可以使用svn statussvn diff接受感兴趣的文件和目录属性的状态信息。" +msgstr "就像文件内容,你的属性修改是本地修改,只有使用svn commit命令提交后才会保存到版本库中,属性修改也可以很容易的取消—svn revert命令会恢复你的文件和目录为编辑前状态,包括内容、属性和其它的信息。另外,你可以使用svn statussvn diff接受感兴趣的文件和目录属性的状态信息。" #. (screen) #: ../source/book.xml:4349 @@ -4910,7 +4908,7 @@ msgstr "" #: ../source/book.xml:4360 #, fuzzy msgid "Notice how the status subcommand displays M in the second column instead of the first. That is because we have modified the properties on calc/button.c, but not its textual contents. Had we changed both, we would have seen M in the first column, too (see )." -msgstr "注意status子命令显示的M在第二列而不是在第一列,这是因为我们修改了calc/button.c的属性,而不是它的文本内容,如果我们都修改了,我们也会看到M出现在第一列(见)。" +msgstr "注意status子命令显示的M在第二列而不是在第一列,这是因为我们修改了calc/button.c的属性,而不是它的文本内容,如果我们都修改了,我们也会看到M出现在第一列(见)。" #. (title) #: ../source/book.xml:4368 @@ -4944,7 +4942,7 @@ msgstr "" #: ../source/book.xml:4383 #, fuzzy msgid "Subversion will also create, in the same directory as the conflicted object, a file with a .prej extension which contains the details of the conflict. You should examine the contents of this file so you can decide how to resolve the conflict. Until the conflict is resolved, you will see a C in the second column of svn status output for that object, and attempts to commit your local modifications will fail." -msgstr "Subversion也会在冲突资源的同一个目录创建一个.prej扩展名的文件,保存冲突的细节。你一定要检查这个文件的内容来决定如何解决冲突,在你解决冲突之前,你会在使用svn status时看到这个资源的输出的第二列是一个C,提交本地修改的尝试会失败。" +msgstr "Subversion也会在冲突资源的同一个目录创建一个.prej扩展名的文件,保存冲突的细节。你一定要检查这个文件的内容来决定如何解决冲突,在你解决冲突之前,你会在使用svn status时看到这个资源的输出的第二列是一个C,提交本地修改的尝试会失败。" #. (screen) #: ../source/book.xml:4392 @@ -4970,13 +4968,13 @@ msgstr "" #: ../source/book.xml:4400 #, fuzzy msgid "To resolve property conflicts, simply ensure that the conflicting properties contain the values that they should, and then use the svn resolved command to alert Subversion that you have manually resolved the problem." -msgstr "为了解决属性冲突,只需要确定冲突的属性保存了它们应该的值,然后使用svn resolved命令告诉Subversion你已经手工解决了问题。" +msgstr "为了解决属性冲突,只需要确定冲突的属性保存了它们应该的值,然后使用svn resolved命令告诉Subversion你已经手工解决了问题。" #. (para) #: ../source/book.xml:4406 #, fuzzy msgid "You might also have noticed the non-standard way that Subversion currently displays property differences. You can still run svn diff and redirect the output to create a usable patch file. The patch program will ignore property patches—as a rule, it ignores any noise it can't understand. This does, unfortunately, mean that to fully apply a patch generated by svn diff, any property modifications will need to be applied by hand." -msgstr "你也许已经注意到了Subversion在显示属性时的非标准方式。你还可以运行svn diff并且重定向输出来产生一个有用的补丁文件,patch程序会忽略属性补丁—作为规则,它会忽略任何不理解的噪音。很遗憾,这意味着完全应用svn diff产生的补丁时,任何属性修改必须手工实施。" +msgstr "你也许已经注意到了Subversion在显示属性时的非标准方式。你还可以运行svn diff并且重定向输出来产生一个有用的补丁文件,patch程序会忽略属性补丁—作为规则,它会忽略任何不理解的噪音。很遗憾,这意味着完全应用svn diff产生的补丁时,任何属性修改必须手工实施。" #. (title) #: ../source/book.xml:4419 @@ -4993,7 +4991,7 @@ msgstr "属性是Subversion一个强大的特性,成为本章和其它章讨 #: ../source/book.xml:4433 #, fuzzy msgid "Whenever you introduce a file to version control using the svn add or svn import commands, Subversion tries to assist by setting some common file properties automatically. First, on operating systems whose filesystems support an execute permission bit, Subversion will automatically set the svn:executable property on newly added or imported files whose execute bit is enabled. (See for more about this property.) Secondly, it runs a very basic heuristic to determine if that file contains human-readable content. If not, Subversion will automatically set the svn:mime-type property on that file to application/octet-stream (the generic this is a collection of bytes MIME type). Of course, if Subversion guesses incorrectly, or if you wish to set the svn:mime-type property to something more precise—perhaps image/png or application/x-shockwave-flash—you can always remove or edit that property. (For more on Subversion's use of MIME types, see .)" -msgstr "当你使用svn add或是svn import准备加入一个版本控制的文件时,Subversion会自动运行一个基本探测来检查文件是包含了可读还是不可读的内容,首先,在支持执行允许位的操作系统,Subversion会自动会为设置执行位的文件设置svn:executable属性(更多信息见)。第二,它会运行非常基础的启发式检查来检测文件是否可读,如果不是,Subversion会自动设置文件的svn:mime-type属性为application/octet-stream(原始的一组字节的MIME类型)。如果Subversion猜测错误,或者是你希望使用svn:mime-type属性更精确的设置—或许是image/png或者application/x-shockwave-flash—你可以一直删除或编辑那个属性(关于Subversion使用MIME类型的更多信息,见。)。" +msgstr "当你使用svn add或是svn import准备加入一个版本控制的文件时,Subversion会自动运行一个基本探测来检查文件是包含了可读还是不可读的内容,首先,在支持执行允许位的操作系统,Subversion会自动会为设置执行位的文件设置svn:executable属性(更多信息见)。第二,它会运行非常基础的启发式检查来检测文件是否可读,如果不是,Subversion会自动设置文件的svn:mime-type属性为application/octet-stream(原始的一组字节的MIME类型)。如果Subversion猜测错误,或者是你希望使用svn:mime-type属性更精确的设置—或许是image/png或者application/x-shockwave-flash—你可以一直删除或编辑那个属性(关于Subversion使用MIME类型的更多信息,见。)。" #. (para) #: ../source/book.xml:4453 @@ -5136,7 +5134,7 @@ msgstr "对外来EOL标志的敏感会让在多种操作系统分享文件的人 #: ../source/book.xml:4667 #, fuzzy msgid "But in practice, many common tools either fail to properly read a file with foreign EOL markers, or they convert the file's line endings to the native style when the file is saved. If the former is true for a developer, he has to use an external conversion utility (such as dos2unix or its companion, unix2dos) to prepare the file for editing. The latter case requires no extra preparation. But both cases result in a file that differs from the original quite literally on every line! Prior to committing his changes, the user has two choices. Either he can use a conversion utility to restore the modified file to the same line ending style that it was in before his edits were made. Or, he can simply commit the file—new EOL markers and all." -msgstr "但实践中,许多常用的工具不会正确的读取外来的EOL标志,或者只是在保存文件时将文件的行结束符转化为本地的样式,如果是前者,他需要一个外部的转化工具(如dos2unix,或是他的伴侣unix2dos)来准备需要编辑的文件。后一种情况不需要额外的准备工作,两种方法都会造成文件会与原来的文件在每一行上都不一样!在提交之前,用户有两个选择,或者选择用一个转化工具恢复文件的行结束样式,或者是简单的提交文件—包含新的EOL标志。" +msgstr "但实践中,许多常用的工具不会正确的读取外来的EOL标志,或者只是在保存文件时将文件的行结束符转化为本地的样式,如果是前者,他需要一个外部的转化工具(如dos2unix,或是他的伴侣unix2dos)来准备需要编辑的文件。后一种情况不需要额外的准备工作,两种方法都会造成文件会与原来的文件在每一行上都不一样!在提交之前,用户有两个选择,或者选择用一个转化工具恢复文件的行结束样式,或者是简单的提交文件—包含新的EOL标志。" #. (para) #: ../source/book.xml:4682 @@ -5214,7 +5212,7 @@ msgstr "在任何工作拷贝,将版本化文件和目录与没有也不准备 #: ../source/book.xml:4772 #, fuzzy msgid "It's ludicrous to expect Subversion working copies to be somehow impervious to this kind of clutter and impurity. In fact, Subversion counts it as a feature that its working copies are just typical directories, just like unversioned trees. But these not-to-be-versioned files and directories can cause some annoyance for Subversion users. For example, because the svn add and svn import commands act recursively by default, and don't know which files in a given tree you do and don't wish to version, it's easy to accidentally add stuff to version control that you didn't mean to. And because svn status reports, by default, every item of interest in a working copy—including unversioned files and directories—its output can get quite noisy where many of these things exist." -msgstr "期望让Subversion的工作拷贝摆脱混乱保持干净是可笑的,实际上Subversion将工作拷贝是普通目录作为它的一项特性。但是这些没有版本化的文件和目录会给Subversion用户带来一些烦恼,例如,因为svn addsvn import命令都是会递归执行的,并不知道哪些文件你不希望版本化,很容易意外的添加一些文件。因为svn status会报告工作拷贝中包括未版本化文件和目录的信息,如果这种文件很多,它的输出会变得非常嘈杂。" +msgstr "期望让Subversion的工作拷贝摆脱混乱保持干净是可笑的,实际上Subversion将工作拷贝是普通目录作为它的一项特性。但是这些没有版本化的文件和目录会给Subversion用户带来一些烦恼,例如,因为svn addsvn import命令都是会递归执行的,并不知道哪些文件你不希望版本化,很容易意外的添加一些文件。因为svn status会报告工作拷贝中包括未版本化文件和目录的信息,如果这种文件很多,它的输出会变得非常嘈杂。" #. (para) #: ../source/book.xml:4787 @@ -5225,7 +5223,7 @@ msgstr "所以Subversion提供了两种方法让你指明哪些文件可以被 #: ../source/book.xml:4798 #, fuzzy msgid "The Subversion runtime configuration system provides an option, global-ignores, whose value is a whitespace-delimited collection of file patterns (also known as globs). The Subversion client checks these patterns against the names of the files which are candidates for addition to version control, as well as to unversioned files which the svn status command notices. If any file's name matches one of the patterns, Subversion will basically act as if the file didn't exist at all. This is really useful for the kinds of files that you almost never want to version, such as editor backup files like Emacs' *~ and .*~ files." -msgstr "Subversion运行配置系统提供一个global-ignores选项,其中的值是空格分开的文件名模式(或glob)。这些模式会应用到可以添加到版本控制的候选者,也就是svn status显示出来的未版本化文件。如果文件名与其中的某个模式匹配,Subversion会当这个文件不存在。这个文件模式最好是全局不期望版本化的模式,例如编辑器Emacs的备份文件*~.*~。" +msgstr "Subversion运行配置系统提供一个global-ignores选项,其中的值是空格分开的文件名模式(或glob)。这些模式会应用到可以添加到版本控制的候选者,也就是svn status显示出来的未版本化文件。如果文件名与其中的某个模式匹配,Subversion会当这个文件不存在。这个文件模式最好是全局不期望版本化的模式,例如编辑器Emacs的备份文件*~.*~。" #. (para) #: ../source/book.xml:4811 @@ -5247,7 +5245,7 @@ msgstr "CVS 用户的忽略模式" #: ../source/book.xml:4844 #, fuzzy msgid "The Subversion svn:ignore property is very similar in syntax and function to the CVS .cvsignore file. In fact, if you are migrating a CVS working copy to Subversion, you can directly migrate the ignore patterns by using the .cvsignore file as input file to the svn propset command:" -msgstr "Subversion的svn:ignore属性与CVS的.cvsignore文件的语法和功能非常类似,实际上,如果你移植一个CVS的工作拷贝到Subversion,你可以直接使用.cvsignore作为svn propset输入文件参数:" +msgstr "Subversion的svn:ignore属性与CVS的.cvsignore文件的语法和功能非常类似,实际上,如果你移植一个CVS的工作拷贝到Subversion,你可以直接使用.cvsignore作为svn propset输入文件参数:" #. (screen) #: ../source/book.xml:4851 @@ -5279,7 +5277,7 @@ msgstr "全局忽略模式只是一种个人喜好,可能更接近于用户的 #: ../source/book.xml:4870 #, fuzzy msgid "Say you have the following output from svn status:" -msgstr "假定你的svn status有如下输出:" +msgstr "假定你的svn status有如下输出:" #. (screen) #: ../source/book.xml:4872 @@ -5314,7 +5312,7 @@ msgstr "这不是编译系统的基本功能吗?" #: ../source/book.xml:4882 #, fuzzy msgid "In this example, you have made some property modifications to button.c, but in your working copy you also have some unversioned files: the latest calculator program that you've compiled from your source code, a source file named data.c, and a set of debugging output log files. Now, you know that your build system always results in the calculator program being generated. And you know that your test suite always leaves those debugging log files lying around. These facts are true for all working copies of this project, not just your own. And you know that you aren't interested in seeing those things every time you run svn status, and pretty sure that nobody else is interested in them either. So you use svn propedit svn:ignore calc to add some ignore patterns to the calc directory. For example, you might add this as the new value of the svn:ignore property:" -msgstr "在这个例子里,你对button.c文件作了一些属性修改,但是你的工作拷贝也有一些未版本化的文件:你从源代码编译的最新计算器程序,一系列调试输出日志文件,现在你知道你的编译系统一直会编译生成计算器程序。 而且你知道你的测试组件总是会留下这些调试日志,这对所有的工作拷贝都是一样的,不仅仅是你的。你也知道你不会有兴趣在svn status命令中显示这些信息,所以使用svn propedit svn:ignore calc来为calc目录增加一些忽略模式,举个例子,你或许会添加如下的值作为svn:ignore的属性:" +msgstr "在这个例子里,你对button.c文件作了一些属性修改,但是你的工作拷贝也有一些未版本化的文件:你从源代码编译的最新计算器程序,一系列调试输出日志文件,现在你知道你的编译系统一直会编译生成计算器程序。 而且你知道你的测试组件总是会留下这些调试日志,这对所有的工作拷贝都是一样的,不仅仅是你的。你也知道你不会有兴趣在svn status命令中显示这些信息,所以使用svn propedit svn:ignore calc来为calc目录增加一些忽略模式,举个例子,你或许会添加如下的值作为svn:ignore的属性:" #. (programlisting) #: ../source/book.xml:4901 @@ -5332,7 +5330,7 @@ msgstr "" #: ../source/book.xml:4905 #, fuzzy msgid "After you've added this property, you will now have a local property modification on the calc directory. But notice what else is different about your svn status output:" -msgstr "当你添加完这些属性,你会在calc目录有一个本地修改,但是注意你的svn status输出有什么其他的不同:" +msgstr "当你添加完这些属性,你会在calc目录有一个本地修改,但是注意你的svn status输出有什么其他的不同:" #. (screen) #: ../source/book.xml:4909 @@ -5391,7 +5389,7 @@ msgstr "" #: ../source/book.xml:4938 #, fuzzy msgid "As mentioned earlier, the list of file patterns to ignore is also used by svn add and svn import. Both of these operations involve asking Subversion to begin managing some set of files and directories. Rather than force the user to pick and choose which files in a tree she wishes to start versioning, Subversion uses the ignore patterns—both the global and the per-directory lists—to determine which files should not be swept into the version control system as part of a larger recursive addition or import operation. And here again, you can use the option to tell Subversion ignore its ignores list and operate on all the files and directories present." -msgstr "我们在前面提到过,svn addsvn import也会使用这个忽略模式列表,这两个操作都包括了询问Subversion来开始管理一组文件和目录。比强制用户挑拣目录树中那个文件要纳入版本控制的方式更好,Subversion使用忽略模式来检测那个文件不应该在大的迭代添加和导入操作中进入版本控制系统。再次说明,操作Subversion文件和目录时你可以使用选项忽略这个忽略列表。" +msgstr "我们在前面提到过,svn addsvn import也会使用这个忽略模式列表,这两个操作都包括了询问Subversion来开始管理一组文件和目录。比强制用户挑拣目录树中那个文件要纳入版本控制的方式更好,Subversion使用忽略模式来检测那个文件不应该在大的迭代添加和导入操作中进入版本控制系统。再次说明,操作Subversion文件和目录时你可以使用选项忽略这个忽略列表。" #. (title) #: ../source/book.xml:4957 @@ -5479,7 +5477,7 @@ msgstr "这个关键字是其他关键字一个压缩组合,它看起来就像 #. (para) #: ../source/book.xml:5059 msgid "Several of the previous descriptions use the phrase last known or similar wording. Keep in mind that keyword expansion is a client-side operation, and your client only knows about changes which have occurred in the repository when you update your working copy to include those changes. If you never update your working copy, your keywords will never expand to different values even if those versioned files are being changed regularly in the repository." -msgstr "" +msgstr "前面的一些描述使用了类似最后已知的短语,请记住关键字扩展是客户端操作,你的客户端只知道在你更新工作拷贝时版本库发生的修改,如果你从不更新工作拷贝,即使文件在版本库里有规律的修改,这些关键字也不会扩展为不同的值。" #. (para) #: ../source/book.xml:5073 @@ -5594,7 +5592,7 @@ msgstr "新用户经常为如何使用$Rev$ #: ../source/book.xml:5154 #, fuzzy msgid "To do this, you need external processing. Subversion ships with a tool called svnversion which was designed for just this purpose. svnversion crawls your working copy and generates as output the revision(s) it finds. You can use this program, plus some additional tooling, to embed that revision information into your files. For more information on svnversion, see ." -msgstr "为此你需要外置处理,Subversion中有一个工具svnversion就是为此设计。svnversion遍历你的工作拷贝,然后输出它发现的修订版本,你可以使用这个程序,外加一些工具,将修订版本信息嵌入到你的文件。关于svnversion的更多信息,见。" +msgstr "为此你需要外置处理,Subversion中有一个工具svnversion就是为此设计。svnversion遍历你的工作拷贝,然后输出它发现的修订版本,你可以使用这个程序,外加一些工具,将修订版本信息嵌入到你的文件。关于svnversion的更多信息,见。" #. (para) #: ../source/book.xml:5163 @@ -5769,7 +5767,7 @@ msgstr "在本小节,和几乎本书的每一个地方lockworking copy locks, used internally by Subversion to prevent clashes between multiple Subversion clients operating on the same working copy. This is the sort of lock indicated by an L in the third column of svn status output, and removed by the svn cleanup command, as described in ." -msgstr "第一种是工作拷贝锁,Subversion内部用来防止不同客户端同时操作同一份工作拷贝的锁,这种锁使用svn status输出中第三列出现的L表示,可以使用svn cleanup删除,有介绍。" +msgstr "第一种是工作拷贝锁,Subversion内部用来防止不同客户端同时操作同一份工作拷贝的锁,这种锁使用svn status输出中第三列出现的L表示,可以使用svn cleanup删除,有介绍。" #. (para) #: ../source/book.xml:5380 @@ -5795,7 +5793,7 @@ msgstr "在Subversion的版本库,一个是一份元 #: ../source/book.xml:5412 #, fuzzy msgid "To demonstrate lock creation, let's refer back to our example of multiple graphic designers working with on the same binary image files. Harry has decided to change a JPEG image. To prevent other people from committing changes to the file while he is modifying it (as well as alerting them that he is about to change it), he locks the file in the repository using the svn lock command." -msgstr "为了描述锁的产生,我们回到前面那个关于多个图形设计师共同工作的例子,Harry决定修改一个JPEG图像,为了防止其他用户此时提交这个文件的修改,他使用svn lock命令锁定了版本库中的这个文件:" +msgstr "为了描述锁的产生,我们回到前面那个关于多个图形设计师共同工作的例子,Harry决定修改一个JPEG图像,为了防止其他用户此时提交这个文件的修改,他使用svn lock命令锁定了版本库中的这个文件:" #. (screen) #: ../source/book.xml:5419 @@ -5815,19 +5813,19 @@ msgstr "" #: ../source/book.xml:5424 #, fuzzy msgid "There are a number of new things demonstrated in the previous example. First, notice that Harry passed the option to svn lock. Similar to svn commit, the svn lock command can take comments (either via or ) to describe the reason for locking the file. Unlike svn commit, however, svn lock will not demand a message by launching your preferred text editor. Lock comments are optional, but still recommended to aid communication." -msgstr "前一个例子描述了许多新事物,第一,注意Harry在svn lock中使用了选项,类似于svn commitsvn lock命令可以有描述锁定原因的注释(通过)。然而不像svn commitsvn lock不会自动强制启动你喜欢的编辑器,锁定注释是可选的,但是为了方便交流我们还是推荐使用。" +msgstr "前一个例子描述了许多新事物,第一,注意Harry在svn lock中使用了选项,类似于svn commitsvn lock命令可以有描述锁定原因的注释(通过)。然而不像svn commitsvn lock不会自动强制启动你喜欢的编辑器,锁定注释是可选的,但是为了方便交流我们还是推荐使用。" #. (para) #: ../source/book.xml:5435 #, fuzzy msgid "Secondly, the lock attempt succeeded. This means that the file wasn't already locked, and that Harry had the latest version of the file. If Harry's working copy of the file had been out-of-date, the repository would have rejected the request, forcing Harry to svn update and reattempt the locking command. The locking command would also have failed if the file already been locked by someone else." -msgstr "第二,锁定成功了,这意味着文件没有被别人锁定,Harry的文件是最新的版本。如果Harry的工作拷贝文件不是最新的,版本库会拒绝请求,强制Harry执行svn update并重新运行锁定命令,同样,如果此文件已经被别的用户锁定了,锁定命令也会失败。" +msgstr "第二,锁定成功了,这意味着文件没有被别人锁定,Harry的文件是最新的版本。如果Harry的工作拷贝文件不是最新的,版本库会拒绝请求,强制Harry执行svn update并重新运行锁定命令,同样,如果此文件已经被别的用户锁定了,锁定命令也会失败。" #. (para) #: ../source/book.xml:5443 #, fuzzy msgid "As you can see, the svn lock command prints confirmation of the successful lock. At this point, the fact that the file is locked becomes apparent in the output of the svn status and svn info reporting subcommands." -msgstr "就像你看到的,svn lock打印了锁定成功的确认信息。此时,通过svn statussvn info的输出我们可以看到文件已经锁定。" +msgstr "就像你看到的,svn lock打印了锁定成功的确认信息。此时,通过svn statussvn info的输出我们可以看到文件已经锁定。" #. (screen) #: ../source/book.xml:5448 @@ -5889,7 +5887,7 @@ msgstr "" #: ../source/book.xml:5474 #, fuzzy msgid "That the svn info command, which does not contact the repository when run against working copy paths, can display the lock token reveals an important fact about lock tokens—that they are cached in the working copy. The presence of the lock token is critical. It gives the working copy authorization to make use of the lock later on. Also, the svn status command shows a K next to the file (short for locKed), indicating that the lock token is present." -msgstr "当对工作拷贝路径应用svn info命令时,可以显示锁定令牌信息。有锁定令牌是非常重要的,这给了工作拷贝权利利用这个锁的能力。svn status会在文件后面显示一个K(locKed的缩写),表明了拥有锁定令牌。" +msgstr "当对工作拷贝路径应用svn info命令时,可以显示锁定令牌信息。有锁定令牌是非常重要的,这给了工作拷贝权利利用这个锁的能力。svn status会在文件后面显示一个K(locKed的缩写),表明了拥有锁定令牌。" #. (title) #: ../source/book.xml:5485 @@ -5900,7 +5898,7 @@ msgstr "关于锁定令牌" #: ../source/book.xml:5487 #, fuzzy msgid "A lock token isn't an authentication token, so much as an authorization token. The token isn't a protected secret. In fact, a lock's unique token is discoverable by anyone who runs svn info URL. A lock token is special only when it lives inside a working copy. It's proof that the lock was created in that particular working copy, and not somewhere else by some other client. Merely authenticating as the lock owner isn't enough to prevent accidents." -msgstr "一个锁不是一个认证令牌,而是一个授权令牌,这个令牌不是一个受保护的秘密,事实上,任何人都可以通过svn info URL发现这个唯一令牌。一个锁定令牌只有在工作拷贝中才有特别的意义,它是锁定建立在这个工作拷贝的证据,而不是其它用户在其他地方,仅仅检验锁定拥有者还不能防止出现意外。" +msgstr "一个锁不是一个认证令牌,而是一个授权令牌,这个令牌不是一个受保护的秘密,事实上,任何人都可以通过svn info URL发现这个唯一令牌。一个锁定令牌只有在工作拷贝中才有特别的意义,它是锁定建立在这个工作拷贝的证据,而不是其它用户在其他地方,仅仅检验锁定拥有者还不能防止出现意外。" #. (para) #: ../source/book.xml:5496 @@ -5973,19 +5971,19 @@ msgstr "" #: ../source/book.xml:5535 #, fuzzy msgid "Notice that after the commit is finished, svn status shows that the lock token is no longer present in working copy. This is the standard behavior of svn commit—it searches the working copy (or list of targets, if you provide such a list) for local modifications, and sends all the lock tokens it encounters during this walk to the server as part of the commit transaction. After the commit completes successfully, all of the repository locks that were mentioned are released—even on files that weren't committed. This is meant to discourage users from being sloppy about locking, or from holding locks for too long. If Harry haphazardly locks thirty files in a directory named images because he's unsure of which files he needs to change, yet only only changes four of those files, when he runs svn commit images, the process will still release all thirty locks." -msgstr "需要注意到提交之后,svn status显示工作拷贝已经没有锁定令牌了,这是svn commit的标准行为方式—它会遍历工作拷贝(或者从目标列表,如果有列表的话),并且作为提交的一部分发送所有遇到的锁定令牌到服务器。当提交完全成功,前面用到的所有版本库锁定都会被释放—即使是没有提交的文件。这样的原因是不鼓励用户滥用锁定,或者是长时间的保持锁定。例如,假定Harry不小心锁定了images目录的30个文件,因为他不确定要修改什么文件,他最后只修改了四个文件,当他运行svn commit images,会释放所有的30个锁定。" +msgstr "需要注意到提交之后,svn status显示工作拷贝已经没有锁定令牌了,这是svn commit的标准行为方式—它会遍历工作拷贝(或者从目标列表,如果有列表的话),并且作为提交的一部分发送所有遇到的锁定令牌到服务器。当提交完全成功,前面用到的所有版本库锁定都会被释放—即使是没有提交的文件。这样的原因是不鼓励用户滥用锁定,或者是长时间的保持锁定。例如,假定Harry不小心锁定了images目录的30个文件,因为他不确定要修改什么文件,他最后只修改了四个文件,当他运行svn commit images,会释放所有的30个锁定。" #. (para) #: ../source/book.xml:5552 #, fuzzy msgid "This behavior of automatically releasing locks can be overridden with the option to svn commit. This is best used for those times when you want to commit changes, but still plan to make more changes and thus need to retain existing locks. You can also make this your default behavior by setting the no-unlock runtime configuration option (see )." -msgstr "自动释放锁定的特性可以通过svn commit选项关闭,当你要提交文件,同时期望继续修改而必须保留锁定时非常有用。这个特性也可以半永久性的设定,方法是设置运行中config文件(见)的no-unlock = yes。" +msgstr "自动释放锁定的特性可以通过svn commit选项关闭,当你要提交文件,同时期望继续修改而必须保留锁定时非常有用。这个特性也可以半永久性的设定,方法是设置运行中config文件(见)的no-unlock = yes。" #. (para) #: ../source/book.xml:5560 #, fuzzy msgid "Of course, locking a file doesn't oblige one to commit a change to it. The lock can be released at any time with a simple svn unlock command:" -msgstr "当然,锁定一个文件不会强制一个人要提交修改,任何时候都可以通过运行svn unlock命令释放锁定:" +msgstr "当然,锁定一个文件不会强制一个人要提交修改,任何时候都可以通过运行svn unlock命令释放锁定:" #. (screen) #: ../source/book.xml:5563 @@ -6008,7 +6006,7 @@ msgstr "发现锁定" #: ../source/book.xml:5573 #, fuzzy msgid "When a commit fails due to someone else's locks, it's fairly easy to learn about them. The easiest of these is svn status --show-updates:" -msgstr "最明显的方式就是因为锁定而不能提交一个文件,最简单的方式是svn status --show-updates:" +msgstr "最明显的方式就是因为锁定而不能提交一个文件,最简单的方式是svn status --show-updates:" #. (screen) #: ../source/book.xml:5576 @@ -6034,7 +6032,7 @@ msgstr "" #: ../source/book.xml:5584 #, fuzzy msgid "In this example, Sally can see not only that her copy of foo.h is out-of-date, but that one of the two modified files she plans to commit is locked in the repository. The O symbol stands for Other, meaning that a lock exists on the file, and was created by somebody else. If she were to attempt a commit, the lock on raisin.jpg would prevent it. Sally is left wondering who made the lock, when, and why. Once again, svn info has the answers:" -msgstr "在这个例子里,Sally可以见到不仅她的foo.h是过期的,而且发现两个计划要提交的文件被锁定了。O符号表示其他人所订了文件。如果她尝试提交,raisin.jpg的锁定会阻止她,Sally会纳闷谁锁定了文件,什么时候,为什么。再一次,svn info拥有答案:" +msgstr "在这个例子里,Sally可以见到不仅她的foo.h是过期的,而且发现两个计划要提交的文件被锁定了。O符号表示其他人所订了文件。如果她尝试提交,raisin.jpg的锁定会阻止她,Sally会纳闷谁锁定了文件,什么时候,为什么。再一次,svn info拥有答案:" #. (screen) #: ../source/book.xml:5594 @@ -6080,7 +6078,7 @@ msgstr "" #: ../source/book.xml:5612 #, fuzzy msgid "Just as svn info can be used to examine objects in the working copy, it can also be used to examine objects in the repository. If the main argument to svn info is a working copy path, then all of the working copy's cached information is displayed; any mention of a lock means that the working copy is holding a lock token (if a file is locked by another user or in another working copy, svn info on a working copy path will show no lock information at all). If the main argument to svn info is a URL, then the information reflects the latest version of an object in the repository, and any mention of a lock describes the current lock on the object." -msgstr "就像svn info可以检验工作拷贝的对象,它也可以检验版本库的对象,如果svn info的主要参数是工作拷贝路径,所有工作拷贝的缓存信息都会显示,发现了锁定就意味着工作拷贝拥有锁定令牌(如果一个文件被另一个用户在另一个工作拷贝锁定,工作拷贝路径上运行svn info不会显示锁定信息)。如果svn info的主参数是URL,就会反映版本库中最新版本的对象信息,任何对锁定的提及描述了当前对象的锁定。" +msgstr "就像svn info可以检验工作拷贝的对象,它也可以检验版本库的对象,如果svn info的主要参数是工作拷贝路径,所有工作拷贝的缓存信息都会显示,发现了锁定就意味着工作拷贝拥有锁定令牌(如果一个文件被另一个用户在另一个工作拷贝锁定,工作拷贝路径上运行svn info不会显示锁定信息)。如果svn info的主参数是URL,就会反映版本库中最新版本的对象信息,任何对锁定的提及描述了当前对象的锁定。" #. (para) #: ../source/book.xml:5625 @@ -6101,7 +6099,7 @@ msgstr "版本库锁定并不是神圣不可侵犯的,在Subversion的缺省 #: ../source/book.xml:5644 #, fuzzy msgid "From the administrator's chair, it's simple to break locks. The svnlook and svnadmin programs have the ability to display and remove locks directly from the repository. (For more information about these tools, see .)" -msgstr "从管理员的位子上很容易打破锁定,svnlooksvnadmin程序都有能力从版本库直接显示和删除锁定。(关于这些工具的信息可以看。)" +msgstr "从管理员的位子上很容易打破锁定,svnlooksvnadmin程序都有能力从版本库直接显示和删除锁定。(关于这些工具的信息可以看。)" #. (screen) #: ../source/book.xml:5650 @@ -6196,13 +6194,13 @@ msgstr "" #: ../source/book.xml:5692 #, fuzzy msgid "Now, Sally's initial attempt to unlock failed because she ran svn unlock directly on her working copy of the file, and no lock token was present. To remove the lock directly from the repository, she needs to pass a URL to svn unlock. Her first attempt to unlock the URL fails, because she can't authenticate as the lock owner (nor does she have the lock token). But when she passes , the authentication and authorization requirements are ignored, and the remote lock is broken." -msgstr "Sally初始的unlock命令失败了,因为她直接在自己的工作拷贝上运行了svn unlock,而这里没有锁定令牌。为了直接从版本库删除锁定,她需要给svn unlock传递URL参数,她的这一次尝试又失败了,因为她不是锁定的拥有者(也没有锁定令牌)。当她使用了选项后,认证和授权的要求被忽略了,远程的锁定被打破了。" +msgstr "Sally初始的unlock命令失败了,因为她直接在自己的工作拷贝上运行了svn unlock,而这里没有锁定令牌。为了直接从版本库删除锁定,她需要给svn unlock传递URL参数,她的这一次尝试又失败了,因为她不是锁定的拥有者(也没有锁定令牌)。当她使用了选项后,认证和授权的要求被忽略了,远程的锁定被打破了。" #. (para) #: ../source/book.xml:5702 #, fuzzy msgid "Simply breaking a lock may not be enough. In the running example, Sally may not only want to break Harry's long-forgotten lock, but re-lock the file for her own use. She can accomplish this by running svn unlock --force and then svn lock back-to-back, but there's a small chance that somebody else might lock the file between the two commands. The simpler thing to is steal the lock, which involves breaking and re-locking the file all in one atomic step. To do this, Sally passes the option to svn lock:" -msgstr "当然,简单的打破锁定也许还不够,在这个例子里,Sally不仅想要打破Harry遗忘的锁定,她也希望自己重新锁定。她可以通过运行svn unlock --force紧接着svn lock,但是有可能有人在这两次命令之间锁定了文件,最简单的方式是窃取这个锁定,将打破和重新锁定变成一种原子操作,为此需要运行svn lock选项:" +msgstr "当然,简单的打破锁定也许还不够,在这个例子里,Sally不仅想要打破Harry遗忘的锁定,她也希望自己重新锁定。她可以通过运行svn unlock --force紧接着svn lock,但是有可能有人在这两次命令之间锁定了文件,最简单的方式是窃取这个锁定,将打破和重新锁定变成一种原子操作,为此需要运行svn lock选项:" #. (screen) #: ../source/book.xml:5713 @@ -6226,7 +6224,7 @@ msgstr "" #: ../source/book.xml:5720 #, fuzzy msgid "In any case, whether the lock is broken or stolen, Harry may be in for a surprise. Harry's working copy still contains the original lock token, but that lock no longer exists. The lock token is said to be defunct. The lock represented by the lock token has either been broken (no longer in the repository), or stolen (replaced with a different lock). Either way, Harry can see this by asking svn status to contact the repository:" -msgstr "在任何情况下,无论锁定被打破还是窃取,Harry都会感到惊讶。Harry的工作拷贝还保留有原来的锁定令牌,但是锁定已经不存在了,锁定令牌可以说已经死掉了。锁定令牌指代的锁定被打破(版本库中不再存在)或者是窃取了(被另一个锁定代替了),任何一种情况下,Harry都可以使用svn status询问版本库:" +msgstr "在任何情况下,无论锁定被打破还是窃取,Harry都会感到惊讶。Harry的工作拷贝还保留有原来的锁定令牌,但是锁定已经不存在了,锁定令牌可以说已经死掉了。锁定令牌指代的锁定被打破(版本库中不再存在)或者是窃取了(被另一个锁定代替了),任何一种情况下,Harry都可以使用svn status询问版本库:" #. (screen) #: ../source/book.xml:5729 @@ -6256,7 +6254,7 @@ msgstr "" #: ../source/book.xml:5739 #, fuzzy msgid "If the repository lock was broken, then svn status --show-updates displays a B (Broken) symbol next to the file. If a new lock exists in place of the old one, then a T (sTolen) symbol is shown. Finally, svn update notices any defunct lock tokens and removes them from the working copy." -msgstr "如果版本库锁定被打破了,svn status --show-updates会在文件旁边显示一个B (Broken)。如果有一个新的锁,就会显示一个T (sTolen)符号。最终,svn update会注意到所有死掉的锁定并且把它们从工作拷贝中删除掉。" +msgstr "如果版本库锁定被打破了,svn status --show-updates会在文件旁边显示一个B (Broken)。如果有一个新的锁,就会显示一个T (sTolen)符号。最终,svn update会注意到所有死掉的锁定并且把它们从工作拷贝中删除掉。" #. (title) #: ../source/book.xml:5748 @@ -6283,19 +6281,19 @@ msgstr "锁定交流" #: ../source/book.xml:5780 #, fuzzy msgid "We've seen how svn lock and svn unlock can be used to create, release, break, and steal locks. This satisfies the goal of serializing commit access to a file. But what about the larger problem of preventing wasted time?" -msgstr "我们已经见到了如何利用svn locksvn unlock来创建、释放、打破和窃取锁定,这就满足了顺序访问文件的要求,但是浪费时间这个大问题该如何呢?" +msgstr "我们已经见到了如何利用svn locksvn unlock来创建、释放、打破和窃取锁定,这就满足了顺序访问文件的要求,但是浪费时间这个大问题该如何呢?" #. (para) #: ../source/book.xml:5785 #, fuzzy msgid "For example, suppose Harry locks an image file and then begins editing it. Meanwhile, miles away, Sally wants to do the same thing. She doesn't think to run svn status --show-updates, so she has no idea that Harry has already locked the file. She spends hours editing the file, and when she tries to commit her change, she discovers that either the file is locked or that she's out-of-date. Regardless, her changes aren't mergeable with Harry's. One of these two people has to throw away their work, and a lot of time has been wasted." -msgstr "例如,假定Harry锁定了一个图片,并开始编辑。同时,几英里之外的Sally希望做同样的工作,她没想到运行svn status --show-updates,她不知道Harry已经锁定了文件。她花费了数小时来修改文件,当她真被提交时发现文件已经被锁定或者是她的文件已经过期了。她的修改不能和Harry的合并,他们中的一人需要抛弃自己的工作,许多时间被浪费了。" +msgstr "例如,假定Harry锁定了一个图片,并开始编辑。同时,几英里之外的Sally希望做同样的工作,她没想到运行svn status --show-updates,她不知道Harry已经锁定了文件。她花费了数小时来修改文件,当她真被提交时发现文件已经被锁定或者是她的文件已经过期了。她的修改不能和Harry的合并,他们中的一人需要抛弃自己的工作,许多时间被浪费了。" #. (para) #: ../source/book.xml:5795 #, fuzzy msgid "Subversion's solution to this problem is to provide a mechanism to remind users that a file ought to be locked before the editing begins. The mechanism is a special property, svn:needs-lock. If that property is attached to a file (regardless of its value, which is irrelevant), then Subversion will try to use filesystem-level permissions to make the file read-only—unless, of course, the user has explicitly locked the file. When a lock token is present (as a result of running svn lock), the file becomes read-write. When the lock is released, the file becomes read-only again." -msgstr "Subversion针对此问题的解决方案是提供一种机制,提醒用户在开始编辑以前必须锁定这个文件,这个机制就是提供一种特别的属性--svn:needs-lock。当有这个值时,除非用户锁定这个文件,否则文件一直是只读的。当得到一个锁定令牌(运行svn lock的结果),文件变成可读写,当释放这个锁后,文件又变成只读。" +msgstr "Subversion针对此问题的解决方案是提供一种机制,提醒用户在开始编辑以前必须锁定这个文件,这个机制就是提供一种特别的属性--svn:needs-lock。当有这个值时,除非用户锁定这个文件,否则文件一直是只读的。当得到一个锁定令牌(运行svn lock的结果),文件变成可读写,当释放这个锁后,文件又变成只读。" #. (para) #: ../source/book.xml:5807 @@ -6350,8 +6348,9 @@ msgstr "需要注意到这个属性是依赖于锁定系统的交流工具,不 #. (para) #: ../source/book.xml:5851 +#, fuzzy msgid "Except, perhaps, a classic Vulcan mind-meld." -msgstr "" +msgstr "?" #. (para) #: ../source/book.xml:5843 @@ -6367,13 +6366,13 @@ msgstr "外部定义" #: ../source/book.xml:5862 #, fuzzy msgid "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 locations in a repository, or perhaps from different repositories altogether. You could certainly set up such a scenario by hand—using svn checkout to create the sort of nested working copy structure you are trying 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." -msgstr "有时候创建一个由多个不同检出得到的工作拷贝是非常有用的,举个例子,你或许希望不同的子目录来自不同的版本库位置,或者是不同的版本库。你可以手工设置这样一个工作拷贝—使用svn checkout来创建这种你需要的嵌套的工作拷贝结构。但是如果这个结构对所有的用户是很重要的,每个用户需要执行同样的检出操作。" +msgstr "有时候创建一个由多个不同检出得到的工作拷贝是非常有用的,举个例子,你或许希望不同的子目录来自不同的版本库位置,或者是不同的版本库。你可以手工设置这样一个工作拷贝—使用svn checkout来创建这种你需要的嵌套的工作拷贝结构。但是如果这个结构对所有的用户是很重要的,每个用户需要执行同样的检出操作。" #. (para) #: ../source/book.xml:5872 #, fuzzy msgid "Fortunately, Subversion provides support for externals definitions. An externals definition is a mapping of a local directory to the URL—and ideally a particular revision—of a versioned directory. In Subversion, you declare externals definitions in groups using the svn:externals property. You can create or modify this property using svn propset or svn propedit (see ). It can be set on any versioned directory, and its value is a multi-line table of subdirectories (relative to the versioned directory on which the property is set), optional revision flags, and fully qualified, absolute Subversion repository URLs." -msgstr "很幸运,Subversion提供了外部定义的支持,一个外部定义是一个本地路经到URL的影射—也有可能一个特定的修订版本—一些版本化的资源。在Subversion你可以使用svn:externals属性来定义外部定义,你可以用svn propsetsvn propedit(见)创建和修改这个属性。它可以设置到任何版本化的路经,它的值是一个多行的子目录,可选的修订版本标记和完全有效的Subversion版本库URL的列表(相对于设置属性的版本化目录)。" +msgstr "很幸运,Subversion提供了外部定义的支持,一个外部定义是一个本地路经到URL的影射—也有可能一个特定的修订版本—一些版本化的资源。在Subversion你可以使用svn:externals属性来定义外部定义,你可以用svn propsetsvn propedit(见)创建和修改这个属性。它可以设置到任何版本化的路经,它的值是一个多行的子目录,可选的修订版本标记和完全有效的Subversion版本库URL的列表(相对于设置属性的版本化目录)。" #. (screen) #: ../source/book.xml:5885 @@ -6457,13 +6456,13 @@ msgstr "" #: ../source/book.xml:5929 #, fuzzy msgid "If you need to change the externals definition, you can do so using the regular property modification subcommands. When you commit a change to the svn:externals property, Subversion will synchronize the checked-out items against the changed externals definition when you next run svn update. The same thing will happen when others update their working copies and receive your changes to the externals definition." -msgstr "如果你希望修改外部定义,你可以使用普通的属性修改子命令,当你提交一个svn:externals属性修改后,当你运行svn update时,Subversion会根据修改的外部定义同步检出的项目,同样的事情也会发生在别人更新他们的工作拷贝接受你的外部定义修改时。" +msgstr "如果你希望修改外部定义,你可以使用普通的属性修改子命令,当你提交一个svn:externals属性修改后,当你运行svn update时,Subversion会根据修改的外部定义同步检出的项目,同样的事情也会发生在别人更新他们的工作拷贝接受你的外部定义修改时。" #. (para) #: ../source/book.xml:5938 #, fuzzy msgid "Because the svn:externals property has a multiline value, we strongly recommend that you use svn propedit instead of svn propset." -msgstr "因为svn:externals的值是多行的,所以我们强烈建议使用svn propedit,而不是使用svn propset。" +msgstr "因为svn:externals的值是多行的,所以我们强烈建议使用svn propedit,而不是使用svn propset。" #. (para) #: ../source/book.xml:5944 @@ -6475,13 +6474,13 @@ msgstr "你一定要要考虑在所有的外部定义中使用明确的修订版 #: ../source/book.xml:5960 #, fuzzy msgid "The svn status command also recognizes externals definitions, displaying a status code of X for the disjoint subdirectories into which externals are checked out, and then recursing into those subdirectories to display the status of the external items themselves." -msgstr "svn status命令也认识外部定义,会为外部定义的子目录显示X状态码,然后迭代这些子目录来显示外部项目的子目录状态信息。" +msgstr "svn status命令也认识外部定义,会为外部定义的子目录显示X状态码,然后迭代这些子目录来显示外部项目的子目录状态信息。" #. (para) #: ../source/book.xml:5966 #, fuzzy msgid "The support that exists for externals definitions in Subversion is less than ideal, though. First, an externals definition can only point to directories, not files. Second, the externals definition cannot point to relative paths (paths like ../../skins/myskin). Third, the working copies created via the externals definition support are still disconnected from the primary working copy (on whose versioned directories the svn:externals property was actually set). And Subversion still only truly operates on non-disjoint working copies. So, for example, if you want to commit changes that you've made in one or more of those external working copies, you must run svn commit explicitly on those working copies—committing on the primary working copy will not recurse into any external ones." -msgstr "Subversion目前对外部定义的支持可能会引起误导,首先,一个外部定义只可以指向目录,而不是文件。第二,外部定义不可以指向相对路径(如../../skins/myskin)。第三,通过外部定义创建的工作拷贝与主工作拷贝没有连接,所以举个例子,如果你希望提交一个或多个外部定义的拷贝,你必须在这些工作拷贝显示的运行svn commit—对主工作拷贝的提交不会迭代到外部定义的部分。" +msgstr "Subversion目前对外部定义的支持可能会引起误导,首先,一个外部定义只可以指向目录,而不是文件。第二,外部定义不可以指向相对路径(如../../skins/myskin)。第三,通过外部定义创建的工作拷贝与主工作拷贝没有连接,所以举个例子,如果你希望提交一个或多个外部定义的拷贝,你必须在这些工作拷贝显示的运行svn commit—对主工作拷贝的提交不会迭代到外部定义的部分。" #. (para) #: ../source/book.xml:5981 @@ -6527,7 +6526,7 @@ msgstr "" #: ../source/book.xml:6008 #, fuzzy msgid "Now you use svn move to rename the my-project directory. At this point, your externals definition will still refer to a path under the my-project directory, even though that directory no longer exists." -msgstr "现在你使用svn move将目录my-project改名,此刻,你的外部定义还是指向my-project目录,即使这个目录已经不存在了。" +msgstr "现在你使用svn move将目录my-project改名,此刻,你的外部定义还是指向my-project目录,即使这个目录已经不存在了。" #. (screen) #: ../source/book.xml:6013 @@ -6563,13 +6562,13 @@ msgstr "" #: ../source/book.xml:6026 #, fuzzy msgid "Also, the absolute URLs that externals definitions use 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 out the repository over http:// or https://, but only allow commits to come in via https://, you have an interesting problem on your hands. If your externals definitions use the http:// form of the repository URLs, you won't be able to commit anything from the working copies created by those externals. On the other hand, if they use the https:// form of the URLs, anyone who might be checking out via http:// because their client doesn't support https:// will be unable to fetch the external items. Be aware, too, that if you need to re-parent your working copy (using svn switch --relocate), externals definitions will not also be re-parented." -msgstr "当然,如果版本库存在多种URL模式时,使用绝对URL来引用外部定义会导致问题。例如,如果你的Subversion服务器已经配置为任何用户可以使用http://https://检出,但是只能通过https://提交,你现在有了一个很有趣的问题。如果你的外部定义使用http://形式,则你不能从这个工作拷贝提交任何内容。另一方面,如果他们使用https://方式的URL,任何因为不支持https://的客户使用http://检出的工作拷贝不能得到外部项目。也需要意识到,如果你需要重定位你的工作拷贝(使用svn switch --relocate),外部定义不会重新定位。" +msgstr "当然,如果版本库存在多种URL模式时,使用绝对URL来引用外部定义会导致问题。例如,如果你的Subversion服务器已经配置为任何用户可以使用http://https://检出,但是只能通过https://提交,你现在有了一个很有趣的问题。如果你的外部定义使用http://形式,则你不能从这个工作拷贝提交任何内容。另一方面,如果他们使用https://方式的URL,任何因为不支持https://的客户使用http://检出的工作拷贝不能得到外部项目。也需要意识到,如果你需要重定位你的工作拷贝(使用svn switch --relocate),外部定义不会重新定位。" #. (para) #: ../source/book.xml:6044 #, fuzzy msgid "Finally, there might be times when you would prefer that svn subcommands would not recognize, or otherwise operate upon, the external working copies. In those instances, you can pass the option to the subcommand." -msgstr "最后,你或许经常希望svn子命令不会识别或其它作为外部定义处理的结果的外部工作拷贝上的操作,在这种情况下,你可以对子命令使用选项。" +msgstr "最后,你或许经常希望svn子命令不会识别或其它作为外部定义处理的结果的外部工作拷贝上的操作,在这种情况下,你可以对子命令使用选项。" #. (title) #: ../source/book.xml:6055 @@ -6693,7 +6692,7 @@ msgstr "对那个祖先执行请求的动作,无论它的位置,无论它是 #. (para) #: ../source/book.xml:6193 msgid "But what if OPERATIVE-REV is younger than PEG-REV? Well, that adds some complexity to the theoretical problem of locating the path in OPERATIVE-REV, because the path's history could have forked multiple times (thanks to copy operations) between PEG-REV and OPERATIVE-REV. And that's not all—Subversion doesn't store enough information to performantly trace an object's history forward, anyway. So the algorithm is a little different:" -msgstr "" +msgstr "但是如果OPERATIVE-REVPEG-REV更年轻时会怎么样?这为定位OPERATIVE-REV中的路径的理论问题增加了一些复杂性,因为在PEG-REVOPERATIVE-REV之间,路径在历史中可以出现多次(由于拷贝操作),而且那还不是全部—Subversion不会保存向前跟踪历史的足够信息,所以算法会有一点不同:" #. (para) #: ../source/book.xml:6206 @@ -6710,7 +6709,7 @@ msgstr "追踪对象的历史背景(通过任何可能的改名)来到修订 #. (para) #: ../source/book.xml:6216 msgid "Verify that the object's location (path-wise) in PEG-REV is the same as it is in OPERATIVE-REV. If that's the case, then at least the two locations are known to be directly related, so perform the requested action on the location in OPERATIVE-REV. Otherwise, relatedness was not established, so error out with a loud complaint that no viable location was found. (Someday, we expect that Subversion will be able to handle this usage scenario with more flexibility and grace.)" -msgstr "" +msgstr "在PEG-REV中检验对象的位置(顺序)与在OPERATIVE-REV中相同,如果那是问题,则至少两个位置是直接关联的,所以在OPERATIVE-REV的位置执行请求动作。否则,关联没有建立,所以会报告没有可用位置的错误。(有一天,我们希望Subversion可以更灵活和优雅的处理这种场景。)" #. (para) #: ../source/book.xml:6229 @@ -6763,13 +6762,13 @@ msgstr "" #. (para) #: ../source/book.xml:6270 msgid "And when executed, it has the expected results." -msgstr "" +msgstr "当执行时,它包含期望的结果。" #. (para) #: ../source/book.xml:6271 #, fuzzy msgid "The perceptive reader is probably wondering at this point if the peg revision syntax causes problems for working copy paths or URLs that actually have at signs in them. After all, how does svn know whether news@11 is the name of a directory in my tree, or just a syntax for revision 11 of news? Thankfully, while svn will always assume the latter, there is a trivial workaround. You need only append an at sign to the end of the path, such as news@11@. svn only cares about the last at sign in the argument, and it is not considered illegal to omit a literal peg revision specifier after that at sign. This workaround even applies to paths that end in an at sign—you would use filename@@ to talk about a file named filename@." -msgstr "如果工作拷贝路径或URL中确实有一个at记号,peg修订版本语法是否会导致问题?深刻理解的读者可能会产生这样的疑问。毕竟,svn是如何知道news@11是我的目录树中的一个目录,还是修订版本11的news文件?幸好,svn会一直假定后者。你只需要在路径最后添加一个at符号,例如news@11@svn只关心最后一个at标记,如果遗漏了最后的修订版本号,不会认为不合法。这个workaround甚至会 This workaround even applies to paths that end in an at sign—you would use filename@@ to talk about a file named filename@." +msgstr "如果工作拷贝路径或URL中确实有一个at记号,peg修订版本语法是否会导致问题?深刻理解的读者可能会产生这样的疑问。毕竟,svn是如何知道news@11是我的目录树中的一个目录,还是修订版本11的news文件?幸好,svn会一直假定后者。你只需要在路径最后添加一个at符号,例如news@11@svn只关心最后一个at标记,如果遗漏了最后的修订版本号,不会认为不合法。这个workaround甚至会 This workaround even applies to paths that end in an at sign—you would use filename@@ to talk about a file named filename@." #. (para) #: ../source/book.xml:6287 @@ -6888,7 +6887,7 @@ msgstr "网络模型" #: ../source/book.xml:6361 #, fuzzy msgid "At some point, you're going to need to understand how your Subversion client communicates with its server. Subversion's networking layer is abstracted, meaning that Subversion clients exhibit the same general behaviors no matter what sort of server they are operating against. Whether speaking the HTTP protocol (http://) with the Apache HTTP Server or speaking the custom Subversion protocol (svn://) with svnserve, the basic network model is the same. In this section, we'll explain the basics of that network model, including how Subversion manages authentication and authorization matters." -msgstr "在某些情况下,你需要理解Subversion客户端如何与服务器通讯。Subversion网络层是抽象的,意味着Subversion客户端不管其操作的对象都会使用相同的行为方式,不管是使用HTTP协议(http://)与Apache HTTP服务器通讯或是使用自定义Subversion协议(svn://)与svnserve通讯,基本的网络模型是相同的。在本小节,我们要解释网络模型基础,包括Subversion如何管理认证和授权信息。" +msgstr "在某些情况下,你需要理解Subversion客户端如何与服务器通讯。Subversion网络层是抽象的,意味着Subversion客户端不管其操作的对象都会使用相同的行为方式,不管是使用HTTP协议(http://)与Apache HTTP服务器通讯或是使用自定义Subversion协议(svn://)与svnserve通讯,基本的网络模型是相同的。在本小节,我们要解释网络模型基础,包括Subversion如何管理认证和授权信息。" #. (title) #: ../source/book.xml:6376 @@ -6905,19 +6904,19 @@ msgstr "Subversion客户端花费大量的时间来管理工作拷贝,当它 #: ../source/book.xml:6386 #, fuzzy msgid "Run svn --version to see which URL schemes and protocols the client knows how to use." -msgstr "用户可以运行svn --version来查看客户端可以使用的URL模式和协议。" +msgstr "用户可以运行svn --version来查看客户端可以使用的URL模式和协议。" #. (para) #: ../source/book.xml:6390 #, fuzzy msgid "When the server process receives a client request, it often demands that the client identify itself. It issues an authentication challenge to the client, and the client responds by providing credentials back to the server. Once authentication is complete, the server responds with the original information the client asked for. Notice that this system is different from systems like CVS, where the client pre-emptively offers credentials (logs in) to the server before ever making a request. In Subversion, the server pulls credentials by challenging the client at the appropriate moment, rather than the client pushing them. This makes certain operations more elegant. For example, if a server is configured to allow anyone in the world to read a repository, then the server will never issue an authentication challenge when a client attempts to svn checkout." -msgstr "当服务器处理一个客户端请求,它通常会要求客户端确定它自己的身份,它会发出一个认证请求给客户端,而客户端通过提供凭证给服务器作为响应,一旦认证结束,服务器会响应客户端最初请求的信息。注意这个系统与CVS之类的系统不一样,它们会在请求之前,预先提供凭证(logs in)给服务器,在Subversion里,服务器通过请求客户端适时地拖入凭证,而不是客户端出,这使得这种操作更加的优雅。例如,如果一个服务器配置为世界上的任何人都可以读取版本库,在客户使用svn checkout时,服务器永远不会发起一个认证请求。" +msgstr "当服务器处理一个客户端请求,它通常会要求客户端确定它自己的身份,它会发出一个认证请求给客户端,而客户端通过提供凭证给服务器作为响应,一旦认证结束,服务器会响应客户端最初请求的信息。注意这个系统与CVS之类的系统不一样,它们会在请求之前,预先提供凭证(logs in)给服务器,在Subversion里,服务器通过请求客户端适时地拖入凭证,而不是客户端出,这使得这种操作更加的优雅。例如,如果一个服务器配置为世界上的任何人都可以读取版本库,在客户使用svn checkout时,服务器永远不会发起一个认证请求。" #. (para) #: ../source/book.xml:6406 #, fuzzy msgid "If the particular network requests issued by the client result in a new revision being created in the repository, (e.g. svn commit), then Subversion uses the authenticated username associated with those requests as the author of the revision. That is, the authenticated user's name is stored as the value of the svn:author property on the new revision (see ). If the client was not authenticated (in other words, the server never issued an authentication challenge), then the revision's svn:author property is empty." -msgstr "如果客户端的请求会在版本库创建新的修订版本(例如svn commit),Subversion就会使用认证过的用户名作为此次提交的作者。也就是说经过认证的用户名作为svn:author属性的值保存到新的修订本里(见)。如果客户端没有经过认证(换句话说,服务器没有发起过认证请求),这时修订本的svn:author的值是空的。" +msgstr "如果客户端的请求会在版本库创建新的修订版本(例如svn commit),Subversion就会使用认证过的用户名作为此次提交的作者。也就是说经过认证的用户名作为svn:author属性的值保存到新的修订本里(见)。如果客户端没有经过认证(换句话说,服务器没有发起过认证请求),这时修订本的svn:author的值是空的。" #. (title) #: ../source/book.xml:6422 @@ -7098,7 +7097,7 @@ msgstr "再次重申,一个常见的错误是把服务器配置为从不会请 #: ../source/book.xml:6556 #, fuzzy msgid "One last word about svn's authentication behavior, specifically regarding the and options. Many client subcommands accept these options, but it is important to understand using these options does not automatically send credentials to the server. As discussed earlier, the server pulls credentials from the client when it deems necessary; the client cannot push them at will. If a username and/or password are passed as options, they will only be presented to the server if the server requests them. These options are typically used to authenticate as a different user than Subversion would have chosen by default (such as your system login name), or when trying to avoid interactive prompting (such as when calling svn from a script)." -msgstr "客户端认证的行为的最后一点:对使用选项的一点说明,许多客户端和子命令接受这个选项,但是要明白使用这个选项不会主动地发送凭证信息到服务器,就像前面讨论过的,服务器会在需要的时候才会从客户端入凭证,客户端不会随意出。如果一个用户名和/或者密码作为选项传入,它们只会在服务器需要时展现给服务器。通常,只有在如下情况下才会使用这些选项:例如使用非缺省用户(例如系统登陆名)进行认证,或者是为了防止交互式输入(例如执行svn)。" +msgstr "客户端认证的行为的最后一点:对使用选项的一点说明,许多客户端和子命令接受这个选项,但是要明白使用这个选项不会主动地发送凭证信息到服务器,就像前面讨论过的,服务器会在需要的时候才会从客户端入凭证,客户端不会随意出。如果一个用户名和/或者密码作为选项传入,它们只会在服务器需要时展现给服务器。通常,只有在如下情况下才会使用这些选项:例如使用非缺省用户(例如系统登陆名)进行认证,或者是为了防止交互式输入(例如执行svn)。" #. (para) #: ../source/book.xml:6580 @@ -7223,7 +7222,7 @@ msgstr "假定你有一个任务,将要对项目做基本的重新组织,这 #: ../source/book.xml:6731 #, fuzzy msgid "One strategy is to crawl into a hole: you and Sally can stop sharing information for a week or two. That is, start gutting and reorganizing all the files in your working copy, but don't commit or update until you're completely finished with the task. There are a number of problems with this, though. First, it's not very safe. Most people like to save their work to the repository frequently, should something bad accidentally happen to their working copy. Second, it's not very flexible. If you do your work on different computers (perhaps you have a working copy of /calc/trunk on two different machines), you'll need to manually copy your changes back and forth, or just do all the work on a single computer. By that same token, it's difficult to share your changes-in-progress with anyone else. A common software development best practice is to allow your peers to review your work as you go. If nobody sees your intermediate commits, you lose potential feedback. Finally, when you're finished with all your changes, you might find it very difficult to re-merge your final work with the rest of the company's main body of code. Sally (or others) may have made many other changes in the repository that are difficult to incorporate into your working copy—especially if you run svn update after weeks of isolation." -msgstr "一种策略是自己闭门造车:你和Sally可以停止一个到两个星期的共享,也就是说,开始作出本质上的修改和重新组织工作拷贝的文件,但是在完成这个任务之前不做提交和更新。这样会有很多问题,首先,这样并不安全,许多人习惯频繁的保存修改到版本库,工作拷贝一定有许多意外的修改。第二,这样并不灵活,如果你的工作在不同的计算机(或许你在不同的机器有两份/calc/trunk的工作拷贝),你需要手工的来回拷贝修改,或者只在一个计算机上工作,这时很难做到共享你即时的修改,一项软件开发的最佳实践就是允许审核你做过的工作,如果没有人看到你的提交,你失去了潜在的反馈。最后,当你完成了公司主干代码的修改工作,你会发现合并你的工作拷贝和公司的主干代码会是一件非常困难的事情,Sally(或者其他人)也许已经对版本库做了许多修改,已经很难和你的工作拷贝结合—当你单独工作几周后运行svn update时就会发现这一点。" +msgstr "一种策略是自己闭门造车:你和Sally可以停止一个到两个星期的共享,也就是说,开始作出本质上的修改和重新组织工作拷贝的文件,但是在完成这个任务之前不做提交和更新。这样会有很多问题,首先,这样并不安全,许多人习惯频繁的保存修改到版本库,工作拷贝一定有许多意外的修改。第二,这样并不灵活,如果你的工作在不同的计算机(或许你在不同的机器有两份/calc/trunk的工作拷贝),你需要手工的来回拷贝修改,或者只在一个计算机上工作,这时很难做到共享你即时的修改,一项软件开发的最佳实践就是允许审核你做过的工作,如果没有人看到你的提交,你失去了潜在的反馈。最后,当你完成了公司主干代码的修改工作,你会发现合并你的工作拷贝和公司的主干代码会是一件非常困难的事情,Sally(或者其他人)也许已经对版本库做了许多修改,已经很难和你的工作拷贝结合—当你单独工作几周后运行svn update时就会发现这一点。" #. (para) #: ../source/book.xml:6754 @@ -7239,7 +7238,7 @@ msgstr "创建分支" #: ../source/book.xml:6765 #, fuzzy msgid "Creating a branch is very simple—you make a copy of the project in the repository using the svn copy command. Subversion is not only able to copy single files, but whole directories as well. In this case, you want to make a copy of the /calc/trunk directory. Where should the new copy live? Wherever you wish—it's a matter of project policy. Let's say that your team has a policy of creating branches in the /calc/branches area of the repository, and you want to name your branch my-calc-branch. You'll want to create a new directory, /calc/branches/my-calc-branch, which begins its life as a copy of /calc/trunk." -msgstr "建立分支非常的简单—使用svn copy命令给你的工程做个拷贝,Subversion不仅可以拷贝单个文件,也可以拷贝整个目录,在目前情况下,你希望作/calc/trunk的拷贝,新的拷贝应该在哪里?在你希望的任何地方—它只是在于项目的政策,我们假设你们项目的政策是在/calc/branches建立分支,并且你希望把你的分支叫做my-calc-branch,你希望建立一个新的目录/calc/branches/my-calc-branch,作为/calc/trunk的拷贝开始它的生命周期。" +msgstr "建立分支非常的简单—使用svn copy命令给你的工程做个拷贝,Subversion不仅可以拷贝单个文件,也可以拷贝整个目录,在目前情况下,你希望作/calc/trunk的拷贝,新的拷贝应该在哪里?在你希望的任何地方—它只是在于项目的政策,我们假设你们项目的政策是在/calc/branches建立分支,并且你希望把你的分支叫做my-calc-branch,你希望建立一个新的目录/calc/branches/my-calc-branch,作为/calc/trunk的拷贝开始它的生命周期。" #. (para) #: ../source/book.xml:6780 @@ -7273,7 +7272,7 @@ msgstr "" #: ../source/book.xml:6793 #, fuzzy msgid "Making a copy is now simply a matter of passing two working-copy paths to the svn copy command:" -msgstr "建立一个备份只是传递两个目录参数到svn copy命令:" +msgstr "建立一个备份只是传递两个目录参数到svn copy命令:" #. (screen) #: ../source/book.xml:6796 @@ -7295,7 +7294,7 @@ msgstr "" #: ../source/book.xml:6802 #, fuzzy msgid "In this case, the svn copy command recursively copies the trunk working directory to a new working directory, branches/my-calc-branch. As you can see from the svn status command, the new directory is now scheduled for addition to the repository. But also notice the + sign next to the letter A. This indicates that the scheduled addition is a copy of something, not something new. When you commit your changes, Subversion will create /calc/branches/my-calc-branch in the repository by copying /calc/trunk, rather than resending all of the working copy data over the network:" -msgstr "在这个情况下,svn copy命令迭代的将trunk工作目录拷贝到一个新的目录branhes/my-calc-branch,像你从svn status看到的,新的目录是准备添加到版本库的,但是也要注意A后面的+号,这表明这个准备添加的东西是一份备份,而不是新的东西。当你提交修改,Subversion会通过拷贝/calc/trunk建立/calc/branches/my-calc-branch目录,而不是通过网络传递所有数据:" +msgstr "在这个情况下,svn copy命令迭代的将trunk工作目录拷贝到一个新的目录branhes/my-calc-branch,像你从svn status看到的,新的目录是准备添加到版本库的,但是也要注意A后面的+号,这表明这个准备添加的东西是一份备份,而不是新的东西。当你提交修改,Subversion会通过拷贝/calc/trunk建立/calc/branches/my-calc-branch目录,而不是通过网络传递所有数据:" #. (screen) #: ../source/book.xml:6816 @@ -7315,7 +7314,7 @@ msgstr "" #: ../source/book.xml:6821 #, fuzzy msgid "And now here's the easier method of creating a branch, which we should have told you about in the first place: svn copy is able to operate directly on two URLs." -msgstr "现在,我们必须告诉你建立分支最简单的方法:svn copy可以直接对两个URL操作。" +msgstr "现在,我们必须告诉你建立分支最简单的方法:svn copy可以直接对两个URL操作。" #. (screen) #: ../source/book.xml:6825 @@ -7339,7 +7338,7 @@ msgstr "" #: ../source/book.xml:6840 #, fuzzy msgid "Subversion does not support copying between different repositories. When using URLs with svn copy or svn move, you can only copy items within the same repository." -msgstr "Subversion不支持跨版本库的拷贝,当使用svn copy或者svn move直接操作URL时你只能在同一个版本库内操作。" +msgstr "Subversion不支持跨版本库的拷贝,当使用svn copy或者svn move直接操作URL时你只能在同一个版本库内操作。" #. (para) #: ../source/book.xml:6832 @@ -7371,7 +7370,7 @@ msgstr "这就是为什么经常听到Subversion用户谈论廉价的拷 #: ../source/book.xml:6884 #, fuzzy msgid "Of course, these internal mechanics of copying and sharing data are hidden from the user, who simply sees copies of trees. The main point here is that copies are cheap, both in time and space. If you create a branch entirely within the repository (by running svn copy URL1 URL2), it's a quick, constant-time operation. Make branches as often as you want." -msgstr "当然,拷贝与分享的内部机制对用户来讲是不可见的,用户只是看到拷贝树,这里的要点是拷贝的时间与空间代价很小。如果你完全在版本库里创建分支(通过运行svn copy URL1 URL2),这是一个快速的,时间基本固定的操作,只要你希望,可以随意创建分支。" +msgstr "当然,拷贝与分享的内部机制对用户来讲是不可见的,用户只是看到拷贝树,这里的要点是拷贝的时间与空间代价很小。如果你完全在版本库里创建分支(通过运行svn copy URL1 URL2),这是一个快速的,时间基本固定的操作,只要你希望,可以随意创建分支。" #. (title) #: ../source/book.xml:6896 @@ -7642,7 +7641,7 @@ msgstr "在上一章节,我们提到你和Sally对 #: ../source/book.xml:7100 #, fuzzy msgid "It's time to use the svn merge command. This command, it turns out, is a very close cousin to the svn diff command (which you read about in ). Both commands are able to compare any two objects in the repository and describe the differences. For example, you can ask svn diff to show you the exact change made by Sally in revision 344:" -msgstr "是时间使用svn merge命令,这个命令的结果非常类似svn diff命令(在第3章的内容),两个命令都可以比较版本库中的任何两个对象并且描述其区别,举个例子,你可以使用svn diff来查看Sally在版本344作的修改:" +msgstr "是时间使用svn merge命令,这个命令的结果非常类似svn diff命令(在第3章的内容),两个命令都可以比较版本库中的任何两个对象并且描述其区别,举个例子,你可以使用svn diff来查看Sally在版本344作的修改:" #. (screen) #: ../source/book.xml:7108 @@ -7740,7 +7739,7 @@ msgstr "" #: ../source/book.xml:7152 #, fuzzy msgid "The svn merge command is almost exactly the same. Instead of printing the differences to your terminal, however, it applies them directly to your working copy as local modifications:" -msgstr "svn merge命令几乎完全相同,但不是打印区别到你的终端,它会直接作为本地修改作用到你的本地拷贝:" +msgstr "svn merge命令几乎完全相同,但不是打印区别到你的终端,它会直接作为本地修改作用到你的本地拷贝:" #. (screen) #: ../source/book.xml:7156 @@ -7764,19 +7763,19 @@ msgstr "" #: ../source/book.xml:7163 #, fuzzy msgid "The output of svn merge shows that your copy of integer.c was patched. It now contains Sally's change—the change has been copied from the trunk to your working copy of your private branch, and now exists as a local modification. At this point, it's up to you to review the local modification and make sure it works correctly." -msgstr "svn merge的输出告诉你的integer.c文件已经作了补丁(patched),现在已经保留了Sally修改—修改从主干拷贝到你的私有分支的工作拷贝,现在作为一个本地修改,在这种情况下,要靠你审查本地的修改来确定它们工作正常。" +msgstr "svn merge的输出告诉你的integer.c文件已经作了补丁(patched),现在已经保留了Sally修改—修改从主干拷贝到你的私有分支的工作拷贝,现在作为一个本地修改,在这种情况下,要靠你审查本地的修改来确定它们工作正常。" #. (para) #: ../source/book.xml:7170 #, fuzzy msgid "In another scenario, it's possible that things may not have gone so well, and that integer.c may have entered a conflicted state. You might need to resolve the conflict using standard procedures (see ), or if you decide that the merge was a bad idea altogether, simply give up and svn revert the local change." -msgstr "在另一种情境下,事情并不会运行得这样正常,也许integer.c也许会进入冲突状态,你必须使用标准过程(见第三章)来解决这种状态,或者你认为合并是一个错误的决定,你只需要运行svn revert放弃。" +msgstr "在另一种情境下,事情并不会运行得这样正常,也许integer.c也许会进入冲突状态,你必须使用标准过程(见第三章)来解决这种状态,或者你认为合并是一个错误的决定,你只需要运行svn revert放弃。" #. (para) #: ../source/book.xml:7176 #, fuzzy msgid "But assuming that you've reviewed the merged change, you can svn commit the change as usual. At that point, the change has been merged into your repository branch. In version control terminology, this act of copying changes between branches is commonly called porting changes." -msgstr "但是当你审查过你的合并结果后,你可以使用svn commit提交修改,在那一刻,修改已经合并到你的分支上了,在版本控制术语中,这种在分支之间拷贝修改的行为叫做搬运修改。" +msgstr "但是当你审查过你的合并结果后,你可以使用svn commit提交修改,在那一刻,修改已经合并到你的分支上了,在版本控制术语中,这种在分支之间拷贝修改的行为叫做搬运修改。" #. (para) #: ../source/book.xml:7182 @@ -7813,7 +7812,7 @@ msgstr "为什么不使用补丁?" #: ../source/book.xml:7197 #, fuzzy msgid "A question may be on your mind, especially if you're a Unix user: why bother to use svn merge at all? Why not simply use the operating system's patch command to accomplish the same job? For example:" -msgstr "也许你的脑中会出现一个问题,特别如果你是Unix用户,为什么非要使用svn merge?为什么不简单的使用操作系统的patch命令来进行相同的工作?举个例子:" +msgstr "也许你的脑中会出现一个问题,特别如果你是Unix用户,为什么非要使用svn merge?为什么不简单的使用操作系统的patch命令来进行相同的工作?举个例子:" #. (screen) #: ../source/book.xml:7202 @@ -7843,13 +7842,13 @@ msgstr "" #: ../source/book.xml:7212 #, fuzzy msgid "In this particular case, yes, there really is no difference. But svn merge has special abilities that surpass the patch program. The file format used by patch is quite limited; it's only able to tweak file contents. There's no way to represent changes to trees, such as the addition, removal, or renaming of files and directories. Nor can the patch program notice changes to properties. If Sally's change had, say, added a new directory, the output of svn diff wouldn't have mentioned it at all. svn diff only outputs the limited patch-format, so there are some ideas it simply can't express. The svn merge command, however, can express changes in tree structure and properties by directly applying them to your working copy." -msgstr "在这种情况下,确实没有区别,但是svn merge有超越patch的特别能力,使用patch对文件格式有一定的限制,它只能针对文件内容,没有方法表现目录树的修改,例如添加、删除或是改名。如果Sally的修改包括增加一个新的目录,svn diff不会注意到这些,svn diff只会输出有限的补丁格式,所以有些问题无法表达。 但是svn merge命令会通过直接作用你的工作拷贝来表示目录树的结构和属性变化。" +msgstr "在这种情况下,确实没有区别,但是svn merge有超越patch的特别能力,使用patch对文件格式有一定的限制,它只能针对文件内容,没有方法表现目录树的修改,例如添加、删除或是改名。如果Sally的修改包括增加一个新的目录,svn diff不会注意到这些,svn diff只会输出有限的补丁格式,所以有些问题无法表达。 但是svn merge命令会通过直接作用你的工作拷贝来表示目录树的结构和属性变化。" #. (para) #: ../source/book.xml:7229 #, fuzzy msgid "A word of warning: while svn diff and svn merge are very similar in concept, they do have different syntax in many cases. Be sure to read about them in for details, or ask svn help. For example, svn merge requires a working-copy path as a target, i.e. a place where it should apply the tree-changes. If the target isn't specified, it assumes you are trying to perform one of the following common operations:" -msgstr "一个警告:为什么svn diffsvn merge在概念上是很接近,但语法上有许多不同,一定阅读第9章来查看其细节或者使用svn help查看帮助。举个例子,svn merge需要一个工作拷贝作为目标,就是一个地方来施展目录树修改,如果一个目标都没有指定,它会假定你要做以下某个普通的操作:" +msgstr "一个警告:为什么svn diffsvn merge在概念上是很接近,但语法上有许多不同,一定阅读第9章来查看其细节或者使用svn help查看帮助。举个例子,svn merge需要一个工作拷贝作为目标,就是一个地方来施展目录树修改,如果一个目标都没有指定,它会假定你要做以下某个普通的操作:" #. (para) #: ../source/book.xml:7240 @@ -7865,7 +7864,7 @@ msgstr "你希望合并修改到你的当前工作目录的相同文件名的文 #: ../source/book.xml:7249 #, fuzzy msgid "If you are merging a directory and haven't specified a target path, svn merge assumes the first case above and tries to apply the changes into your current directory. If you are merging a file, and that file (or a file by the same name) exists in your current working directory, svn merge assumes the second case and tries to apply the changes to a local file with the same name." -msgstr "如果你合并一个目录而没有指定特定的目标,svn merge假定第一种情况,在你的当前目录应用修改。如果你合并一个文件,而这个文件(或是一个有相同的名字文件)在你的当前工作目录存在,svn merge假定第二种情况,你想对这个同名文件使用合并。" +msgstr "如果你合并一个目录而没有指定特定的目标,svn merge假定第一种情况,在你的当前目录应用修改。如果你合并一个文件,而这个文件(或是一个有相同的名字文件)在你的当前工作目录存在,svn merge假定第二种情况,你想对这个同名文件使用合并。" #. (para) #: ../source/book.xml:7256 @@ -7893,13 +7892,13 @@ msgstr "合并背后的关键概念" #: ../source/book.xml:7270 #, fuzzy msgid "You've now seen an example of the svn merge command, and you're about to see several more. If you're feeling confused about exactly how merging works, you're not alone. Many users (especially those new to version control) are initially perplexed about the proper syntax of the command, and about how and when the feature should be used. But fear not, this command is actually much simpler than you think! There's a very easy technique for understanding exactly how svn merge behaves." -msgstr "你已经看到了svn merge命令的例子,你将会看到更多,如果你对合并是如何工作的感到迷惑,这并不奇怪,很多人和你一样。许多新用户(特别是对版本控制很陌生的用户)会对这个命令的正确语法感到不知所措,不知道怎样和什么时候使用这个特性,不要害怕,这个命令实际上比你想象的简单!有一个简单的技巧来帮助你理解svn merge的行为。" +msgstr "你已经看到了svn merge命令的例子,你将会看到更多,如果你对合并是如何工作的感到迷惑,这并不奇怪,很多人和你一样。许多新用户(特别是对版本控制很陌生的用户)会对这个命令的正确语法感到不知所措,不知道怎样和什么时候使用这个特性,不要害怕,这个命令实际上比你想象的简单!有一个简单的技巧来帮助你理解svn merge的行为。" #. (para) #: ../source/book.xml:7280 #, fuzzy msgid "The main source of confusion is the name of the command. The term merge somehow denotes that branches are combined together, or that there's some sort of mysterious blending of data going on. That's not the case. A better name for the command might have been svn diff-and-apply, because that's all that happens: two repository trees are compared, and the differences are applied to a working copy." -msgstr "迷惑的主要原因是这个命令的名称,术语合并不知什么原因被用来表明分支的组合,或者是其他什么神奇的数据混合,这不是事实,一个更好的名称应该是svn diff-and-apply,这是发生的所有事件:首先两个版本库树比较,然后将区别应用到本地拷贝。" +msgstr "迷惑的主要原因是这个命令的名称,术语合并不知什么原因被用来表明分支的组合,或者是其他什么神奇的数据混合,这不是事实,一个更好的名称应该是svn diff-and-apply,这是发生的所有事件:首先两个版本库树比较,然后将区别应用到本地拷贝。" #. (para) #: ../source/book.xml:7289 @@ -7925,13 +7924,13 @@ msgstr "一个接收区别的工作拷贝(通常叫做合并的目 #: ../source/book.xml:7307 #, fuzzy msgid "Once these three arguments are specified, the two trees are compared, and the resulting differences are applied to the target working copy as local modifications. When the command is done, the results are no different than if you had hand-edited the files, or run various svn add or svn delete commands yourself. If you like the results, you can commit them. If you don't like the results, you can simply svn revert all of the changes." -msgstr "一旦这三个参数指定以后,两个目录树将要做比较,比较结果将会作为本地修改应用到目标工作拷贝,当命令结束后,结果同你手工修改或者是使用svn addsvn delete没有什么区别,如果你喜欢这结果,你可以提交,如果不喜欢,你可以使用svn revert恢复修改。" +msgstr "一旦这三个参数指定以后,两个目录树将要做比较,比较结果将会作为本地修改应用到目标工作拷贝,当命令结束后,结果同你手工修改或者是使用svn addsvn delete没有什么区别,如果你喜欢这结果,你可以提交,如果不喜欢,你可以使用svn revert恢复修改。" #. (para) #: ../source/book.xml:7316 #, fuzzy msgid "The syntax of svn merge allows you to specify the three necessary arguments rather flexibly. Here are some examples:" -msgstr "svn merge的语法允许非常灵活的指定参数,如下是一些例子:" +msgstr "svn merge的语法允许非常灵活的指定参数,如下是一些例子:" #. (screen) #: ../source/book.xml:7319 @@ -7989,13 +7988,13 @@ msgstr "然而,写这些的时候,这些特性正在实现中!" #: ../source/book.xml:7361 #, fuzzy msgid "Unfortunately, Subversion is not such a system; it does not yet record any information about merge operations. When you commit local modifications, the repository has no idea whether those changes came from running svn merge, or from just hand-editing the files." -msgstr "不幸的是,Subversion不是这样一个系统,类似于CVS,Subversion并不记录任何合并操作,当你提交本地修改,版本库并不能判断出你是通过svn merge还是手工修改得到这些文件。" +msgstr "不幸的是,Subversion不是这样一个系统,类似于CVS,Subversion并不记录任何合并操作,当你提交本地修改,版本库并不能判断出你是通过svn merge还是手工修改得到这些文件。" #. (para) #: ../source/book.xml:7368 #, fuzzy msgid "What does this mean to you, the user? It means that until the day Subversion grows this feature, you'll have to track merge information yourself. The best place to do this is in the commit log-message. As demonstrated in prior examples, it's recommended that your log-message mention a specific revision number (or range of revisions) that are being merged into your branch. Later on, you can run svn log to review which changes your branch already contains. This will allow you to carefully construct a subsequent svn merge command that won't be redundant with previously ported changes." -msgstr "这对你这样的用户意味着什么?这意味着除非Subversion以后发展这个特性,你必须手工的记录这些信息。最佳的方式是使用提交日志信息,像前面的例子提到的,推荐你在日志信息中说明合并的特定版本号(或是版本号的范围),之后,你可以运行svn log来查看你的分支包含哪些修改。这可以帮助你小心的依序运行svn merge命令而不会进行多余的合并。" +msgstr "这对你这样的用户意味着什么?这意味着除非Subversion以后发展这个特性,你必须手工的记录这些信息。最佳的方式是使用提交日志信息,像前面的例子提到的,推荐你在日志信息中说明合并的特定版本号(或是版本号的范围),之后,你可以运行svn log来查看你的分支包含哪些修改。这可以帮助你小心的依序运行svn merge命令而不会进行多余的合并。" #. (para) #: ../source/book.xml:7380 @@ -8010,25 +8009,25 @@ msgstr "预览合并" #. (para) #: ../source/book.xml:7388 msgid "First, always remember to do your merge into a working copy that has no local edits and has been recently updated. If your working copy isn't clean in these ways, you can run into some headaches." -msgstr "" +msgstr "首先,一定要记住合并的工作拷贝没有本地更改,并且最近已更新过。如果你的工作拷贝用这样的方法清理,你会发现一些头痛的事情。" #. (para) #: ../source/book.xml:7393 #, fuzzy msgid "Assuming your working copy is tidy, merging isn't a particularly high-risk operation. If you get the merge wrong the first time, simply svn revert the changes and try again." -msgstr "因为合并只是导致本地修改,它不是一个高风险的操作,如果你在第一次操作错误,你可以运行svn revert来再试一次。" +msgstr "因为合并只是导致本地修改,它不是一个高风险的操作,如果你在第一次操作错误,你可以运行svn revert来再试一次。" #. (para) #: ../source/book.xml:7397 #, fuzzy msgid "If you've merged into a working copy that already has local modifications, the changes applied by a merge will be mixed with your pre-existing ones, and running svn revert is no longer an option. The two sets of changes may be impossible to separate." -msgstr "有时候你的工作拷贝很可能已经改变了,合并会针对存在的那一个文件,这时运行svn revert不会恢复你在本地作的修改,两部分的修改无法识别出来。" +msgstr "有时候你的工作拷贝很可能已经改变了,合并会针对存在的那一个文件,这时运行svn revert不会恢复你在本地作的修改,两部分的修改无法识别出来。" #. (para) #: ../source/book.xml:7402 #, fuzzy msgid "In cases like this, people take comfort in being able to predict or examine merges before they happen. One simple way to do that is to run svn diff with the same arguments you plan to pass to svn merge, as we already showed in our first example of merging. Another method of previewing is to pass the option to the merge command:" -msgstr "在这个情况下,人们很乐意能够在合并之前预测一下,一个简单的方法是使用运行svn merge同样的参数运行svn diff,另一种方式是传递选项给merge命令:" +msgstr "在这个情况下,人们很乐意能够在合并之前预测一下,一个简单的方法是使用运行svn merge同样的参数运行svn diff,另一种方式是传递选项给merge命令:" #. (screen) #: ../source/book.xml:7410 @@ -8052,7 +8051,7 @@ msgstr "" #: ../source/book.xml:7417 #, fuzzy msgid "The option doesn't actually apply any local changes to the working copy. It only shows status codes that would be printed in a real merge. It's useful for getting a high level preview of the potential merge, for those times when running svn diff gives too much detail." -msgstr "选项实际上并不修改本地拷贝,它只是显示实际合并时的状态信息,对于得到整体的印象,这个命令很有用,因为svn diff包括太多细节。" +msgstr "选项实际上并不修改本地拷贝,它只是显示实际合并时的状态信息,对于得到整体的印象,这个命令很有用,因为svn diff包括太多细节。" #. (title) #: ../source/book.xml:7428 @@ -8063,19 +8062,19 @@ msgstr "合并冲突" #: ../source/book.xml:7430 #, fuzzy msgid "Just like the svn update command, svn merge applies changes to your working copy. And therefore it's also capable of creating conflicts. The conflicts produced by svn merge, however, are sometimes different, and this section explains those differences." -msgstr "就像svn update命令,svn merge会把修改应用到工作拷贝,因此它也会造成冲突,因为svn merge造成的冲突有时候会有些不同,本小节会解释这些区别。" +msgstr "就像svn update命令,svn merge会把修改应用到工作拷贝,因此它也会造成冲突,因为svn merge造成的冲突有时候会有些不同,本小节会解释这些区别。" #. (para) #: ../source/book.xml:7436 #, fuzzy msgid "To begin with, assume that your working copy has no local edits. When you svn update to a particular revision, the changes sent by the server will always apply cleanly to your working copy. The server produces the delta by comparing two trees: a virtual snapshot of your working copy, and the revision tree you're interested in. Because the left-hand side of the comparison is exactly equal to what you already have, the delta is guaranteed to correctly convert your working copy into the right-hand tree." -msgstr "作为开始,我们假定本地没有修改,当你svn update到一个特定修订版本时,修改会干净的应用到工作拷贝,服务器产生比较两树的增量数据:一个工作拷贝和你关注的版本树的虚拟快照,因为比较的左边同你拥有的完全相同,增量数据确保你把工作拷贝转化到右边的树。" +msgstr "作为开始,我们假定本地没有修改,当你svn update到一个特定修订版本时,修改会干净的应用到工作拷贝,服务器产生比较两树的增量数据:一个工作拷贝和你关注的版本树的虚拟快照,因为比较的左边同你拥有的完全相同,增量数据确保你把工作拷贝转化到右边的树。" #. (para) #: ../source/book.xml:7446 #, fuzzy msgid "But svn merge has no such guarantees and can be much more chaotic: the user can ask the server to compare any two trees at all, even ones that are unrelated to the working copy! This means there's large potential for human error. Users will sometimes compare the wrong two trees, creating a delta that doesn't apply cleanly. svn merge will do its best to apply as much of the delta as possible, but some parts may be impossible. Just as the Unix patch command sometimes complains about failed hunks, svn merge will complain about skipped targets:" -msgstr "但是svn merge没有这样的保证,会导致很多的混乱:用户可以询问服务器比较任何两个树,即使一个与工作拷贝毫不相关的!这意味着有潜在的人为错误,用户有时候会比较两个错误的树,创建的增量数据不会干净的应用,svn merge会尽力应用更多的增量数据,但是有一些部分也许会难以完成,就像Unix下patch命令有时候会报告failed hunks错误,svn merge会报告skipped targets:" +msgstr "但是svn merge没有这样的保证,会导致很多的混乱:用户可以询问服务器比较任何两个树,即使一个与工作拷贝毫不相关的!这意味着有潜在的人为错误,用户有时候会比较两个错误的树,创建的增量数据不会干净的应用,svn merge会尽力应用更多的增量数据,但是有一些部分也许会难以完成,就像Unix下patch命令有时候会报告failed hunks错误,svn merge会报告skipped targets:" #. (screen) #: ../source/book.xml:7458 @@ -8105,19 +8104,19 @@ msgstr "" #: ../source/book.xml:7468 #, fuzzy msgid "In the previous example it might be the case that baz.c exists in both snapshots of the branch being compared, and the resulting delta wants to change the file's contents, but the file doesn't exist in the working copy. Whatever the case, the skipped message means that the user is most likely comparing the wrong two trees; they're the classic sign of user error. When this happens, it's easy to recursively revert all the changes created by the merge (svn revert --recursive), delete any unversioned files or directories left behind after the revert, and re-run svn merge with different arguments." -msgstr "在前一个例子中,baz.c也许会存在于比较的两个分支快照里,但工作拷贝里不存在,比较的增量数据要应用到这个文件,这种情况下会发生什么?skipped信息意味着用户可能是在比较错误的两棵树,这是经典的用户错误,当发生这种情况,可以使用迭代恢复(svn revert --recursive)合并所作的修改,删除恢复后留下的所有未版本化的文件和目录,并且使用另外的参数运行svn merge。" +msgstr "在前一个例子中,baz.c也许会存在于比较的两个分支快照里,但工作拷贝里不存在,比较的增量数据要应用到这个文件,这种情况下会发生什么?skipped信息意味着用户可能是在比较错误的两棵树,这是经典的用户错误,当发生这种情况,可以使用迭代恢复(svn revert --recursive)合并所作的修改,删除恢复后留下的所有未版本化的文件和目录,并且使用另外的参数运行svn merge。" #. (para) #: ../source/book.xml:7481 #, fuzzy msgid "Also notice that the previous example shows a conflict happening on glorb.h. We already stated that the working copy has no local edits: how can a conflict possibly happen? Again, because the user can use svn merge to define and apply any old delta to the working copy, that delta may contain textual changes that don't cleanly apply to a working file, even if the file has no local modifications." -msgstr "也应当注意前一个例子显示glorb.h发生了冲突,我们已经规定本地拷贝没有修改:冲突怎么会发生呢?因为用户可以使用svn merge将过去的任何变化应用到当前工作拷贝,变化包含的文本修改也许并不能干净的应用到工作拷贝文件,即使这些文件没有本地修改。" +msgstr "也应当注意前一个例子显示glorb.h发生了冲突,我们已经规定本地拷贝没有修改:冲突怎么会发生呢?因为用户可以使用svn merge将过去的任何变化应用到当前工作拷贝,变化包含的文本修改也许并不能干净的应用到工作拷贝文件,即使这些文件没有本地修改。" #. (para) #: ../source/book.xml:7489 #, fuzzy msgid "Another small difference between svn update and svn merge are the names of the full-text files created when a conflict happens. In , we saw that an update produces files named filename.mine, filename.rOLDREV, and filename.rNEWREV. When svn merge produces a conflict, though, it creates three files named filename.working, filename.left, and filename.right. In this case, the terms left and right are describing which side of the double-tree comparison the file came from. In any case, these differing names will help you distinguish between conflicts that happened as a result of an update versus ones that happened as a result of a merge." -msgstr "另一个svn updatesvn merge的小区别是冲突产生的文件的名字不同,在,我们看到过更新产生的文件名字为filename.minefilename.rOLDREVfilename.rNEWREV,当svn merge产生冲突时,它产生的三个文件分别为 filename.workingfilename.leftfilename.right。在这种情况下,术语leftright表示了两棵树比较时的两边,在两种情况下,不同的名字会帮助你区分冲突是因为更新造成的还是合并造成的。" +msgstr "另一个svn updatesvn merge的小区别是冲突产生的文件的名字不同,在,我们看到过更新产生的文件名字为filename.minefilename.rOLDREVfilename.rNEWREV,当svn merge产生冲突时,它产生的三个文件分别为 filename.workingfilename.leftfilename.right。在这种情况下,术语leftright表示了两棵树比较时的两边,在两种情况下,不同的名字会帮助你区分冲突是因为更新造成的还是合并造成的。" #. (title) #: ../source/book.xml:7511 @@ -8139,7 +8138,7 @@ msgstr "举个例子,假设你提交版本100,包括对svn diff and svn merge. The former command ignores ancestry, while the latter command is quite sensitive to it. For example, if you asked svn diff to compare revisions 99 and 102 of foo.c, you would see line-based diffs; the diff command is blindly comparing two paths. But if you asked svn merge to compare the same two objects, it would notice that they're unrelated and first attempt to delete the old file, then add the new file; the output would indicate a deletion followed by an add:" -msgstr "指出svn diffsvn merge区别的重要性在于,前一个命令忽略祖先,如果你询问svn diff来比较文件foo.c的版本99和102,你会看到行为基础的区别,diff命令只是盲目的比较两条路径,但是如果你使用svn merge是比较同样的两个对象,它会注意到他们是不关联的,而且首先尝试删除旧文件,然后添加新文件,输出会是一个删除紧接着一个增加:" +msgstr "指出svn diffsvn merge区别的重要性在于,前一个命令忽略祖先,如果你询问svn diff来比较文件foo.c的版本99和102,你会看到行为基础的区别,diff命令只是盲目的比较两条路径,但是如果你使用svn merge是比较同样的两个对象,它会注意到他们是不关联的,而且首先尝试删除旧文件,然后添加新文件,输出会是一个删除紧接着一个增加:" #. (screen) #: ../source/book.xml:7543 @@ -8157,7 +8156,7 @@ msgstr "" #: ../source/book.xml:7547 #, fuzzy msgid "Most merges involve comparing trees that are ancestrally related to one another, and therefore svn merge defaults to this behavior. Occasionally, however, you may want the merge command to compare two unrelated trees. For example, you may have imported two source-code trees representing different vendor releases of a software project (see ). If you asked svn merge to compare the two trees, you'd see the entire first tree being deleted, followed by an add of the entire second tree! In these situations, you'll want svn merge to do a path-based comparison only, ignoring any relations between files and directories. Add the option to your merge command, and it will behave just like svn diff. (And conversely, the option will cause svn diff to behave like the merge command.)" -msgstr "大多数合并包括比较包括祖先关联的两条树,因此svn merge这样运作,然而,你也许会希望merge命令能够比较两个不相关的目录树,举个例子,你有两个目录树分别代表了卖主软件项目的不同版本(见),如果你使用svn merge进行比较,你会看到第一个目录树被删除,而第二个树添加上!" +msgstr "大多数合并包括比较包括祖先关联的两条树,因此svn merge这样运作,然而,你也许会希望merge命令能够比较两个不相关的目录树,举个例子,你有两个目录树分别代表了卖主软件项目的不同版本(见),如果你使用svn merge进行比较,你会看到第一个目录树被删除,而第二个树添加上!" #. (title) #: ../source/book.xml:7569 @@ -8173,13 +8172,13 @@ msgstr "一个普遍的愿望是重构源程序,特别是Java软件项目。 #: ../source/book.xml:7578 #, fuzzy msgid "Alas, this scenario doesn't work so well right now, and is considered one of Subversion's current weak spots. The problem is that Subversion's update command isn't as robust as it should be, particularly when dealing with copy and move operations." -msgstr "唉,这个场景下这样并不正确,可以看作Subversion当前的缺点,这个问题是因为Subversion的update不是应该的强壮,特别是针对拷贝和移动操作。" +msgstr "唉,这个场景下这样并不正确,可以看作Subversion当前的缺点,这个问题是因为Subversion的update不是应该的强壮,特别是针对拷贝和移动操作。" #. (para) #: ../source/book.xml:7583 #, fuzzy msgid "When you use svn copy to duplicate a file, the repository remembers where the new file came from, but it fails to transmit that information to the client which is running svn update or svn merge. Instead of telling the client, Copy that file you already have to this new location, it instead sends down an entirely new file. This can lead to problems, especially because the same thing happens with renamed files. A lesser-known fact about Subversion is that it lacks true renames—the svn move command is nothing more than an aggregation of svn copy and svn delete." -msgstr "当你使用svn copy复制文件时,版本库会记住新文件的出处,但是它不能将这个信息传递给使用svn updatesvn merge的客户端,不是告诉客户端 将文件拷贝到新的位置,而是传递一整个新文件。这样会导致问题,特别是因为这件事也发生在改名的文件。 一个鲜为人知的事实是Subversion缺乏真正的重命名—svn move命令只是一个svn copysvn delete的组合。" +msgstr "当你使用svn copy复制文件时,版本库会记住新文件的出处,但是它不能将这个信息传递给使用svn updatesvn merge的客户端,不是告诉客户端 将文件拷贝到新的位置,而是传递一整个新文件。这样会导致问题,特别是因为这件事也发生在改名的文件。 一个鲜为人知的事实是Subversion缺乏真正的重命名—svn move命令只是一个svn copysvn delete的组合。" #. (para) #: ../source/book.xml:7596 @@ -8225,7 +8224,7 @@ msgstr "常见用例" #: ../source/book.xml:7637 #, fuzzy msgid "There are many different uses for branching and svn merge, and this section describes the most common ones you're likely to run into." -msgstr "分支和svn merge有很多不同的用法,这个小节描述了最常见的用法。" +msgstr "分支和svn merge有很多不同的用法,这个小节描述了最常见的用法。" #. (title) #: ../source/book.xml:7643 @@ -8241,25 +8240,25 @@ msgstr "为了完成这个例子,我们将时间往前推进,假定已经过 #: ../source/book.xml:7652 #, fuzzy msgid "So how do we use svn merge in this scenario? Remember that this command compares two trees, and applies the differences to a working copy. So to receive the changes, you need to have a working copy of the trunk. We'll assume that either you still have your original one lying around (fully updated), or that you recently checked out a fresh working copy of /calc/trunk." -msgstr "这种情况下如何使用svn merge?记住这个命令比较两个目录树,然后应用比较结果到工作拷贝,所以要接受这种变化,你需要主干的工作拷贝,我们假设你有一个最初的主干工作拷贝(完全更新),或者是你最近取出了/calc/trunk的一个干净的工作拷贝。" +msgstr "这种情况下如何使用svn merge?记住这个命令比较两个目录树,然后应用比较结果到工作拷贝,所以要接受这种变化,你需要主干的工作拷贝,我们假设你有一个最初的主干工作拷贝(完全更新),或者是你最近取出了/calc/trunk的一个干净的工作拷贝。" #. (para) #: ../source/book.xml:7659 #, fuzzy msgid "But which two trees should be compared? At first glance, the answer may seem obvious: just compare the latest trunk tree with your latest branch tree. But beware—this assumption is wrong, and has burned many a new user! Since svn merge operates like svn diff, comparing the latest trunk and branch trees will not merely describe the set of changes you made to your branch. Such a comparison shows too many changes: it would not only show the addition of your branch changes, but also the removal of trunk changes that never happened on your branch." -msgstr "但是要哪两个树进行比较呢?乍一看,回答很明确,只要比较最新的主干与分支。但是你要意识到—这个想法是错误的,伤害了许多新用户!因为svn merge的操作很像svn diff,比较最新的主干和分支树不仅仅会描述你在分支上所作的修改,这样的比较会展示太多的不同,不仅包括分支上的增加,也包括了主干上的删除操作,而这些删除根本就没有在分支上发生过。" +msgstr "但是要哪两个树进行比较呢?乍一看,回答很明确,只要比较最新的主干与分支。但是你要意识到—这个想法是错误的,伤害了许多新用户!因为svn merge的操作很像svn diff,比较最新的主干和分支树不仅仅会描述你在分支上所作的修改,这样的比较会展示太多的不同,不仅包括分支上的增加,也包括了主干上的删除操作,而这些删除根本就没有在分支上发生过。" #. (para) #: ../source/book.xml:7670 #, fuzzy msgid "To express only the changes that happened on your branch, you need to compare the initial state of your branch to its final state. Using svn log on your branch, you can see that your branch was created in revision 341. And the final state of your branch is simply a matter of using the HEAD revision. That means you want to compare revisions 341 and HEAD of your branch directory, and apply those differences to a working copy of the trunk." -msgstr "为了表示你的分支上的修改,你只需要比较分支的初始状态与最终状态,在你的分支上使用svn log命令,你可以看到你的分支在341版本建立,你的分支最终的状态用HEAD版本表示,这意味着你希望能够比较版本341和HEAD的分支目录,然后应用这些分支的修改到主干目录的工作拷贝。" +msgstr "为了表示你的分支上的修改,你只需要比较分支的初始状态与最终状态,在你的分支上使用svn log命令,你可以看到你的分支在341版本建立,你的分支最终的状态用HEAD版本表示,这意味着你希望能够比较版本341和HEAD的分支目录,然后应用这些分支的修改到主干目录的工作拷贝。" #. (para) #: ../source/book.xml:7680 #, fuzzy msgid "A nice way of finding the revision in which a branch was created (the base of the branch) is to use the option to svn log. The log subcommand will normally show every change ever made to the branch, including tracing back through the copy which created the branch. So normally, you'll see history from the trunk as well. The will halt log output as soon as svn log detects that its target was copied or renamed." -msgstr "查找分支产生的版本(分支的基准)的最好方法是在svn log中使用选项,log子命令通常会显示所有关于分支的变化,包括 创建分支的过程,就好像你在主干上一样,会在svn log检测到目标拷贝或者改名时中止日志输出。" +msgstr "查找分支产生的版本(分支的基准)的最好方法是在svn log中使用选项,log子命令通常会显示所有关于分支的变化,包括 创建分支的过程,就好像你在主干上一样,会在svn log检测到目标拷贝或者改名时中止日志输出。" #. (para) #: ../source/book.xml:7690 @@ -8370,7 +8369,7 @@ msgstr "举个例子,你希望在分支上继续工作一周,来进一步加 #: ../source/book.xml:7745 #, fuzzy msgid "The first step is to run svn log on the trunk, and look for a log message about the last time you merged from the branch:" -msgstr "第一步是在主干上运行svn log察看最后一次与分支合并的日志信息:" +msgstr "第一步是在主干上运行svn log察看最后一次与分支合并的日志信息:" #. (screen) #: ../source/book.xml:7748 @@ -8460,7 +8459,7 @@ msgstr "取消修改" #: ../source/book.xml:7794 #, fuzzy msgid "Another common use for svn merge is to roll back a change that has already been committed. Suppose you're working away happily on a working copy of /calc/trunk, and you discover that the change made way back in revision 303, which changed integer.c, is completely wrong. It never should have been committed. You can use svn merge to undo the change in your working copy, and then commit the local modification to the repository. All you need to do is to specify a reverse difference. (You can do this by specifying , or by an equivalent .)" -msgstr "svn merge另一个常用的做法是取消已经做得提交,假设你愉快的在/calc/trunk工作,你发现303版本对integer.c的修改完全错了,它不应该被提交,你可以使用svn merge取消这个工作拷贝上所作的操作,然后提交本地修改到版本库,你要做得只是指定一个相反的区别。(你可以通过指定完成。)" +msgstr "svn merge另一个常用的做法是取消已经做得提交,假设你愉快的在/calc/trunk工作,你发现303版本对integer.c的修改完全错了,它不应该被提交,你可以使用svn merge取消这个工作拷贝上所作的操作,然后提交本地修改到版本库,你要做得只是指定一个相反的区别。(你可以通过指定完成。)" #. (screen) #: ../source/book.xml:7807 @@ -8504,7 +8503,7 @@ msgstr "" #: ../source/book.xml:7824 #, fuzzy msgid "One way to think about a repository revision is as a specific group of changes (some version control systems call these changesets). By using the option, you can ask svn merge to apply a changeset, or whole range of changesets, to your working copy. In our case of undoing a change, we're asking svn merge to apply changeset #303 to our working copy backwards." -msgstr "我们可以把版本库修订版本想象成一组修改(一些版本控制系统叫做修改集),通过选项,你可以告诉svn merge来应用修改集或是一个修改集范围到你的工作拷贝,在我们的情况例子里,我们使用svn merge合并修改集#303到工作拷贝。" +msgstr "我们可以把版本库修订版本想象成一组修改(一些版本控制系统叫做修改集),通过选项,你可以告诉svn merge来应用修改集或是一个修改集范围到你的工作拷贝,在我们的情况例子里,我们使用svn merge合并修改集#303到工作拷贝。" #. (title) #: ../source/book.xml:7835 @@ -8520,13 +8519,13 @@ msgstr "每一个人对于修改集的概念都有些不一样, #: ../source/book.xml:7846 #, fuzzy msgid "In Subversion, a global revision number N names a tree in the repository: it's the way the repository looked after the Nth commit. It's also the name of an implicit changeset: if you compare tree N with tree N-1, you can derive the exact patch that was committed. For this reason, it's easy to think of revision N as not just a tree, but a changeset as well. If you use an issue tracker to manage bugs, you can use the revision numbers to refer to particular patches that fix bugs—for example, this issue was fixed by revision 9238.. Somebody can then run svn log -r9238 to read about the exact changeset which fixed the bug, and run svn diff -c 9238 to see the patch itself. And Subversion's merge command also uses revision numbers. You can merge specific changesets from one branch to another by naming them in the merge arguments: svn merge -r9237:9238 would merge changeset #9238 into your working copy." -msgstr "在Subversion里,一个全局的修订版本号N标示一个版本库中的树:它代表版本库在N次提交后的样子,它也是一个修改集的隐含名称:如果你比较树N与树N-1,你可以得到你提交的补丁。出于这个原因,想象版本N并不只是一棵树,也是一个修改集。如果你使用一个问题追踪工具来管理bug,你可以使用版本号来表示特定的补丁修正了bug—举个例子,这个问题是在版本9238修正的,然后其他人可以运行svn log -r9238来查看修正这个bug的修改集,或者使用svn diff -r9237:9238来看补丁本身。Subversion的合并命令也使用版本号作为参数,可以将特定修改集从一个分支合到另一个分支:svn merge -r9237:9238将会合并修改集#9238到本地拷贝。" +msgstr "在Subversion里,一个全局的修订版本号N标示一个版本库中的树:它代表版本库在N次提交后的样子,它也是一个修改集的隐含名称:如果你比较树N与树N-1,你可以得到你提交的补丁。出于这个原因,想象版本N并不只是一棵树,也是一个修改集。如果你使用一个问题追踪工具来管理bug,你可以使用版本号来表示特定的补丁修正了bug—举个例子,这个问题是在版本9238修正的,然后其他人可以运行svn log -r9238来查看修正这个bug的修改集,或者使用svn diff -r9237:9238来看补丁本身。Subversion的合并命令也使用版本号作为参数,可以将特定修改集从一个分支合到另一个分支:svn merge -r9237:9238将会合并修改集#9238到本地拷贝。" #. (para) #: ../source/book.xml:7865 #, fuzzy msgid "Keep in mind that rolling back a change like this is just like any other svn merge operation, so you should use svn status and svn diff to confirm that your work is in the state you want it to be in, and then use svn commit to send the final version to the repository. After committing, this particular changeset is no longer reflected in the HEAD revision." -msgstr "记住回滚修改和任何一个svn merge命令都一样,所以你应该使用svn status或是svn diff来确定你的工作处于期望的状态中,然后使用svn commit来提交,提交之后,这个特定修改集不会反映到HEAD版本了。" +msgstr "记住回滚修改和任何一个svn merge命令都一样,所以你应该使用svn status或是svn diff来确定你的工作处于期望的状态中,然后使用svn commit来提交,提交之后,这个特定修改集不会反映到HEAD版本了。" #. (para) #: ../source/book.xml:7873 @@ -8537,7 +8536,7 @@ msgstr "继续,你也许会想:好吧,这不是真的取消提交吧!是 #. (para) #: ../source/book.xml:7893 msgid "The Subversion project has plans, however, to someday implement a command that would accomplish the task of permanently deleting information. In the meantime, see for a possible workaround." -msgstr "Subversion项目有计划,不管用什么方式,会有一天要实现svnadmin obliterate命令来进行永久删除操作,而此时可以看找到可行的方案。" +msgstr "Subversion项目有计划,不管用什么方式,会有一天要实现svnadmin obliterate命令来进行永久删除操作,而此时可以看找到可行的方案。" #. (para) #: ../source/book.xml:7878 @@ -8566,7 +8565,7 @@ msgstr "第一步首先要知道需要拯救的项目是 #: ../source/book.xml:7922 #, fuzzy msgid "First, you might need to use svn log to discover the exact coordinate pair you wish to resurrect. A good strategy is to run svn log --verbose in a directory which used to contain your deleted item. The option shows a list of all changed items in each revision; all you need to do is find the revision in which you deleted the file or directory. You can do this visually, or by using another tool to examine the log output (via grep, or perhaps via an incremental search in an editor)." -msgstr "首先,你需要svn log来察看你需要找回的坐标对,一个好的策略是使用svn log --verbose来察看包含删除项目的目录,--verbose选项显示所有改变的项目的每一个版本 ,你只需要找出你删除文件或目录的那一个版本。你可以通过目测找出这个版本,也可以使用另一种工具来检查日志的输出 (通过grep或是在编辑器里增量查找)。" +msgstr "首先,你需要svn log来察看你需要找回的坐标对,一个好的策略是使用svn log --verbose来察看包含删除项目的目录,--verbose选项显示所有改变的项目的每一个版本 ,你只需要找出你删除文件或目录的那一个版本。你可以通过目测找出这个版本,也可以使用另一种工具来检查日志的输出 (通过grep或是在编辑器里增量查找)。" #. (screen) #: ../source/book.xml:7932 @@ -8615,19 +8614,19 @@ msgstr "以上是最重要的部分—重新找到你需要恢复的对象。现 #: ../source/book.xml:7957 #, fuzzy msgid "One option is to use svn merge to apply revision 808 in reverse. (We've already discussed how to undo changes, see .) This would have the effect of re-adding real.c as a local modification. The file would be scheduled for addition, and after a commit, the file would again exist in HEAD." -msgstr "一种是对版本反向使用svn merge到808(我们已经学会了如何取消修改,见),这样会重新添加real.c,这个文件会列入增加的计划,经过一次提交,这个文件重新回到HEAD。" +msgstr "一种是对版本反向使用svn merge到808(我们已经学会了如何取消修改,见),这样会重新添加real.c,这个文件会列入增加的计划,经过一次提交,这个文件重新回到HEAD。" #. (para) #: ../source/book.xml:7965 #, fuzzy msgid "In this particular example, however, this is probably not the best strategy. Reverse-applying revision 808 would not only schedule real.c for addition, but the log message indicates that it would also undo certain changes to integer.c, which you don't want. Certainly, you could reverse-merge revision 808 and then svn revert the local modifications to integer.c, but this technique doesn't scale well. What if there were 90 files changed in revision 808?" -msgstr "在这个例子里,这不是一个好的策略,这样做不仅把real.c加入添加到计划,也取消了对integer.c的修改,而这不是你期望的。确实,你可以恢复到版本808,然后对integer.c执行取消svn revert操作,但这样的操作无法扩大使用,因为如果从版本808修改了90个文件怎么办?" +msgstr "在这个例子里,这不是一个好的策略,这样做不仅把real.c加入添加到计划,也取消了对integer.c的修改,而这不是你期望的。确实,你可以恢复到版本808,然后对integer.c执行取消svn revert操作,但这样的操作无法扩大使用,因为如果从版本808修改了90个文件怎么办?" #. (para) #: ../source/book.xml:7975 #, fuzzy msgid "A second, more targeted strategy is not to use svn merge at all, but rather the svn copy command. Simply copy the exact revision and path coordinate pair from the repository to your working copy:" -msgstr "所以第二个方法不是使用svn merge,而是使用svn copy命令,精确的拷贝版本和路径坐标对到你的工作拷贝:" +msgstr "所以第二个方法不是使用svn merge,而是使用svn copy命令,精确的拷贝版本和路径坐标对到你的工作拷贝:" #. (screen) #: ../source/book.xml:7980 @@ -8661,7 +8660,7 @@ msgstr "" #: ../source/book.xml:7992 #, fuzzy msgid "The plus sign in the status output indicates that the item isn't merely scheduled for addition, but scheduled for addition with history. Subversion remembers where it was copied from. In the future, running svn log on this file will traverse back through the file's resurrection and through all the history it had prior to revision 807. In other words, this new real.c isn't really new; it's a direct descendant of the original, deleted file." -msgstr "加号标志表明这个项目不仅仅是计划增加中,而且还包含了历史,Subversion记住了它是从哪个拷贝过来的。在将来,对这个文件运行svn log会看到这个文件在版本807之前的历史,换句话说,real.c不是新的,而是原先删除的那一个的后代。" +msgstr "加号标志表明这个项目不仅仅是计划增加中,而且还包含了历史,Subversion记住了它是从哪个拷贝过来的。在将来,对这个文件运行svn log会看到这个文件在版本807之前的历史,换句话说,real.c不是新的,而是原先删除的那一个的后代。" #. (para) #: ../source/book.xml:8001 @@ -8808,7 +8807,7 @@ msgstr "通过比较HEAD修订版本的主 #: ../source/book.xml:8186 #, fuzzy msgid "Another way of thinking about this pattern is that your weekly sync of trunk to branch is analogous to running svn update in a working copy, while the final merge step is analogous to running svn commit from a working copy. After all, what else is a working copy but a very shallow private branch? It's a branch that's only capable of storing one change at a time." -msgstr "可以用另一种考虑这种模式,你每周按时同步分支到主干,类似于在工作拷贝执行svn update的命令,最终的合并操作类似于在工作拷贝运行svn commit,毕竟,工作拷贝不就是一个非常浅的分支吗?只是它一次只可以保存一个修改。" +msgstr "可以用另一种考虑这种模式,你每周按时同步分支到主干,类似于在工作拷贝执行svn update的命令,最终的合并操作类似于在工作拷贝运行svn commit,毕竟,工作拷贝不就是一个非常浅的分支吗?只是它一次只可以保存一个修改。" #. (title) #: ../source/book.xml:8202 @@ -8819,7 +8818,7 @@ msgstr "使用分支" #: ../source/book.xml:8204 #, fuzzy msgid "The svn switch command transforms an existing working copy to reflect a different branch. While this command isn't strictly necessary for working with branches, it provides a nice shortcut. In our earlier example, after creating your private branch, you checked out a fresh working copy of the new repository directory. Instead, you can simply ask Subversion to change your working copy of /calc/trunk to mirror the new branch location:" -msgstr "svn switch命令改变存在的工作拷贝到另一个分支,然而这个命令在分支上工作时不是严格必要的,它只是提供了一个快捷方式。在前面的例子里,完成了私有分支的建立,你取出了新目录的工作拷贝,相反,你可以简单的告诉Subversion改变你的/calc/trunk的工作拷贝到分支的路径:" +msgstr "svn switch命令改变存在的工作拷贝到另一个分支,然而这个命令在分支上工作时不是严格必要的,它只是提供了一个快捷方式。在前面的例子里,完成了私有分支的建立,你取出了新目录的工作拷贝,相反,你可以简单的告诉Subversion改变你的/calc/trunk的工作拷贝到分支的路径:" #. (screen) #: ../source/book.xml:8213 @@ -8864,7 +8863,7 @@ msgstr "完成了到分支的跳转,你的目录与直接取出 #: ../source/book.xml:8235 #, fuzzy msgid "The svn switch command also takes a () option, so you need not always move your working copy to the HEAD of the branch." -msgstr "svn switch命令也可以带)参数,所以你不需要一直移动你的工作拷贝到最新版本。" +msgstr "svn switch命令也可以带)参数,所以你不需要一直移动你的工作拷贝到最新版本。" #. (para) #: ../source/book.xml:8239 @@ -8886,7 +8885,7 @@ msgstr "只是转换工作拷贝的部分目录到分支。 #: ../source/book.xml:8253 #, fuzzy msgid "In other words, if a user knows that the branch-work only needs to happen on a specific subdirectory, they use svn switch to move only that subdirectory to the branch. (Or sometimes users will switch just a single working file to the branch!) That way, they can continue to receive normal trunk updates to most of their working copy, but the switched portions will remain immune (unless someone commits a change to their branch). This feature adds a whole new dimension to the concept of a mixed working copy—not only can working copies contain a mixture of working revisions, but a mixture of repository locations as well." -msgstr "换句话说,如果一个用户知道分支工作只发生在部分子目录,我们使用svn switch来跳转部分目录(有时候只是单个文件),这样的话,他们依然可以继续得到普通的trunk主干的更新,但是已经跳转的部分则被免去了更新(除非分支上有更新)。这个特性给混合工作拷贝概念添加了新的维度—不仅工作拷贝的版本可以混合,在版本库中的位置也可以混合。" +msgstr "换句话说,如果一个用户知道分支工作只发生在部分子目录,我们使用svn switch来跳转部分目录(有时候只是单个文件),这样的话,他们依然可以继续得到普通的trunk主干的更新,但是已经跳转的部分则被免去了更新(除非分支上有更新)。这个特性给混合工作拷贝概念添加了新的维度—不仅工作拷贝的版本可以混合,在版本库中的位置也可以混合。" #. (para) #: ../source/book.xml:8265 @@ -8897,7 +8896,7 @@ msgstr "如果你的工作拷贝包含许多来自不同版本库目录跳转的 #: ../source/book.xml:8276 #, fuzzy msgid "You can, however, use svn switch with the option if the URL of your server changes and you don't want to abandon an existing working copy. See for more information and an example." -msgstr "如果你不希望抛弃已存在的工作拷贝,你可以使用带选项的svn switch命令转换URL,更多信息和例子可以看可以使用带选项的svn switch命令转换URL,更多信息和例子可以看svn switch and svn update look the same? The switch command is actually a superset of the update command." -msgstr "你注意到svn switchsvn update的输出很像?switch命令只是update命令的一个超集。" +msgstr "你注意到svn switchsvn update的输出很像?switch命令只是update命令的一个超集。" #. (para) #: ../source/book.xml:8289 #, fuzzy msgid "When you run svn update, you're asking the repository to compare two trees. The repository does so, and then sends a description of the differences back to the client. The only difference between svn switch and svn update is that the update command always compares two identical paths." -msgstr "当你运行svn update时,你会告诉版本库比较两个目录树,版本库这样做,并且返回给客户区别的描述,svn switchsvn update两个命令唯一区别就是svn update会一直比较同一路径。" +msgstr "当你运行svn update时,你会告诉版本库比较两个目录树,版本库这样做,并且返回给客户区别的描述,svn switchsvn update两个命令唯一区别就是svn update会一直比较同一路径。" #. (para) #: ../source/book.xml:8296 #, fuzzy msgid "That is, if your working copy is a mirror of /calc/trunk, then svn update will automatically compare your working copy of /calc/trunk to /calc/trunk in the HEAD revision. If you're switching your working copy to a branch, then svn switch will compare your working copy of /calc/trunk to some other branch-directory in the HEAD revision." -msgstr "也就是了,如果你的工作拷贝是/calc/trunk的一个镜像,当运行svn update时会自动地比较你的工作拷贝的/calc/trunk与HEAD版本的/calc/trunk。如果你使用svn switch跳转工作拷贝到分支,则会比较你的工作拷贝的/calc/trunk与相应分支目录的HEAD版本。" +msgstr "也就是了,如果你的工作拷贝是/calc/trunk的一个镜像,当运行svn update时会自动地比较你的工作拷贝的/calc/trunk与HEAD版本的/calc/trunk。如果你使用svn switch跳转工作拷贝到分支,则会比较你的工作拷贝的/calc/trunk与相应分支目录的HEAD版本。" #. (para) #: ../source/book.xml:8307 @@ -8936,13 +8935,13 @@ msgstr "换句话说,一个更新通过时间移动你的工作拷贝,一个 #: ../source/book.xml:8311 #, fuzzy msgid "Because svn switch is essentially a variant of svn update, it shares the same behaviors; any local modifications in your working copy are preserved when new data arrives from the repository. This allows you to perform all sorts of clever tricks." -msgstr "因为svn switchsvn update的一个变种,具有相同的行为,当新的数据到达时,任何工作拷贝的已经完成的本地修改会被保存,这里允许你作各种聪明的把戏。" +msgstr "因为svn switchsvn update的一个变种,具有相同的行为,当新的数据到达时,任何工作拷贝的已经完成的本地修改会被保存,这里允许你作各种聪明的把戏。" #. (para) #: ../source/book.xml:8316 #, fuzzy msgid "For example, suppose you have a working copy of /calc/trunk and make a number of changes to it. Then you suddenly realize that you meant to make the changes to a branch instead. No problem! When you svn switch your working copy to the branch, the local changes will remain. You can then test and commit them to the branch." -msgstr "举个例子,你的工作拷贝目录是/calc/trunk,你已经做了很多修改,然后你突然发现应该在分支上修改更好,没问题!你可以使用svn switch,而你本地修改还会保留,你可以测试并提交它们到分支。" +msgstr "举个例子,你的工作拷贝目录是/calc/trunk,你已经做了很多修改,然后你突然发现应该在分支上修改更好,没问题!你可以使用svn switch,而你本地修改还会保留,你可以测试并提交它们到分支。" #. (title) #: ../source/book.xml:8329 @@ -8969,7 +8968,7 @@ msgstr "建立简单标签" #: ../source/book.xml:8348 #, fuzzy msgid "Once again, svn copy comes to the rescue. If you want to create a snapshot of /calc/trunk exactly as it looks in the HEAD revision, then make a copy of it:" -msgstr "svn copy再次登场,你希望建立一个/calc/trunk的一个快照,就像HEAD修订版本,建立这样一个拷贝:" +msgstr "svn copy再次登场,你希望建立一个/calc/trunk的一个快照,就像HEAD修订版本,建立这样一个拷贝:" #. (screen) #: ../source/book.xml:8352 @@ -8993,7 +8992,7 @@ msgstr "" #: ../source/book.xml:8359 #, fuzzy msgid "This example assumes that a /calc/tags directory already exists. (If it doesn't, you can create it using svn mkdir.) After the copy completes, the new release-1.0 directory is forever a snapshot of how the project looked in the HEAD revision at the time you made the copy. Of course you might want to be more precise about exactly which revision you copy, in case somebody else may have committed changes to the project when you weren't looking. So if you know that revision 350 of /calc/trunk is exactly the snapshot you want, you can specify it by passing to the svn copy command." -msgstr "这个例子假定/calc/tags目录已经存在(如果不是,可以使用svn mkdir创建。),拷贝完成之后,一个表示当时HEAD版本的/calc/trunk目录的镜像已经永久的拷贝到release-1.0目录。当然,你会希望更精确一点,以防其他人在你不注意的时候提交修改,所以,如果你知道/calc/trunk的版本350是你想要的快照,你可以使用svn copy加参数 。" +msgstr "这个例子假定/calc/tags目录已经存在(如果不是,可以使用svn mkdir创建。),拷贝完成之后,一个表示当时HEAD版本的/calc/trunk目录的镜像已经永久的拷贝到release-1.0目录。当然,你会希望更精确一点,以防其他人在你不注意的时候提交修改,所以,如果你知道/calc/trunk的版本350是你想要的快照,你可以使用svn copy加参数 。" #. (para) #: ../source/book.xml:8373 @@ -9019,13 +9018,13 @@ msgstr "有时候你希望你的快照能够很复杂,而不只 #: ../source/book.xml:8406 #, fuzzy msgid "For example, pretend your project is much larger than our calc example: suppose it contains a number of subdirectories and many more files. In the course of your work, you may decide that you need to create a working copy that is designed to have specific features and bug fixes. You can accomplish this by selectively backdating files or directories to particular revisions (using svn update -r liberally), or by switching files and directories to particular branches (making use of svn switch). When you're done, your working copy is a hodgepodge of repository locations from different revisions. But after testing, you know it's the precise combination of data you need." -msgstr "举个例子,假定你的项目比我们的的例子calc大的多:假设它保存了一组子目录和许多文件,在你工作时,你或许决定创建一个包括特定特性和Bug修正的工作拷贝,你可以通过选择性的回溯文件和目录到特定修订版本(使用svn update -r)来实现,或者转换文件和目录到特定分支(使用svn switch),这样做之后,你的工作拷贝成为版本库不同版本和分支的司令部,但是经过测试,你会知道这是你需要的一种精确数据组合。" +msgstr "举个例子,假定你的项目比我们的的例子calc大的多:假设它保存了一组子目录和许多文件,在你工作时,你或许决定创建一个包括特定特性和Bug修正的工作拷贝,你可以通过选择性的回溯文件和目录到特定修订版本(使用svn update -r)来实现,或者转换文件和目录到特定分支(使用svn switch),这样做之后,你的工作拷贝成为版本库不同版本和分支的司令部,但是经过测试,你会知道这是你需要的一种精确数据组合。" #. (para) #: ../source/book.xml:8419 #, fuzzy msgid "Time to make a snapshot. Copying one URL to another won't work here. In this case, you want to make a snapshot of your exact working copy arrangement and store it in the repository. Luckily, svn copy actually has four different uses (which you can read about in ), including the ability to copy a working-copy tree to the repository:" -msgstr "是时候进行快照了,拷贝URL在这里不能工作,在这个例子里,你希望把本地拷贝的布局做镜像并且保存到版本库中,幸运的是,svn copy包括四种不同的使用方式(在第9章可以详细阅读),包括拷贝工作拷贝到版本库:" +msgstr "是时候进行快照了,拷贝URL在这里不能工作,在这个例子里,你希望把本地拷贝的布局做镜像并且保存到版本库中,幸运的是,svn copy包括四种不同的使用方式(在第9章可以详细阅读),包括拷贝工作拷贝到版本库:" #. (screen) #: ../source/book.xml:8425 @@ -9057,17 +9056,17 @@ msgstr "现在在版本库有一个新的目录/calc #: ../source/book.xml:8437 #, fuzzy msgid "Other users have found interesting uses for this feature. Sometimes there are situations where you have a bunch of local changes made to your working copy, and you'd like a collaborator to see them. Instead of running svn diff and sending a patch file (which won't capture tree changes, symlink changes or changes in properties), you can instead use svn copy to upload your working copy to a private area of the repository. Your collaborator can then either check out a verbatim copy of your working copy, or use svn merge to receive your exact changes." -msgstr "一些人也发现这一特性一些有趣的使用方式,有些时候本地拷贝有一组本地修改,你希望你的协作者看到这些,不使用svn diff并发送一个补定文件(不会捕捉到目录、符号链和属性的修改),而是使用svn copy上传你的工作拷贝到一个版本库的私有区域,你的协作者可以选择完整的取出你的工作拷贝,或使用svn merge来接受你的精确修改。" +msgstr "一些人也发现这一特性一些有趣的使用方式,有些时候本地拷贝有一组本地修改,你希望你的协作者看到这些,不使用svn diff并发送一个补定文件(不会捕捉到目录、符号链和属性的修改),而是使用svn copy上传你的工作拷贝到一个版本库的私有区域,你的协作者可以选择完整的取出你的工作拷贝,或使用svn merge来接受你的精确修改。" #. (para) #: ../source/book.xml:8448 msgid "While this is a nice method for uploading a quick snapshot of your working copy, note that this is not a good way to initially create a branch. Branch creation should be an event onto itself, and this method conflates the creation of a branch with extra changes to files, all within a single revision. This makes it very difficult (later on) to identify a single revision number as a branch point." -msgstr "" +msgstr "虽然这是上传快速工作拷贝快照的一个好方法,但这不是初始创建分支的好方法。分支创建必须是它本身的事件,而这个方法创建的分支包含了额外修改,都包含在一个单独修订版本里。这让我们很难识别分支点的单个修订版本号码。" #. (para) #: ../source/book.xml:8456 msgid "Have you ever found yourself making some complex edits (in your /trunk working copy) and suddenly realized, hey, these changes ought to be in their own branch? A great technique to do this can be summarized in two steps:" -msgstr "" +msgstr "你是否发现你做出了复杂的修改(在/trunk的工作拷贝),并突然发现,这些修改必须在它们自己的分支?处理这个问题的技术可以总结为两步:" #. (screen) #: ../source/book.xml:8461 @@ -9092,7 +9091,7 @@ msgstr "" #: ../source/book.xml:8469 #, fuzzy msgid "The svn switch command, like svn update, preserves your local edits. At this point, your working copy is now a reflection of the newly created branch, and your next svn commit invocation will send your changes there." -msgstr "就像svn update命令,svn merge会把修改应用到工作拷贝,因此它也会造成冲突,因为svn merge造成的冲突有时候会有些不同,本小节会解释这些区别。" +msgstr "就像svn update命令,svn merge会把修改应用到工作拷贝,因此它也会造成冲突,因为svn merge造成的冲突有时候会有些不同,本小节会解释这些区别。" #. (title) #: ../source/book.xml:8483 @@ -9158,13 +9157,13 @@ msgstr "" #: ../source/book.xml:8520 #, fuzzy msgid "Of course, you're free to ignore these common layouts. You can create any sort of variation, whatever works best for you or your team. Remember that whatever you choose, it's not a permanent commitment. You can reorganize your repository at any time. Because branches and tags are ordinary directories, the svn move command can move or rename them however you wish. Switching from one layout to another is just a matter of issuing a series of server-side moves; if you don't like the way things are organized in the repository, just juggle the directories around." -msgstr "当然,你可以自由的忽略这些通常的布局方式,你可以创建任意的变化,只要是对你和你的项目有益,记住无论你选择什么,这不会是一种永久的承诺,你可以随时重新组织你的版本库。因为分支和标签都是普通的目录,svn move命令可以任意的改名和移动它们,从一种布局到另一种大概只是一系列服务器端的移动,如果你不喜欢版本库的组织方式,你可以任意修改目录结构。" +msgstr "当然,你可以自由的忽略这些通常的布局方式,你可以创建任意的变化,只要是对你和你的项目有益,记住无论你选择什么,这不会是一种永久的承诺,你可以随时重新组织你的版本库。因为分支和标签都是普通的目录,svn move命令可以任意的改名和移动它们,从一种布局到另一种大概只是一系列服务器端的移动,如果你不喜欢版本库的组织方式,你可以任意修改目录结构。" #. (para) #: ../source/book.xml:8530 #, fuzzy msgid "Remember, though, that while moving directories may be easy to do, you need to be considerate of your users as well. Your juggling can be disorienting to users with existing working copies. If a user has a working copy of a particular repository directory, your svn move operation might remove the path from the latest revision. When the user next runs svn update, she will be told that her working copy represents a path that no longer exists, and the user will be forced to svn switch to the new location." -msgstr "记住,尽管移动目录非常容易,你必须体谅你的用户,你的修改会让你的用户感到迷惑,如果一个用户的拥有一个版本库目录的工作拷贝,你的svn move命令也许会删除最新的版本的这个路径,当用户运行svn update,会被告知这个工作拷贝引用的路径已经不再存在,用户需要强制使用svn switch转到新的位置。" +msgstr "记住,尽管移动目录非常容易,你必须体谅你的用户,你的修改会让你的用户感到迷惑,如果一个用户的拥有一个版本库目录的工作拷贝,你的svn move命令也许会删除最新的版本的这个路径,当用户运行svn update,会被告知这个工作拷贝引用的路径已经不再存在,用户需要强制使用svn switch转到新的位置。" #. (title) #: ../source/book.xml:8545 @@ -9197,13 +9196,13 @@ msgstr "" #: ../source/book.xml:8561 #, fuzzy msgid "And now your branch is gone. Of course it's not really gone: the directory is simply missing from the HEAD revision, no longer distracting anyone. If you use svn checkout, svn switch, or svn list to examine an earlier revision, you'll still be able to see your old branch." -msgstr "你的分支已经消失了,当然不是真的消失了:这个目录只是在HEAD修订版本里消失了,如果你使用svn checkoutsvn switch或者svn list来检查一个旧的版本,你仍会见到这个旧的分支。" +msgstr "你的分支已经消失了,当然不是真的消失了:这个目录只是在HEAD修订版本里消失了,如果你使用svn checkoutsvn switch或者svn list来检查一个旧的版本,你仍会见到这个旧的分支。" #. (para) #: ../source/book.xml:8568 #, fuzzy msgid "If browsing your deleted directory isn't enough, you can always bring it back. Resurrecting data is very easy in Subversion. If there's a deleted directory (or file) that you'd like to bring back into HEAD, simply use svn copy -r to copy it from the old revision:" -msgstr "如果浏览你删除的目录还不足够,你可以把它找回来,恢复数据对Subversion来说很简单,如果你希望恢复一个已经删除的目录(或文件)到HEAD,仅需要使用svn copy -r来从旧的版本拷贝出来:" +msgstr "如果浏览你删除的目录还不足够,你可以把它找回来,恢复数据对Subversion来说很简单,如果你希望恢复一个已经删除的目录(或文件)到HEAD,仅需要使用svn copy -r来从旧的版本拷贝出来:" #. (screen) #: ../source/book.xml:8574 @@ -9307,7 +9306,7 @@ msgstr "管理卖主分支通常会像这个样子,你创建一个顶级的目 #: ../source/book.xml:8701 #, fuzzy msgid "Perhaps an example will help to clarify this algorithm. We'll use a scenario where your development team is creating a calculator program that links against a third-party complex number arithmetic library, libcomplex. We'll begin with the initial creation of the vendor branch, and the import of the first vendor drop. We'll call our vendor branch directory libcomplex, and our code drops will go into a subdirectory of our vendor branch called current. And since svn import creates all the intermediate parent directories it needs, we can actually accomplish both of these steps with a single command." -msgstr "也许一个例子有助于我们阐述这个算法,我们会使用这样一个场景,我们的开发团队正在开发一个计算器程序,与一个第三方的复杂数字运算库libcomplex关联。我们从卖主分支的初始创建开始,并且导入卖主drop,我们会把每株分支目录叫做libcomplex,我们的代码drop会进入到卖主分支的子目录current,并且因为svn import创建所有的需要的中间父目录,我们可以使用一个命令完成这一步。" +msgstr "也许一个例子有助于我们阐述这个算法,我们会使用这样一个场景,我们的开发团队正在开发一个计算器程序,与一个第三方的复杂数字运算库libcomplex关联。我们从卖主分支的初始创建开始,并且导入卖主drop,我们会把每株分支目录叫做libcomplex,我们的代码drop会进入到卖主分支的子目录current,并且因为svn import创建所有的需要的中间父目录,我们可以使用一个命令完成这一步。" #. (screen) #: ../source/book.xml:8713 @@ -9380,7 +9379,7 @@ msgstr "为了执行这个升级,我们取出一个我们卖主分支的拷贝 #: ../source/book.xml:8768 #, fuzzy msgid "After replacing the 1.0 code with 1.1 code, svn status will show files with local modifications as well as, perhaps, some unversioned or missing files. If we did what we were supposed to do, the unversioned files are only those new files introduced in the 1.1 release of libcomplex—we run svn add on those to get them under version control. The missing files are files that were in 1.0 but not in 1.1, and on those paths we run svn delete. Finally, once our current working copy contains only the libcomplex 1.1 code, we commit the changes we made to get it looking that way." -msgstr "完成了这个从1.0到1.1的代码替换,svn status会显示文件的本地修改,或许也包括了一些未版本化或者丢失的文件,如果我们做了我们应该做的事情,未版本化的文件应该都是libcomplex在1.1新引入的文件—我们运行svn add来将它们加入到版本控制。丢失的文件是存在于1.1但是不是在1.1,在这些路径我们运行svn delete。最终一旦我们的current工作拷贝只是包括了libcomplex1.1的代码,我们可以提交这些改变目录和文件的修改。" +msgstr "完成了这个从1.0到1.1的代码替换,svn status会显示文件的本地修改,或许也包括了一些未版本化或者丢失的文件,如果我们做了我们应该做的事情,未版本化的文件应该都是libcomplex在1.1新引入的文件—我们运行svn add来将它们加入到版本控制。丢失的文件是存在于1.1但是不是在1.1,在这些路径我们运行svn delete。最终一旦我们的current工作拷贝只是包括了libcomplex1.1的代码,我们可以提交这些改变目录和文件的修改。" #. (para) #: ../source/book.xml:8780 @@ -9429,13 +9428,13 @@ msgstr "svn_load_dirs.pl" #: ../source/book.xml:8828 #, fuzzy msgid "Vendor drops that contain more than a few deletes, additions and moves complicate the process of upgrading to each successive version of the third-party data. So Subversion supplies the svn_load_dirs.pl script to assist with this process. This script automates the importing steps we mentioned in the general vendor branch management procedure to make sure that mistakes are minimized. You will still be responsible for using the merge commands to merge the new versions of the third-party data into your main development branch, but svn_load_dirs.pl can help you more quickly and easily arrive at that stage." -msgstr "不仅仅包含一些删除、添加和移动的卖主drops使得升级第三方数据后续版本的过程变得复杂,所以Subversion提供了一个svn_load_dirs.pl脚本来辅助这个过程,这个脚本自动进行我们前面提到的常规卖主分支管理过程的导入步骤,从而使得错误最小化。你仍要负责使用合并命令合并第三方的新 版本数据合并到主要开发分支,但是svn_load_dirs.pl帮助你快速到达这一步骤。" +msgstr "不仅仅包含一些删除、添加和移动的卖主drops使得升级第三方数据后续版本的过程变得复杂,所以Subversion提供了一个svn_load_dirs.pl脚本来辅助这个过程,这个脚本自动进行我们前面提到的常规卖主分支管理过程的导入步骤,从而使得错误最小化。你仍要负责使用合并命令合并第三方的新 版本数据合并到主要开发分支,但是svn_load_dirs.pl帮助你快速到达这一步骤。" #. (para) #: ../source/book.xml:8840 #, fuzzy msgid "In short, svn_load_dirs.pl is an enhancement to svn import that has several important characteristics:" -msgstr "一句话,svn_load_dirs.pl是一个增强的svn import,具备了许多重要的特性:" +msgstr "一句话,svn_load_dirs.pl是一个增强的svn import,具备了许多重要的特性:" #. (para) #: ../source/book.xml:8845 @@ -9461,7 +9460,7 @@ msgstr "它可以随意为符合正则表达式的文件和目录添加任意的 #: ../source/book.xml:8863 #, fuzzy msgid "svn_load_dirs.pl takes three mandatory arguments. The first argument is the URL to the base Subversion directory to work in. This argument is followed by the URL—relative to the first argument—into which the current vendor drop will be imported. Finally, the third argument is the local directory to import. Using our previous example, a typical run of svn_load_dirs.pl might look like:" -msgstr "svn_load_dirs.pl利用三个强制的参数,第一个参数是Subversion工作的基本目录URL,第二个参数在URL之后—相对于第一个参数—指向当前的卖主分支将会导入的目录,最后,第三个参数是一个需要导入的本地目录,使用前面的例子,一个典型的svn_load_dirs.pl调用看起来如下:" +msgstr "svn_load_dirs.pl利用三个强制的参数,第一个参数是Subversion工作的基本目录URL,第二个参数在URL之后—相对于第一个参数—指向当前的卖主分支将会导入的目录,最后,第三个参数是一个需要导入的本地目录,使用前面的例子,一个典型的svn_load_dirs.pl调用看起来如下:" #. (screen) #: ../source/book.xml:8871 @@ -9483,7 +9482,7 @@ msgstr "" #: ../source/book.xml:8877 #, fuzzy msgid "You can indicate that you'd like svn_load_dirs.pl to tag the new vendor drop by passing the command-line option and specifying a tag name. This tag is another URL relative to the first program argument." -msgstr "你可以说明你会希望svn_load_dirs.pl同时打上标签,这使用命令行选项,需要制定一个标签名。这个标签是第一个参数的一个相对URL。" +msgstr "你可以说明你会希望svn_load_dirs.pl同时打上标签,这使用命令行选项,需要制定一个标签名。这个标签是第一个参数的一个相对URL。" #. (screen) #: ../source/book.xml:8882 @@ -9507,13 +9506,13 @@ msgstr "" #: ../source/book.xml:8889 #, fuzzy msgid "When you run svn_load_dirs.pl, it examines the contents of your existing current vendor drop, and compares them with the proposed new vendor drop. In the trivial case, there will be no files that are in one version and not the other, and the script will perform the new import without incident. If, however, there are discrepancies in the file layouts between versions, svn_load_dirs.pl will ask you how to resolve those differences. For example, you will have the opportunity to tell the script that you know that the file math.c in version 1.0 of libcomplex was renamed to arithmetic.c in libcomplex 1.1. Any discrepancies not explained by moves are treated as regular additions and deletions." -msgstr "当你运行svn_load_dirs.pl,它会检验你的存在的current卖主drop,并且与提议的新卖主drop比较,在这个琐碎的例子里,没有文件只出现在一个版本里,脚本执行新的导入而不会发生意外。然而如果版本之间有了文件布局的区别,svn_load_dirs.pl会询问你如何解决这个区别,例如你会有机会告诉脚本libcomplex版本1.0的math.c文件在1.1已经重命名为arithmetic.c,任何没有解释为移动的差异都会被看作是常规的添加和删除。" +msgstr "当你运行svn_load_dirs.pl,它会检验你的存在的current卖主drop,并且与提议的新卖主drop比较,在这个琐碎的例子里,没有文件只出现在一个版本里,脚本执行新的导入而不会发生意外。然而如果版本之间有了文件布局的区别,svn_load_dirs.pl会询问你如何解决这个区别,例如你会有机会告诉脚本libcomplex版本1.0的math.c文件在1.1已经重命名为arithmetic.c,任何没有解释为移动的差异都会被看作是常规的添加和删除。" #. (para) #: ../source/book.xml:8903 #, fuzzy msgid "The script also accepts a separate configuration file for setting properties on files and directories matching a regular expression that are added to the repository. This configuration file is specified to svn_load_dirs.pl using the command-line option. Each line of the configuration file is a whitespace-delimited set of two or four values: a Perl-style regular expression to match the added path against, a control keyword (either break or cont), and then optionally a property name and value." -msgstr "这个脚本也接受单独配置文件用来为添加到版本库的文件和目录设置匹配正则表达式的属性。配置文件通过svn_load_dirs.pl命令行选项指定,这个配置文件的每一行都是一个空白分割的两列或者四列值:一个Perl样式的正则表达式来匹配添加的路径、一个控制关键字(break或者是cont)和可选的属性名和值。" +msgstr "这个脚本也接受单独配置文件用来为添加到版本库的文件和目录设置匹配正则表达式的属性。配置文件通过svn_load_dirs.pl命令行选项指定,这个配置文件的每一行都是一个空白分割的两列或者四列值:一个Perl样式的正则表达式来匹配添加的路径、一个控制关键字(break或者是cont)和可选的属性名和值。" #. (screen) #: ../source/book.xml:8914 @@ -9549,7 +9548,7 @@ msgstr "任何正则表达式,属性名或者属性值的空格必须使用单 #: ../source/book.xml:8946 #, fuzzy msgid "We've covered a lot of ground in this chapter. We've discussed the concepts of tags and branches, and demonstrated how Subversion implements these concepts by copying directories with the svn copy command. We've shown how to use svn merge to copy changes from one branch to another, or roll back bad changes. We've gone over the use of svn switch to create mixed-location working copies. And we've talked about how one might manage the organization and lifetimes of branches in a repository." -msgstr "我们已经在本章覆盖了许多基础知识,我们讨论了标签和分支的概念,然后描述了Subversion怎样用svn copy命令拷贝目录实现了这些概念,我们也已经展示了怎样使用svn merge命令来在分支之间拷贝修改,或是撤销错误的修改。我们仔细研究了使用svn switch来创建混合位置的工作拷贝,然后我们也讨论了怎样管理和组织版本库中分支的生命周期。" +msgstr "我们已经在本章覆盖了许多基础知识,我们讨论了标签和分支的概念,然后描述了Subversion怎样用svn copy命令拷贝目录实现了这些概念,我们也已经展示了怎样使用svn merge命令来在分支之间拷贝修改,或是撤销错误的修改。我们仔细研究了使用svn switch来创建混合位置的工作拷贝,然后我们也讨论了怎样管理和组织版本库中分支的生命周期。" #. (para) #: ../source/book.xml:8956 @@ -9570,7 +9569,7 @@ msgstr "Subversion版本库是保存任意数量项目版本化数据的中央 #: ../source/book.xml:8978 #, fuzzy msgid "In this chapter, we'll discuss how to create and configure a Subversion repository. We'll also talk about repository maintenance, providing examples of how and when to use the svnlook and svnadmin tools provided with Subversion. We'll address some common questions and mistakes, and give some suggestions on how to arrange the data in the repository." -msgstr "在这一章里,我们将讨论如何建立和配置一个Subversion版本库,还会讨论版本库的维护,包括svnlooksvnadmin工具的使用(它们都包含在Subversion中)。我们将说明一些常见的问题和错误,并提供一些安排版本库数据的建议。" +msgstr "在这一章里,我们将讨论如何建立和配置一个Subversion版本库,还会讨论版本库的维护,包括svnlooksvnadmin工具的使用(它们都包含在Subversion中)。我们将说明一些常见的问题和错误,并提供一些安排版本库数据的建议。" #. (para) #: ../source/book.xml:8990 @@ -10234,7 +10233,7 @@ msgstr "Berkeley DB 4.4(对应Subversion 1.4和更高)提供了在需要恢 #: ../source/book.xml:9571 #, fuzzy msgid "So while a Berkeley DB repository is quite fast and scalable, it's best used by a single server process running as one user—such as Apache's httpd or svnserve (see )—rather than accessing it as many different users via file:// or svn+ssh:// URLs. If using a Berkeley DB repository directly as multiple users, be sure to read ." -msgstr "因为Berkeley DB是这样快速和可伸缩,最好是使用某种单用户单服务进程方式处理—例如Apache的httpdsvnserve(见)—而最好不要使用许多不同的用户通过file://svn+ssh://的URL访问的方法。如果使用多个用户直接访问Berkeley DB版本库的,请确定要读。" +msgstr "因为Berkeley DB是这样快速和可伸缩,最好是使用某种单用户单服务进程方式处理—例如Apache的httpdsvnserve(见)—而最好不要使用许多不同的用户通过file://svn+ssh://的URL访问的方法。如果使用多个用户直接访问Berkeley DB版本库的,请确定要读。" #. (para) #: ../source/book.xml:9584 @@ -10286,7 +10285,7 @@ msgstr "创建版本库" #: ../source/book.xml:9660 #, fuzzy msgid "Subversion repository creation is an incredibly simple task. The svnadmin utility that comes with Subversion provides a subcommand (create) for doing just that." -msgstr "创建一个 Subversion 版本库出乎寻常的简单。 Subversion 提供的svnadmin 工具,有一个执行这个功能的子命令(create)。要建立一个新的版本库,只需要运行:" +msgstr "创建一个 Subversion 版本库出乎寻常的简单。 Subversion 提供的svnadmin 工具,有一个执行这个功能的子命令(create)。要建立一个新的版本库,只需要运行:" #. (screen) #: ../source/book.xml:9664 @@ -10341,7 +10340,7 @@ msgstr "运行这个命令之后,你有了一个Subversion版本库。" #: ../source/book.xml:9688 #, fuzzy msgid "The path argument to svnadmin is just a regular filesystem path and not a URL like the svn client program uses when referring to repositories. Both svnadmin and svnlook are considered server-side utilities—they are used on the machine where the repository resides to examine or modify aspects of the repository, and are in fact unable to perform tasks across a network. A common mistake made by Subversion newcomers is trying to pass URLs (even localfile:// ones) to these two programs." -msgstr "你可能已经注意到了,svnadmin命令的路径参数只是一个普通的文件系统路径,而不是一个svn客户端程序访问版本库时使用的URL。svnadminsvnlook都被认为是服务器端工具—它们在版本库所在的机器上使用,用来检查或修改版本库,不能通过网络来执行任务。一个Subversion的新手通常会犯的错误,就是试图将URL(甚至本地file:路径)传给这两个程序。" +msgstr "你可能已经注意到了,svnadmin命令的路径参数只是一个普通的文件系统路径,而不是一个svn客户端程序访问版本库时使用的URL。svnadminsvnlook都被认为是服务器端工具—它们在版本库所在的机器上使用,用来检查或修改版本库,不能通过网络来执行任务。一个Subversion的新手通常会犯的错误,就是试图将URL(甚至本地file:路径)传给这两个程序。" #. (para) #: ../source/book.xml:9700 @@ -10358,7 +10357,7 @@ msgstr "现在你有了一个版本库,可以用户化了。" #: ../source/book.xml:9711 #, fuzzy msgid "While some parts of a Subversion repository—such as the configuration files and hook scripts—are meant to be examined and modified manually, you shouldn't (and shouldn't need to) tamper with the other parts of the repository by hand. The svnadmin tool should be sufficient for any changes necessary to your repository, or you can look to third-party tools (such as Berkeley DB's tool suite) for tweaking relevant subsections of the repository. Do not attempt manual manipulation of your version control history by poking and prodding around in your repository's data store files!" -msgstr "一般来说,版本库除了一小部分—例如配置文件和钩子脚本,你不需要手动干预版本库。svnadmin工具应该足以用来处理对版本库的任何修改,或者你也可以使用第三方工具(比如Berkeley DB的工具包)来调整部分版本库。要尝试通过处理版本库数据存储文件手工修改版本控制历史," +msgstr "一般来说,版本库除了一小部分—例如配置文件和钩子脚本,你不需要手动干预版本库。svnadmin工具应该足以用来处理对版本库的任何修改,或者你也可以使用第三方工具(比如Berkeley DB的工具包)来调整部分版本库。要尝试通过处理版本库数据存储文件手工修改版本控制历史," #. (title) #: ../source/book.xml:9728 @@ -10397,7 +10396,7 @@ msgstr "" #: ../source/book.xml:9752 #, fuzzy msgid "There is one template for each hook that the Subversion repository supports, and by examining the contents of those template scripts, you can see what triggers each script to run and what data is passed to that script. Also present in many of these templates are examples of how one might use that script, in conjunction with other Subversion-supplied programs, to perform common useful tasks. To actually install a working hook, you need only place some executable program or script into the repos/hooks directory which can be executed as the name (like start-commit or post-commit) of the hook." -msgstr "对每种Subversion版本库支持的钩子的都有一个模板,通过查看这些脚本的内容,你能看到是什么事件触发了脚本及如何给传脚本传递数据。同时,这些模版也是如何使用这些脚本,结合Subversion支持的工具来完成有用任务的例子。要实际安装一个可用的钩子,你需要在repos/hooks目录下安装一些与钩子同名(如 start-commit或者post-commit)的可执行程序或脚本。" +msgstr "对每种Subversion版本库支持的钩子的都有一个模板,通过查看这些脚本的内容,你能看到是什么事件触发了脚本及如何给传脚本传递数据。同时,这些模版也是如何使用这些脚本,结合Subversion支持的工具来完成有用任务的例子。要实际安装一个可用的钩子,你需要在repos/hooks目录下安装一些与钩子同名(如 start-commit或者post-commit)的可执行程序或脚本。" #. (para) #: ../source/book.xml:9764 @@ -10448,7 +10447,7 @@ msgstr "Berkeley DB环境是对一个或多个数据库、日志文件、区域 #: ../source/book.xml:9859 #, fuzzy msgid "The producers of Berkeley DB understand that different applications and database environments have different requirements, and so they have provided a mechanism for overriding at runtime many of the configuration values for the Berkeley DB environment: BDB checks for the presence of a file named DB_CONFIG in the environment directory (namely, the repository's db subdirectory), and parses the options found in that file . Subversion itself creates this file when it creates the rest of the repository. The file initially contains some default options, as well as pointers to the Berkeley DB online documentation so you can read about what those options do. Of course, you are free to add any of the supported Berkeley DB options to your DB_CONFIG file. Just be aware that while Subversion never attempts to read or interpret the contents of the file, and makes no direct use of the option settings in it, you'll want to avoid any configuration changes that may cause Berkeley DB to behave in a fashion that is at odds with what Subversion might expect. Also, changes made to DB_CONFIG won't take effect until you recover the database environment (using svnadmin recover)." -msgstr "你的版本库的Berkeley配置文件位于db目录的db/DB_CONFIG, Subversion在创建版本库时自己创建了这个文件。这个文件初始时包含了一些默认选项,也包含了Berkeley DB在线文档,使你能够了解这些选项是做什么的。当然,你也可以为你的DB_CONFIG 文件添加任何Berkeley DB支持的选项。需要注意到,虽然Subversion不会尝试读取并解析这个文件,或使用其中的设置,你一定要避免会导致Berkeley DB按照Subversion代码不习惯的方式工作的修改。另外,DB_CONFIG的修改在复原数据库环境(用svnadmin recover)之前不会产生任何效果。" +msgstr "你的版本库的Berkeley配置文件位于db目录的db/DB_CONFIG, Subversion在创建版本库时自己创建了这个文件。这个文件初始时包含了一些默认选项,也包含了Berkeley DB在线文档,使你能够了解这些选项是做什么的。当然,你也可以为你的DB_CONFIG 文件添加任何Berkeley DB支持的选项。需要注意到,虽然Subversion不会尝试读取并解析这个文件,或使用其中的设置,你一定要避免会导致Berkeley DB按照Subversion代码不习惯的方式工作的修改。另外,DB_CONFIG的修改在复原数据库环境(用svnadmin recover)之前不会产生任何效果。" #. (title) #: ../source/book.xml:9888 @@ -10475,7 +10474,7 @@ msgstr "Subversion提供了一些用来创建、查看、修改和修复版本 #: ../source/book.xml:9915 #, fuzzy msgid "The svnadmin program is the repository administrator's best friend. Besides providing the ability to create Subversion repositories, this program allows you to perform several maintenance operations on those repositories. The syntax of svnadmin is similar to that of other Subversion command-line programs:" -msgstr "svnadmin程序是版本库管理员最好的朋友。除了提供创建Subversion版本库的功能,这个程序使你可以维护这些版本库。svnadmin的语法同其他Subversion命令类似:" +msgstr "svnadmin程序是版本库管理员最好的朋友。除了提供创建Subversion版本库的功能,这个程序使你可以维护这些版本库。svnadmin的语法同其他Subversion命令类似:" #. (screen) #: ../source/book.xml:9922 @@ -10509,23 +10508,23 @@ msgstr "" #: ../source/book.xml:9934 #, fuzzy msgid "We've already mentioned svnadmin's create subcommand (see ). Most of the others we will cover later in this chapter. And you can consult for a full rundown of subcommands and what each of them offers." -msgstr "我们已经讨论了svnadmincreate子命令(参照),本章后面我们会详细讲解大多数其他的子命令,关于所有的子命令你可以参考。" +msgstr "我们已经讨论了svnadmincreate子命令(参照),本章后面我们会详细讲解大多数其他的子命令,关于所有的子命令你可以参考。" #. (para) #: ../source/book.xml:9945 #, fuzzy msgid "svnlook is a tool provided by Subversion for examining the various revisions and transactions (which are revisions in-the-making) in a repository. No part of this program attempts to change the repository. svnlook is typically used by the repository hooks for reporting the changes that are about to be committed (in the case of the pre-commit hook) or that were just committed (in the case of the post-commit hook) to the repository. A repository administrator may use this tool for diagnostic purposes." -msgstr "svnlook是Subversion提供的用来查看版本库中不同的修订版本和事务。这个程序不会修改版本库内容-这是个只读的工具。svnlook通常用在版本库钩子程序中,用来记录版本库即将提交(用在pre-commit钩子时)或者已经提交的(用在post-commit钩子时)修改。版本库管理员可以将这个工具用于诊断。" +msgstr "svnlook是Subversion提供的用来查看版本库中不同的修订版本和事务。这个程序不会修改版本库内容-这是个只读的工具。svnlook通常用在版本库钩子程序中,用来记录版本库即将提交(用在pre-commit钩子时)或者已经提交的(用在post-commit钩子时)修改。版本库管理员可以将这个工具用于诊断。" #. (para) #: ../source/book.xml:9956 #, fuzzy msgid "svnlook has a straightforward syntax:" -msgstr "svnlook 的语法很直接:" +msgstr "svnlook 的语法很直接:" #. (screen) #: ../source/book.xml:9958 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "$ svnlook help\n" @@ -10543,7 +10542,7 @@ msgstr "" "Note: any subcommand which takes the '--revision' and '--transaction'\n" " options will, if invoked without one of those options, act on\n" " the repository's youngest revision.\n" -"Type 'svnlook help <subcommand>' for help on a specific subcommand.\n" +"Type 'svnlook help <subcommand$gt;' for help on a specific subcommand.\n" "Type 'svnlook --version' to see the program version and FS modules.\n" "…\n" @@ -10551,7 +10550,7 @@ msgstr "" #: ../source/book.xml:9968 #, fuzzy msgid "Nearly every one of svnlook's subcommands can operate on either a revision or a transaction tree, printing information about the tree itself, or how it differs from the previous revision of the repository. You use the and options to specify which revision or transaction, respectively, to examine. In the absence of both the and options, svnlook will examine the youngest (or HEAD) revision in the repository. So the following two commands do exactly the same thing when 19 is the youngest revision in the repository located at /path/to/repos:" -msgstr "几乎svnlook的每一个子命令都能操作修订版本或事务树,显示树本身的信息,或是它与版本库中上一个修订版本的不同。你可以用选项指定要查看的修订版本或事务。如果没有指定选项,svnlook会检查版本库最新的(或者说HEAD)修订版本。所以当19是位于/path/to/repos的版本库的最新版本时,如下的两个名字起到相同的效果:" +msgstr "几乎svnlook的每一个子命令都能操作修订版本或事务树,显示树本身的信息,或是它与版本库中上一个修订版本的不同。你可以用选项指定要查看的修订版本或事务。如果没有指定选项,svnlook会检查版本库最新的(或者说HEAD)修订版本。所以当19是位于/path/to/repos的版本库的最新版本时,如下的两个名字起到相同的效果:" #. (screen) #: ../source/book.xml:9982 @@ -10569,7 +10568,7 @@ msgstr "" #: ../source/book.xml:9986 #, fuzzy msgid "The only exception to these rules about subcommands is the svnlook youngest subcommand, which takes no options, and simply prints out the repository's youngest revision number." -msgstr "这些子命令的唯一例外是svnlook youngest,它不需要任何选项,只会打印出版本库的最新修订版本号。" +msgstr "这些子命令的唯一例外是svnlook youngest,它不需要任何选项,只会打印出版本库的最新修订版本号。" #. (screen) #: ../source/book.xml:9990 @@ -10592,7 +10591,7 @@ msgstr "请记住只能浏览未提交的事物,大多数版本库没有这样 #: ../source/book.xml:10002 #, fuzzy msgid "Output from svnlook is designed to be both human- and machine-parsable. Take as an example the output of the info subcommand:" -msgstr "svnlook的输出被设计为人和机器都易理解,拿info子命令举例来说:" +msgstr "svnlook的输出被设计为人和机器都易理解,拿info子命令举例来说:" #. (screen) #: ../source/book.xml:10005 @@ -10644,25 +10643,25 @@ msgstr "日志信息本身, 后接换行。" #: ../source/book.xml:10030 #, fuzzy msgid "This output is human-readable, meaning items like the datestamp are displayed using a textual representation instead of something more obscure (such as the number of nanoseconds since the Tasty Freeze guy drove by). But the output is also machine-parsable—because the log message can contain multiple lines and be unbounded in length, svnlook provides the length of that message before the message itself. This allows scripts and other wrappers around this command to make intelligent decisions about the log message, such as how much memory to allocate for the message, or at least how many bytes to skip in the event that this output is not the last bit of data in the stream." -msgstr "这种输出是人可阅读的,像是时间戳这种有意义的条目,使用文本表示,而不是其他比较晦涩的方式(例如许多无聊的人推荐的十亿分之一秒的数量)。这种输出也是机器可读的—因为日志信息可以有多行,没有长度的限制,svnlook在日志消息之前提供了消息的长度,这使得脚本或者其他这个命令的封装器能够针对日志信息做出许多职能的决定,或仅仅是在这个输出成为最后一个字节之前应该略过多少字节。" +msgstr "这种输出是人可阅读的,像是时间戳这种有意义的条目,使用文本表示,而不是其他比较晦涩的方式(例如许多无聊的人推荐的十亿分之一秒的数量)。这种输出也是机器可读的—因为日志信息可以有多行,没有长度的限制,svnlook在日志消息之前提供了消息的长度,这使得脚本或者其他这个命令的封装器能够针对日志信息做出许多职能的决定,或仅仅是在这个输出成为最后一个字节之前应该略过多少字节。" #. (para) #: ../source/book.xml:10043 #, fuzzy msgid "svnlook can perform a variety of other queries: displaying subsets of bits of information we've mentioned previously, recursively listing versioned directory trees, reporting which paths were modified in a given revision or transaction, showing textual and property differences made to files and directories, and so on. See for a full reference of svnlook's features." -msgstr "svnlook还可以做很多别的查询:显示我们先前提到的信息的一些子集,递归现实版本目录树,报告指定的修订版本或事务中哪些路径曾经被修改过,显示对文件和目录做过的文本和属性的修改,等等。下面是svnlook命令能接受子命令的完全特性参考。" +msgstr "svnlook还可以做很多别的查询:显示我们先前提到的信息的一些子集,递归现实版本目录树,报告指定的修订版本或事务中哪些路径曾经被修改过,显示对文件和目录做过的文本和属性的修改,等等。下面是svnlook命令能接受子命令的完全特性参考。" #. (para) #: ../source/book.xml:10057 #, fuzzy msgid "While it won't be the most commonly used tool at the administrator's disposal, svndumpfilter provides a very particular brand of useful functionality—the ability to quickly and easily modify streams of Subversion repository history data by acting as a path-based filter." -msgstr "虽然在管理员的日常工作中并不会经常使用,不过svndumpfilter提供了一项特别有用的功能—可以简单快速的作为Subversion版本库历史的以路径为基础的过滤器。" +msgstr "虽然在管理员的日常工作中并不会经常使用,不过svndumpfilter提供了一项特别有用的功能—可以简单快速的作为Subversion版本库历史的以路径为基础的过滤器。" #. (para) #: ../source/book.xml:10063 #, fuzzy msgid "The syntax of svndumpfilter is as follows:" -msgstr "svndumpfilter的语法如下:" +msgstr "svndumpfilter的语法如下:" #. (screen) #: ../source/book.xml:10065 @@ -10719,7 +10718,7 @@ msgstr "将指定路径的数据添加到转储数据流中。" #: ../source/book.xml:10099 #, fuzzy msgid "You can learn more about these subcommands and svndumpfilter's unique purpose in ." -msgstr "关于这些子命令和svndumpfilter的唯一目的的,可以见。" +msgstr "关于这些子命令和svndumpfilter的唯一目的的,可以见。" #. (para) #: ../source/book.xml:10116 @@ -10730,13 +10729,13 @@ msgstr "或者是, sync ?" #: ../source/book.xml:10107 #, fuzzy msgid "The svnsync program, which is new to the 1.4 release of Subversion, provides all the functionality required for maintaining a read-only mirror of a Subversion repository. The program really has one job—to transfer one repository's versioned history into another repository. And while there are few ways to do that, its primary strength is that it can operate remotely—the source and sink repositories may be on different computers from each other and from svnsync itself." -msgstr "svnsync程序是Subversion 1.4版的新特性,提供了维护一个只读版本库镜像的全部功能。这个程序只有一个工作—将一个版本库的历史转移到另一个,尽管有几种方法,但这种方法的主要特点是可以远程操作—源,目标版本库以及svnsync程序可能在不同的计算机上。" +msgstr "svnsync程序是Subversion 1.4版的新特性,提供了维护一个只读版本库镜像的全部功能。这个程序只有一个工作—将一个版本库的历史转移到另一个,尽管有几种方法,但这种方法的主要特点是可以远程操作—源,目标版本库以及svnsync程序可能在不同的计算机上。" #. (para) #: ../source/book.xml:10119 #, fuzzy msgid "As you might expect, svnsync has a syntax that looks very much like every other program we've mentioned in this chapter:" -msgstr "就像你期望的,svnsync的语法与其他本节提到的命令非常类似。" +msgstr "就像你期望的,svnsync的语法与其他本节提到的命令非常类似。" #. (screen) #: ../source/book.xml:10122 @@ -10772,7 +10771,7 @@ msgstr "" #: ../source/book.xml:10135 #, fuzzy msgid "We talk more about replication repositories with svnsync in ." -msgstr "我们会在详细讨论使用svnsync实现版本库复制。" +msgstr "我们会在详细讨论使用svnsync实现版本库复制。" #. (title) #: ../source/book.xml:10141 @@ -10789,13 +10788,13 @@ msgstr "如果你使用Berkeley DB版本库,那么所有纳入版本控制的 #: ../source/book.xml:10151 #, fuzzy msgid "For day-to-day Subversion use, these tools are unnecessary. Most of the functionality typically needed for Subversion repositories has been duplicated in the svnadmin tool. For example, svnadmin list-unused-dblogs and svnadmin list-dblogs perform a subset of what is provided by the Berkeley db_archive command, and svnadmin recover reflects the common use cases of the db_recover utility." -msgstr "对于Subversion的日常使用来说,这些工具并没有什么用处。大多数Subversion版本库必须的数据库操作都集成到svnadmin工具中。比如,svnadmin list-unused-dblogssvnadmin list-dblogs实现了Berkeley db_archive命令功能的一个子集,而svnadmin recover则起到了 db_recover工具的作用。" +msgstr "对于Subversion的日常使用来说,这些工具并没有什么用处。大多数Subversion版本库必须的数据库操作都集成到svnadmin工具中。比如,svnadmin list-unused-dblogssvnadmin list-dblogs实现了Berkeley db_archive命令功能的一个子集,而svnadmin recover则起到了 db_recover工具的作用。" #. (para) #: ../source/book.xml:10161 #, fuzzy msgid "However, there are still a few Berkeley DB utilities that you might find useful. The db_dump and db_load programs write and read, respectively, a custom file format which describes the keys and values in a Berkeley DB database. Since Berkeley databases are not portable across machine architectures, this format is a useful way to transfer those databases from machine to machine, irrespective of architecture or operating system. As we describe later in this chapter, you can also use svnadmin dump and svnadmin load for similar purposes, but db_dump and db_load can do certain jobs just as well and much faster. They can also be useful if the experienced Berkeley DB hacker needs to do in-place tweaking of the data in a BDB-backed repository for some reason, which is something Subversion's utilities won't allow. Also, the db_stat utility can provide useful information about the status of your Berkeley DB environment, including detailed statistics about the locking and storage subsystems." -msgstr "当然,还有一些Berkeley DB工具有时是有用的。db_dump将Berkeley DB数据库中的键值对以特定的格式写入文件中,而db_load则可以将这些键值对注入到数据库中。Berkeley数据库本身不支持跨平台转移,这两个工具在这样的情况下就可以实现在平台间转移数据库的功能,而无需关心操作系统或机器架构。此外,db_stat工具能够提供关于Berkeley DB环境的许多有用信息,包括详细的锁定和存储子系统的统计信息。" +msgstr "当然,还有一些Berkeley DB工具有时是有用的。db_dump将Berkeley DB数据库中的键值对以特定的格式写入文件中,而db_load则可以将这些键值对注入到数据库中。Berkeley数据库本身不支持跨平台转移,这两个工具在这样的情况下就可以实现在平台间转移数据库的功能,而无需关心操作系统或机器架构。此外,db_stat工具能够提供关于Berkeley DB环境的许多有用信息,包括详细的锁定和存储子系统的统计信息。" #. (para) #: ../source/book.xml:10181 @@ -10812,13 +10811,13 @@ msgstr "修正提交消息" #: ../source/book.xml:10191 #, fuzzy msgid "Sometimes a user will have an error in her log message (a misspelling or some misinformation, perhaps). If the repository is configured (using the pre-revprop-change hook; see ) to accept changes to this log message after the commit is finished, then the user can fix her log message remotely using the svn program's propset command (see ). However, because of the potential to lose information forever, Subversion repositories are not, by default, configured to allow changes to unversioned properties—except by an administrator." -msgstr "有时用户输入的日志信息有错误(比如拼写错误或者内容错误)。如果配置版本库时设置了(使用pre-revprop-changepost-revprop-change钩子;参见)允许用户在提交后修改日志信息的选项,那么用户可以使用svn程序的propset命令(参见修正日志信息中的错误。不过为了避免永远丢失信息,Subversion版本库通常设置为仅能由管理员修改非版本化属性(这也是默认的选项)。" +msgstr "有时用户输入的日志信息有错误(比如拼写错误或者内容错误)。如果配置版本库时设置了(使用pre-revprop-changepost-revprop-change钩子;参见)允许用户在提交后修改日志信息的选项,那么用户可以使用svn程序的propset命令(参见修正日志信息中的错误。不过为了避免永远丢失信息,Subversion版本库通常设置为仅能由管理员修改非版本化属性(这也是默认的选项)。" #. (para) #: ../source/book.xml:10203 #, fuzzy msgid "If a log message needs to be changed by an administrator, this can be done using svnadmin setlog. This command changes the log message (the svn:log property) on a given revision of a repository, reading the new value from a provided file." -msgstr "如果管理员想要修改日志信息,那么可以使用svnadmin setlog命令。这个命令从指定的文件中读取信息,取代版本库中某个修订版本的日志信息(svn:log属性)。" +msgstr "如果管理员想要修改日志信息,那么可以使用svnadmin setlog命令。这个命令从指定的文件中读取信息,取代版本库中某个修订版本的日志信息(svn:log属性)。" #. (screen) #: ../source/book.xml:10208 @@ -10836,7 +10835,7 @@ msgstr "" #: ../source/book.xml:10212 #, fuzzy msgid "The svnadmin setlog command, by default, is still bound by the same protections against modifying unversioned properties as a remote client is—the pre- and post-revprop-change hooks are still triggered, and therefore must be set up to accept changes of this nature. But an administrator can get around these protections by passing the option to the svnadmin setlog command." -msgstr "即使是svnadmin setlog命令也受到限制。pre-post-revprop-change钩子同样会被触发,因此必须进行相应的设置才能允许修改非版本化属性。不过管理员可以使用svnadmin setlog命令的选项跳过钩子。" +msgstr "即使是svnadmin setlog命令也受到限制。pre-post-revprop-change钩子同样会被触发,因此必须进行相应的设置才能允许修改非版本化属性。不过管理员可以使用svnadmin setlog命令的选项跳过钩子。" #. (para) #: ../source/book.xml:10223 @@ -10885,7 +10884,7 @@ msgstr "尽管不太常见,Subversion的提交进程也有失败,同时留 #: ../source/book.xml:10299 #, fuzzy msgid "You can use svnadmin's lstxns command to list the names of the currently outstanding transactions." -msgstr "可以使用svnadminlstxns 命令列出当前的异常事务名。" +msgstr "可以使用svnadminlstxns 命令列出当前的异常事务名。" #. (screen) #: ../source/book.xml:10302 @@ -10909,7 +10908,7 @@ msgstr "" #: ../source/book.xml:10309 #, fuzzy msgid "Each item in the resultant output can then be used with svnlook (and its option) to determine who created the transaction, when it was created, what types of changes were made in the transaction—information that is helpful in determining whether or not the transaction is a safe candidate for removal! If you do indeed want to remove a transaction, its name can be passed to svnadmin rmtxns, which will perform the cleanup of the transaction. In fact, the rmtxns subcommand can take its input directly from the output of lstxns!" -msgstr "将输出的结果条目作为svnlook(设置选项)的参数,就可以获得事务的详细信息,如事务的创建者、创建时间,事务已作出的更改类型,由这些信息可以判断出是否可以将这个事务安全的删除。如果可以安全删除,那么只需将事务名作为参数输入到svnadmin rmtxns,就可以将事务清除掉了。其实rmtxns子命令可以直接以lstxns的输出作为输入进行清理。" +msgstr "将输出的结果条目作为svnlook(设置选项)的参数,就可以获得事务的详细信息,如事务的创建者、创建时间,事务已作出的更改类型,由这些信息可以判断出是否可以将这个事务安全的删除。如果可以安全删除,那么只需将事务名作为参数输入到svnadmin rmtxns,就可以将事务清除掉了。其实rmtxns子命令可以直接以lstxns的输出作为输入进行清理。" #. (screen) #: ../source/book.xml:10322 @@ -10975,7 +10974,7 @@ msgstr "" #: ../source/book.xml:10355 #, fuzzy msgid "The output of the script is basically a concatenation of several chunks of svnlook info output (see ), and will look something like:" -msgstr "该命令的输出主要由多个svnlook info(参见)的输出组成,类似于下面的例子:" +msgstr "该命令的输出主要由多个svnlook info(参见)的输出组成,类似于下面的例子:" #. (screen) #: ../source/book.xml:10359 @@ -11040,13 +11039,13 @@ msgstr "目前为止,Subversion版本库中耗费磁盘空间的最大凶手 #: ../source/book.xml:10405 #, fuzzy msgid "Fortunately, beginning with the 4.2 release of Berkeley DB, the database environment has the ability to remove its own unused log files automatically. Any repositories created using an svnadmin which is compiled against Berkeley DB version 4.2 or greater will be configured for this automatic log file removal. If you don't want this feature enabled, simply pass the option to the svnadmin create command. If you forget to do this, or change your mind at a later time, simply edit the DB_CONFIG file found in your repository's db directory, comment out the line which contains the set_flags DB_LOG_AUTOREMOVE directive, and then run svnadmin recover on your repository to force the configuration changes to take effect. See for more information about database configuration." -msgstr "幸运的是,从版本4.2开始,Berkeley DB的数据库环境无需额外的操作即可删除无用的日志文件。如果编译svnadmin时使用了高于4.2版本的Berkeley DB,那么由此svnadmin程序创建的版本库就具备了自动清除日志文件的功能。如果想屏蔽这个功能,只需设置svnadmin create命令的选项即可。如果创建版本库以后想要修改关于此功能的设置,只需编辑版本库中db目录下的DB_CONFIG文件,注释掉包含set_flags DB_LOG_AUTOREMOVE内容的这一行,然后运行svnadmin recover强制设置生效就行了。查阅获得更多关于数据库配置的帮助信息。" +msgstr "幸运的是,从版本4.2开始,Berkeley DB的数据库环境无需额外的操作即可删除无用的日志文件。如果编译svnadmin时使用了高于4.2版本的Berkeley DB,那么由此svnadmin程序创建的版本库就具备了自动清除日志文件的功能。如果想屏蔽这个功能,只需设置svnadmin create命令的选项即可。如果创建版本库以后想要修改关于此功能的设置,只需编辑版本库中db目录下的DB_CONFIG文件,注释掉包含set_flags DB_LOG_AUTOREMOVE内容的这一行,然后运行svnadmin recover强制设置生效就行了。查阅获得更多关于数据库配置的帮助信息。" #. (para) #: ../source/book.xml:10422 #, fuzzy msgid "Without some sort of automatic log file removal in place, log files will accumulate as you use your repository. This is actually somewhat of a feature of the database system—you should be able to recreate your entire database using nothing but the log files, so these files can be useful for catastrophic database recovery. But typically, you'll want to archive the log files that are no longer in use by Berkeley DB, and then remove them from disk to conserve space. Use the svnadmin list-unused-dblogs command to list the unused log files:" -msgstr "如果不自动删除日志文件,那么日志文件会随着版本库的使用逐渐增加。这多少应该算是数据库系统的特性,通过这些日志文件可以在数据库严重损坏时恢复整个数据库的内容。但是一般情况下,最好是能够将无用的日志文件收集起来并删除,这样就可以节省磁盘空间。使用svnadmin list-unused-dblogs命令可以列出无用的日志文件:" +msgstr "如果不自动删除日志文件,那么日志文件会随着版本库的使用逐渐增加。这多少应该算是数据库系统的特性,通过这些日志文件可以在数据库严重损坏时恢复整个数据库的内容。但是一般情况下,最好是能够将无用的日志文件收集起来并删除,这样就可以节省磁盘空间。使用svnadmin list-unused-dblogs命令可以列出无用的日志文件:" #. (screen) #: ../source/book.xml:10433 @@ -11125,7 +11124,7 @@ msgstr "成为版本库的拥有者和管理员。这一点很重要,如果以 #: ../source/book.xml:10521 #, fuzzy msgid "Run the command svnadmin recover /path/to/repos. You should see output like this:" -msgstr "运行命令svnadmin recover /path/to/repos。 输出如下:" +msgstr "运行命令svnadmin recover /path/to/repos。 输出如下:" #. (screen) #: ../source/book.xml:10524 @@ -11182,7 +11181,7 @@ msgstr "Subversion文件系统将数据保存在许多数据库表中,而这 #: ../source/book.xml:10568 #, fuzzy msgid "Subversion provides such functionality by way of repository dump streams. A repository dump stream (often referred to as a dumpfile when stored as a file on disk) is a portable, flat file format that describes the various revisions in your repository—what was changed, by whom, when, and so on. This dump stream is the primary mechanism used to marshal versioned history—in whole or in part, with or without modification—between repositories. And Subversion provides the tools necessary for creating and loading these dump streams—the svnadmin dump and svnadmin load subcommands, respectively." -msgstr "Subversion提供了转储版本库的功能,一个版本库转储流(当存放在磁盘上叫做dumpfile)是一种可移植的,普通文件格式,可以用来描述版本库的不同版本—什么发生了修改,谁做的,何时等等。这种转储流是解析版本化历史的主要机制—全部或部分,包含或部包含修改—在版本库之间。Subversion也提供了创建和加载这些转储流的工具—对应的svnadmin dumpsvnadmin load子命令。" +msgstr "Subversion提供了转储版本库的功能,一个版本库转储流(当存放在磁盘上叫做dumpfile)是一种可移植的,普通文件格式,可以用来描述版本库的不同版本—什么发生了修改,谁做的,何时等等。这种转储流是解析版本化历史的主要机制—全部或部分,包含或部包含修改—在版本库之间。Subversion也提供了创建和加载这些转储流的工具—对应的svnadmin dumpsvnadmin load子命令。" #. (para) #: ../source/book.xml:10581 @@ -11199,7 +11198,7 @@ msgstr "有很多导出和加载Subversion版本库数据的方法,在Subversi #: ../source/book.xml:10607 #, fuzzy msgid "Whatever your reason for migrating repository history, using the svnadmin dump and svnadmin load subcommands is straightforward. svnadmin dump will output a range of repository revisions that are formatted using Subversion's custom filesystem dump format. The dump format is printed to the standard output stream, while informative messages are printed to the standard error stream. This allows you to redirect the output stream to a file while watching the status output in your terminal window. For example:" -msgstr "无论你是什么原因需要移植版本库历史,都可以直接使用svnadmin dumpsvnadmin loadsvnadmin dump命令会将版本库中的修订版本数据按照特定的格式输出到转储流中。转储数据会输出到标准输出,而提示信息会输出到标准错误。这就是说,可以将转储数据存储到文件中,而同时在终端窗口中监视运行状态,例如:" +msgstr "无论你是什么原因需要移植版本库历史,都可以直接使用svnadmin dumpsvnadmin loadsvnadmin dump命令会将版本库中的修订版本数据按照特定的格式输出到转储流中。转储数据会输出到标准输出,而提示信息会输出到标准错误。这就是说,可以将转储数据存储到文件中,而同时在终端窗口中监视运行状态,例如:" #. (screen) #: ../source/book.xml:10618 @@ -11231,13 +11230,13 @@ msgstr "" #: ../source/book.xml:10629 #, fuzzy msgid "At the end of the process, you will have a single file (dumpfile in the previous example) that contains all the data stored in your repository in the requested range of revisions. Note that svnadmin dump is reading revision trees from the repository just like any other reader process would (svn checkout, for example), so it's safe to run this command at any time." -msgstr "最后,版本库中的指定的修订版本数据被转储到一个独立的文件中(在上面的例子中是dumpfile)。注意,svnadmin dump从版本库中读取修订版本树与其它读者(比如svn checkout)的过程相同,所以可以在任何时候安全的运行这个命令。" +msgstr "最后,版本库中的指定的修订版本数据被转储到一个独立的文件中(在上面的例子中是dumpfile)。注意,svnadmin dump从版本库中读取修订版本树与其它读者(比如svn checkout)的过程相同,所以可以在任何时候安全的运行这个命令。" #. (para) #: ../source/book.xml:10637 #, fuzzy msgid "The other subcommand in the pair, svnadmin load, parses the standard input stream as a Subversion repository dump file, and effectively replays those dumped revisions into the target repository for that operation. It also gives informative feedback, this time using the standard output stream:" -msgstr "另一个命令,svnadmin load,从标准输入流中读取Subversion转储数据,并且高效的将数据转载到目标版本库中。这个命令的提示信息输出到标准输出流中:" +msgstr "另一个命令,svnadmin load,从标准输入流中读取Subversion转储数据,并且高效的将数据转载到目标版本库中。这个命令的提示信息输出到标准输出流中:" #. (screen) #: ../source/book.xml:10643 @@ -11303,17 +11302,17 @@ msgstr "" #: ../source/book.xml:10671 #, fuzzy msgid "The result of a load is new revisions added to a repository—the same thing you get by making commits against that repository from a regular Subversion client. And just as in a commit, you can use hook programs to perform actions before and after each of the commits made during a load process. By passing the and options to svnadmin load, you can instruct Subversion to execute the pre-commit and post-commit hook programs, respectively, for each loaded revision. You might use these, for example, to ensure that loaded revisions pass through the same validation steps that regular commits pass through. Of course, you should use these options with care—if your post-commit hook sends emails to a mailing list for each new commit, you might not want to spew hundreds or thousands of commit emails in rapid succession at that list! You can read more about the use of hook scripts in ." -msgstr "load命令的结果就是添加一些新的修订版本—与使用普通Subversion客户端直接提交到版本库相同。正像一次简单的提交,你也可以使用钩子脚本在每次load的开始和结束执行一些操作。通过传递选项给svnadmin load,你可以告诉Subversion的对每一个加载修订版本执行pre-commit和post-commit钩子脚本,可以利用这个选项确保这种提交也能通过一般提交的检验。当然,你要小心使用这个选项,你一定不想接受一大堆提交邮件。你可以查看来得到更多相关信息。" +msgstr "load命令的结果就是添加一些新的修订版本—与使用普通Subversion客户端直接提交到版本库相同。正像一次简单的提交,你也可以使用钩子脚本在每次load的开始和结束执行一些操作。通过传递选项给svnadmin load,你可以告诉Subversion的对每一个加载修订版本执行pre-commit和post-commit钩子脚本,可以利用这个选项确保这种提交也能通过一般提交的检验。当然,你要小心使用这个选项,你一定不想接受一大堆提交邮件。你可以查看来得到更多相关信息。" #. (para) #: ../source/book.xml:10689 #, fuzzy msgid "Note that because svnadmin uses standard input and output streams for the repository dump and load process, people who are feeling especially saucy can try things like this (perhaps even using different versions of svnadmin on each side of the pipe):" -msgstr "既然svnadmin使用标准输入流和标准输出流作为转储和装载的输入和输出,那么更漂亮的用法是(管道两端可以是不同版本的svnadmin:" +msgstr "既然svnadmin使用标准输入流和标准输出流作为转储和装载的输入和输出,那么更漂亮的用法是(管道两端可以是不同版本的svnadmin:" #. (screen) #: ../source/book.xml:10694 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "$ svnadmin create newrepos\n" @@ -11321,7 +11320,7 @@ msgid "" msgstr "" "\n" "$ svnadmin create newrepos\n" -"$ svnadmin dump oldrepos | svnadmin load newrepos\n" +"$ svnadmin dump myrepos | svnadmin load newrepos\n" #. (para) #: ../source/book.xml:10698 @@ -11333,7 +11332,7 @@ msgstr "默认情况下,转储文件的体积可能会相当庞大——比版 #: ../source/book.xml:10712 #, fuzzy msgid "We mentioned previously that svnadmin dump outputs a range of revisions. Use the option to specify a single revision to dump, or a range of revisions. If you omit this option, all the existing repository revisions will be dumped." -msgstr "之前我们提到svnadmin dump输出指定范围i内、的修订版本。使用选项可以指定一个单独的修订版本,或者一个修订版本的范围。如果忽略这个选项,所有版本库中的修订版本都会被转储。" +msgstr "之前我们提到svnadmin dump输出指定范围i内、的修订版本。使用选项可以指定一个单独的修订版本,或者一个修订版本的范围。如果忽略这个选项,所有版本库中的修订版本都会被转储。" #. (screen) #: ../source/book.xml:10718 @@ -11351,19 +11350,19 @@ msgstr "" #: ../source/book.xml:10722 #, fuzzy msgid "As Subversion dumps each new revision, it outputs only enough information to allow a future loader to re-create that revision based on the previous one. In other words, for any given revision in the dump file, only the items that were changed in that revision will appear in the dump. The only exception to this rule is the first revision that is dumped with the current svnadmin dump command." -msgstr "Subversion在转储修订版本时,仅会输出与前一个修订版本之间的差异,通过这些差异足以从前一个修订版本中重建当前的修订版本。换句话说,在转储文件中的每一个修订版本仅包含这个修订版本作出的修改。这个规则的唯一一个例外是当前svnadmin dump转储的第一个修订版本。" +msgstr "Subversion在转储修订版本时,仅会输出与前一个修订版本之间的差异,通过这些差异足以从前一个修订版本中重建当前的修订版本。换句话说,在转储文件中的每一个修订版本仅包含这个修订版本作出的修改。这个规则的唯一一个例外是当前svnadmin dump转储的第一个修订版本。" #. (para) #: ../source/book.xml:10730 #, fuzzy msgid "By default, Subversion will not express the first dumped revision as merely differences to be applied to the previous revision. For one thing, there is no previous revision in the dump file! And secondly, Subversion cannot know the state of the repository into which the dump data will be loaded (if it ever is). To ensure that the output of each execution of svnadmin dump is self-sufficient, the first dumped revision is by default a full representation of every directory, file, and property in that revision of the repository." -msgstr "默认情况下,Subversion不会把转储的第一个修订版本看作对前一个修订版本的更改。 首先,转储文件中没有比第一个修订版本更靠前的修订版本了!其次,Subversion不知道装载转储数据时(如果真的需要装载的话)的版本库是什么样的情况。为了保证每次运行svnadmin dump都能得到一个独立的结果,第一个转储的修订版本默认情况下会完整的保存目录、文件以及属性等数据。" +msgstr "默认情况下,Subversion不会把转储的第一个修订版本看作对前一个修订版本的更改。 首先,转储文件中没有比第一个修订版本更靠前的修订版本了!其次,Subversion不知道装载转储数据时(如果真的需要装载的话)的版本库是什么样的情况。为了保证每次运行svnadmin dump都能得到一个独立的结果,第一个转储的修订版本默认情况下会完整的保存目录、文件以及属性等数据。" #. (para) #: ../source/book.xml:10740 #, fuzzy msgid "However, you can change this default behavior. If you add the option when you dump your repository, svnadmin will compare the first dumped revision against the previous revision in the repository, the same way it treats every other revision that gets dumped. It will then output the first revision exactly as it does the rest of the revisions in the dump range—mentioning only the changes that occurred in that revision. The benefit of this is that you can create several small dump files that can be loaded in succession, instead of one large one, like so:" -msgstr "不过,这些都是可以改变的。如果转储时设置了选项,svnadmin会比较第一个转储的修订版本和版本库中前一个修订版本,就像对待其它转储的修订版本一样。转储时也是一样,转储文件中将仅包含第一个转储的修订版本的增量信息。这样的好处是,可以创建几个连续的小体积的转储文件代替一个大文件,比如:" +msgstr "不过,这些都是可以改变的。如果转储时设置了选项,svnadmin会比较第一个转储的修订版本和版本库中前一个修订版本,就像对待其它转储的修订版本一样。转储时也是一样,转储文件中将仅包含第一个转储的修订版本的增量信息。这样的好处是,可以创建几个连续的小体积的转储文件代替一个大文件,比如:" #. (screen) #: ../source/book.xml:10751 @@ -11402,13 +11401,13 @@ msgstr "" #: ../source/book.xml:10763 #, fuzzy msgid "Another neat trick you can perform with this option involves appending to an existing dump file a new range of dumped revisions. For example, you might have a post-commit hook that simply appends the repository dump of the single revision that triggered the hook. Or you might have a script that runs nightly to append dump file data for all the revisions that were added to the repository since the last time the script ran. Used like this, svnadmin dump can be one way to back up changes to your repository over time in case of a system crash or some other catastrophic event." -msgstr "另一个有关的技巧是,可以使用选项在一个转储文件中增加新的转储修订版本。举个例子,可以使用post-commit钩子在每次新的修订版本提交后将其转储到文件中。或者,可以编写一个脚本,在每天夜里将所有新增的修订版本转储到文件中。这样,svnadmin dump命令就变成了很好的版本库备份工具,以防万一出现系统崩溃或其它灾难性事件。" +msgstr "另一个有关的技巧是,可以使用选项在一个转储文件中增加新的转储修订版本。举个例子,可以使用post-commit钩子在每次新的修订版本提交后将其转储到文件中。或者,可以编写一个脚本,在每天夜里将所有新增的修订版本转储到文件中。这样,svnadmin dump命令就变成了很好的版本库备份工具,以防万一出现系统崩溃或其它灾难性事件。" #. (para) #: ../source/book.xml:10774 #, fuzzy msgid "The dump format can also be used to merge the contents of several different repositories into a single repository. By using the option of svnadmin load, you can specify a new virtual root directory for the load process. That means if you have dump files for three repositories, say calc-dumpfile, cal-dumpfile, and ss-dumpfile, you can first create a new repository to hold them all:" -msgstr "转储还可以用来将几个独立的版本库合并为一个版本库。使用svnadmin load选项,可以在装载的时候指定根目录。也就是说,如果有三个不同版本库的转储文件,比如calc-dumpfilecal-dumpfile,和ss-dumpfile,可以在一个新的版本库中保存所有三个转储文件中的数据:" +msgstr "转储还可以用来将几个独立的版本库合并为一个版本库。使用svnadmin load选项,可以在装载的时候指定根目录。也就是说,如果有三个不同版本库的转储文件,比如calc-dumpfilecal-dumpfile,和ss-dumpfile,可以在一个新的版本库中保存所有三个转储文件中的数据:" #. (screen) #: ../source/book.xml:10784 @@ -11478,7 +11477,7 @@ msgstr "" #: ../source/book.xml:10810 #, fuzzy msgid "We'll mention one final way to use the Subversion repository dump format—conversion from a different storage mechanism or version control system altogether. Because the dump file format is, for the most part, human-readable, it should be relatively easy to describe generic sets of changes—each of which should be treated as a new revision—using this file format. In fact, the cvs2svn utility (see ) uses the dump format to represent the contents of a CVS repository so that those contents can be copied into a Subversion repository." -msgstr "我们再介绍一下Subversion版本库转储数据的最后一种用途——在不同的存储机制或版本控制系统之间转换。因为转储数据的格式的大部分是可以阅读的,所以使用这种格式描述变更集(每个变更集对应一个新的修订版本)会相对容易一些。事实上,cvs2svn工具(参见 )正是将CVS版本库的内容转换为转储数据格式,如此才能将CVS版本库的数据导入Subversion版本库之中。" +msgstr "我们再介绍一下Subversion版本库转储数据的最后一种用途——在不同的存储机制或版本控制系统之间转换。因为转储数据的格式的大部分是可以阅读的,所以使用这种格式描述变更集(每个变更集对应一个新的修订版本)会相对容易一些。事实上,cvs2svn工具(参见 )正是将CVS版本库的内容转换为转储数据格式,如此才能将CVS版本库的数据导入Subversion版本库之中。" #. (title) #: ../source/book.xml:10824 @@ -11504,13 +11503,13 @@ msgstr "因为Subversion使用底层的二进制区别和压缩算法(也可 #: ../source/book.xml:10852 #, fuzzy msgid "As we described in , the Subversion repository dump format is a human-readable representation of the changes that you've made to your versioned data over time. You use the svnadmin dump command to generate the dump data, and svnadmin load to populate a new repository with it (see ). The great thing about the human-readability aspect of the dump format is that, if you aren't careless about it, you can manually inspect and modify it. Of course, the downside is that if you have three years' 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." -msgstr "就像我们在中说的,Subversion版本库转储文件记录了所有版本数据的变更信息,而且以易于阅读的格式保存。可以使用svnadmin dump命令生成转储文件,然后用svnadmin load命令生成一个新的版本库。(参见 )。转储文件易于阅读意味着你可以查看和修改它。当然,问题是如果你有一个运行了三年的版本库,那么生成的转储文件会很庞大,阅读和手工修改起来都会花费很多时间。" +msgstr "就像我们在中说的,Subversion版本库转储文件记录了所有版本数据的变更信息,而且以易于阅读的格式保存。可以使用svnadmin dump命令生成转储文件,然后用svnadmin load命令生成一个新的版本库。(参见 )。转储文件易于阅读意味着你可以查看和修改它。当然,问题是如果你有一个运行了三年的版本库,那么生成的转储文件会很庞大,阅读和手工修改起来都会花费很多时间。" #. (para) #: ../source/book.xml:10866 #, fuzzy msgid "That's where svndumpfilter becomes useful. This program acts as path-based filter for repository dump streams. Simply give it either a list of paths you wish to keep, or a list of paths you wish to not keep, then pipe your repository dump data through this filter. The result will be a modified stream of dump data that contains only the versioned paths you (explicitly or implicitly) requested." -msgstr "这正是svndumpfilter发挥作用的地方,这个程序可以对版本库转储流进行特定路径的过滤。这是一个独特而很有意义的用法,可以帮助你快速方便的修改转储的数据。使用时,只需提供一个你想要保留的(或者不想保留的)路径列表,然后把你的版本库转储文件送进这个过滤器。最后你就可以得到一个仅包含你想保留的路径的转储数据流。" +msgstr "这正是svndumpfilter发挥作用的地方,这个程序可以对版本库转储流进行特定路径的过滤。这是一个独特而很有意义的用法,可以帮助你快速方便的修改转储的数据。使用时,只需提供一个你想要保留的(或者不想保留的)路径列表,然后把你的版本库转储文件送进这个过滤器。最后你就可以得到一个仅包含你想保留的路径的转储数据流。" #. (para) #: ../source/book.xml:10874 @@ -11690,7 +11689,7 @@ msgstr "" #: ../source/book.xml:10978 #, fuzzy msgid "Both of svndumpfilter's subcommands accept options for deciding how to deal with empty revisions. If a given revision contained only changes to paths that were filtered out, that now-empty revision could be considered uninteresting or even unwanted. So to give the user control over what to do with those revisions, svndumpfilter provides the following command-line options:" -msgstr "svndumpfilter的两个子命令都可以通过选项设定如何处理修订版本。如果某个指定的修订版本仅包含路径的更改,过滤器就会将它删除,因为当前为空的修订版本通常是无用的甚至是让人讨厌的。为了让用户有选择的处理这些修订版本,svndumpfilter提供了以下命令行选项:" +msgstr "svndumpfilter的两个子命令都可以通过选项设定如何处理修订版本。如果某个指定的修订版本仅包含路径的更改,过滤器就会将它删除,因为当前为空的修订版本通常是无用的甚至是让人讨厌的。为了让用户有选择的处理这些修订版本,svndumpfilter提供了以下命令行选项:" #. (option) #: ../source/book.xml:10989 @@ -11721,13 +11720,13 @@ msgstr "--preserve-revprops" #: ../source/book.xml:11012 #, fuzzy msgid "If empty revisions are not dropped, preserve the revision properties (log message, author, date, custom properties, etc.) for those empty revisions. Otherwise, empty revisions will only contain the original datestamp, and a generated log message that indicates that this revision was emptied by svndumpfilter." -msgstr "如果空修订版本被保留,保持这些空修订版本的属性(日志信息,作者,日期,自定义属性,等等)。如果不设定这个选项,空修订版本将仅保留初始时间戳,以及一个自动生成的日志信息,表明此修订版本由svndumpfilter处理过。" +msgstr "如果空修订版本被保留,保持这些空修订版本的属性(日志信息,作者,日期,自定义属性,等等)。如果不设定这个选项,空修订版本将仅保留初始时间戳,以及一个自动生成的日志信息,表明此修订版本由svndumpfilter处理过。" #. (para) #: ../source/book.xml:11022 #, fuzzy msgid "While svndumpfilter can be very useful, and a huge timesaver, there are unfortunately a couple of gotchas. First, this utility is overly sensitive to path semantics. Pay attention to whether paths in your dump file are specified with or without leading slashes. You'll want to look at the Node-path and Node-copyfrom-path headers." -msgstr "尽管svndumpfilter十分有用,能节省大量的时间,但它却是把不折不扣的双刃剑。首先,这个工具对路径语义极为敏感。仔细检查转储文件中的路径是不是以斜线开头。也许Node-pathCopyfrom-path这两个头参数对你有些帮助。" +msgstr "尽管svndumpfilter十分有用,能节省大量的时间,但它却是把不折不扣的双刃剑。首先,这个工具对路径语义极为敏感。仔细检查转储文件中的路径是不是以斜线开头。也许Node-pathCopyfrom-path这两个头参数对你有些帮助。" #. (screen) #: ../source/book.xml:11029 @@ -11747,25 +11746,25 @@ msgstr "" #: ../source/book.xml:11040 #, fuzzy msgid "While svnadmin dump has a consistent leading slash policy—to not include them—other programs which generate dump data might not be so consistent." -msgstr "尽管svnadmin dump对是否以斜线作为路径的开头有统一的规定——这个规定就是不以斜线作为路径的开头——其它生成转储文件的程序不一定会遵守这个规定。" +msgstr "尽管svnadmin dump对是否以斜线作为路径的开头有统一的规定——这个规定就是不以斜线作为路径的开头——其它生成转储文件的程序不一定会遵守这个规定。" #. (para) #: ../source/book.xml:11034 #, fuzzy msgid "If the paths have leading slashes, you should include leading slashes in the paths you pass to svndumpfilter include and svndumpfilter exclude (and if they don't, you shouldn't). Further, if your dump file has an inconsistent usage of leading slashes for some reason, you should probably normalize those paths so they all have, or lack, leading slashes." -msgstr "如果这些路径以斜线开头,那么你传递给svndumpfilter includesvndumpfilter exclude的路径也必须以斜线开头(反之亦然)。如果因为某些原因转储文件中的路径没有统一使用或不使用斜线开头,也许需要修正这些路径,统一使用斜线开头或不使用斜线开头。" +msgstr "如果这些路径以斜线开头,那么你传递给svndumpfilter includesvndumpfilter exclude的路径也必须以斜线开头(反之亦然)。如果因为某些原因转储文件中的路径没有统一使用或不使用斜线开头,也许需要修正这些路径,统一使用斜线开头或不使用斜线开头。" #. (para) #: ../source/book.xml:11046 #, fuzzy msgid "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. It is possible that at some point in the lifetime of your repository, you might have copied a file or directory from some location that svndumpfilter is excluding, to a location that it is including. In order to make the dump data self-sufficient, svndumpfilter needs to still show the addition of the new path—including the contents of any files created by the copy—and not represent that addition as a copy from a source that won't exist in your filtered dump data stream. But because the Subversion repository dump format only shows what was changed in each revision, the contents of the copy source might not be readily available. If you suspect that you have any copies of this sort in your repository, you might want to rethink your set of included/excluded paths, perhaps including the paths that served as sources of your troublesome copy operations, too." -msgstr "此外,复制操作生成的路径也会带来麻烦。Subversion支持在版本库中进行复制操作,也就是复制一个存在的路径,生成一个新的路径。问题是,svndumpfilter保留的某个文件或目录可能是由某个svndumpfilter排除的文件或目录复制而来的。也就是说,为了确保转储数据的完整性,svndumpfilter需要切断这些复制自被排除路径的文件与源文件的关系,还要将这些文件的内容以新建的方式添加到转储数据中。但是由于Subversion版本库转储文件格式中仅包含了修订版本的更改信息,因此源文件的内容基本上无法获得。如果你不能确定版本库中是否存在类似的情况,最好重新考虑一下到底保留/排除哪些路径。" +msgstr "此外,复制操作生成的路径也会带来麻烦。Subversion支持在版本库中进行复制操作,也就是复制一个存在的路径,生成一个新的路径。问题是,svndumpfilter保留的某个文件或目录可能是由某个svndumpfilter排除的文件或目录复制而来的。也就是说,为了确保转储数据的完整性,svndumpfilter需要切断这些复制自被排除路径的文件与源文件的关系,还要将这些文件的内容以新建的方式添加到转储数据中。但是由于Subversion版本库转储文件格式中仅包含了修订版本的更改信息,因此源文件的内容基本上无法获得。如果你不能确定版本库中是否存在类似的情况,最好重新考虑一下到底保留/排除哪些路径。" #. (para) #: ../source/book.xml:11066 #, fuzzy msgid "Finally, svndumpfilter takes path filtering quite literally. If you are trying to copy the history of a project rooted at trunk/my-project and move it into a repository of its own, you would, of course, use the svndumpfilter include command to keep all the changes in and under trunk/my-project. But the resulting dump file makes no assumptions about the repository into which you plan to load this data. Specifically, the dump data might begin with the revision which added the trunk/my-project directory, but it will not contain directives which would create the trunk directory itself (because trunk doesn't match the include filter). You'll need to make sure that any directories which the new dump stream expect to exist actually do exist in the target repository before trying to load the stream into that repository." -msgstr "最后,svndumpfilter就是字面上的意思,如果你尝试将目录trunk/my-project中的内容迁移到其自己版本库,你可以使用svndumpfilter include命令保持trunk/my-project目录下的所有修改。但是结果转储文件对于将要被加载入的版本库没有任何假定,特别的,目录trunk/my-project可能从创建这个目录的修订版本开始,而它不会包含以自己创建trunk目录的指示(因为trunk没有匹配include过滤)。在尝试将转储流存放到版本库之前,你需要确定任何转储流将要存在的目录必须存在于目标版本库。" +msgstr "最后,svndumpfilter就是字面上的意思,如果你尝试将目录trunk/my-project中的内容迁移到其自己版本库,你可以使用svndumpfilter include命令保持trunk/my-project目录下的所有修改。但是结果转储文件对于将要被加载入的版本库没有任何假定,特别的,目录trunk/my-project可能从创建这个目录的修订版本开始,而它不会包含以自己创建trunk目录的指示(因为trunk没有匹配include过滤)。在尝试将转储流存放到版本库之前,你需要确定任何转储流将要存在的目录必须存在于目标版本库。" #. (title) #: ../source/book.xml:11089 @@ -11781,37 +11780,37 @@ msgstr "有许多场景下会存在一个Subversion版本库的版本历史与 #: ../source/book.xml:11100 #, fuzzy msgid "As of version 1.4, Subversion provides a program for managing scenarios like these—svnsync. svnsync works by essentially asking the Subversion server to replay revisions, one at a time. It then uses that revision information to mimic a commit of the same to another repository. Neither repository needs to be locally accessible to machine on which svnsync is running—its parameters are repository URLs, and it does all its work through Subversion's repository access (RA) interfaces. All it requires is read access to the source repository and read/write access to the destination repository." -msgstr "Subversion 1.4提供了管理这种场景的工具—svnsyncsvnsync实质上就是通知版本库重放修订版本,一次一个,然后将修订版本信息模拟提交到另一个版本库。svnsync运行不需要能够本地访问版本库—它的参数是版本库URL,所有的工作是通过Subversion版本库访问层(RA)接口实现的,所有要做的就是读源版本库,然后读写访问目标版本库。" +msgstr "Subversion 1.4提供了管理这种场景的工具—svnsyncsvnsync实质上就是通知版本库重放修订版本,一次一个,然后将修订版本信息模拟提交到另一个版本库。svnsync运行不需要能够本地访问版本库—它的参数是版本库URL,所有的工作是通过Subversion版本库访问层(RA)接口实现的,所有要做的就是读源版本库,然后读写访问目标版本库。" #. (para) #: ../source/book.xml:11114 #, fuzzy msgid "When using svnsync against a remote source repository, the Subversion server for that repository must be running Subversion version 1.4 or better." -msgstr "当对远程源版本库使用svnsync时,Subversion版本库的服务器必须是Subversion1.4或更高的版本。" +msgstr "当对远程源版本库使用svnsync时,Subversion版本库的服务器必须是Subversion1.4或更高的版本。" #. (para) #: ../source/book.xml:11130 #, fuzzy msgid "In fact, it can't truly be read-only, or svnsync itself would have a tough time copying revision history into it." -msgstr "实际上,它可以完全只读,或者svnsync本身有时间将版本库历史拷入。" +msgstr "实际上,它可以完全只读,或者svnsync本身有时间将版本库历史拷入。" #. (para) #: ../source/book.xml:11118 #, fuzzy msgid "Assuming you already have a source repository that you'd like to mirror, the next thing you need is an empty target repository which will actually serve as that mirror. This target repository can use either of the available filesystem data-store back-ends (see ), but it must not yet have any version history in it. The protocol via which svnsync communicates revision information is highly sensitive to mismatches between the versioned histories contained in the source and target repositories. For this reason, while svnsync cannot demand that the target repository be read-only, allowing the revision history in the target repository to change by any mechanism other than the mirroring process is a recipe for disaster." -msgstr "假定你已经有了一个希望镜像的源版本库,下一步就是你要有一个作为镜像的目标版本库。目标版本库可以使用任意文件系统数据存储后端(见),但是其中一定不能有历史版本。svnsync的通讯议对于源和目标版本库版本历史的不一致非常敏感,因此,虽然svnsync无法要求目标版本库是只读的,最好的办法就是只允许镜像进程修改目标版本库内容。" +msgstr "假定你已经有了一个希望镜像的源版本库,下一步就是你要有一个作为镜像的目标版本库。目标版本库可以使用任意文件系统数据存储后端(见),但是其中一定不能有历史版本。svnsync的通讯议对于源和目标版本库版本历史的不一致非常敏感,因此,虽然svnsync无法要求目标版本库是只读的,最好的办法就是只允许镜像进程修改目标版本库内容。" #. (para) #: ../source/book.xml:11137 #, fuzzy msgid "Do not modify a mirror repository in such a way as to cause its version history to deviate from that of the repository it mirrors. The only commits and revision property modifications that ever occur on that mirror repository should be those performed by the svnsync tool." -msgstr "不要做出会对镜像版本库产生版本库历史偏移的修改,所有提交和版本库的属性修改必须是由svnsync执行的。" +msgstr "不要做出会对镜像版本库产生版本库历史偏移的修改,所有提交和版本库的属性修改必须是由svnsync执行的。" #. (para) #: ../source/book.xml:11144 #, fuzzy msgid "Another requirement of the target repository is that the svnsync process be allowed to modify certain revision properties. svnsync stores its bookkeeping information in special revision properties on revision 0 of the destination repository. Because svnsync works within the framework of that repository's hook system, the default state of the repository (which is to disallow revision property changes; see ) is insufficient. You'll need to explicitly implement the pre-revprop-change hook, and your script must allow svnsync to set and change its special properties. With those provisions in place, you are ready to start mirroring repository revisions." -msgstr "对于目标版本库的另一种需求是svnsync可以修改特定版本化属性。svnsync在目标版本库的修订版本0的特别属性上记录了簿记信息,因为svnsync在版本库的钩子系统的框架下工作的,版本库缺省的状态(关闭了版本库属性修改;见)是不够的。你会需要明确的实现pre-revprop-change钩子,而且你的脚本必须允许svnsync设置它的特别属性,有了这些准备工作,你就可以开始镜像版本库修订版本了。" +msgstr "对于目标版本库的另一种需求是svnsync可以修改特定版本化属性。svnsync在目标版本库的修订版本0的特别属性上记录了簿记信息,因为svnsync在版本库的钩子系统的框架下工作的,版本库缺省的状态(关闭了版本库属性修改;见)是不够的。你会需要明确的实现pre-revprop-change钩子,而且你的脚本必须允许svnsync设置它的特别属性,有了这些准备工作,你就可以开始镜像版本库修订版本了。" #. (para) #: ../source/book.xml:11159 @@ -11822,7 +11821,7 @@ msgstr "实现授权措施允许复制进程的操作,同时防止其他用户 #: ../source/book.xml:11164 #, fuzzy msgid "Let's walk through the use of svnsync in a somewhat typical mirroring scenario. We'll pepper this discourse with practical recommendations which you are free to disregard if they aren't required by or suitable for your environment." -msgstr "让我们在一个典型的镜像场景中浏览一下svnsync的使用,我们急着讨论实践推荐,但是如果你们不需要或者感到不适合你们的环境,你可以不必去关注。" +msgstr "让我们在一个典型的镜像场景中浏览一下svnsync的使用,我们急着讨论实践推荐,但是如果你们不需要或者感到不适合你们的环境,你可以不必去关注。" #. (para) #: ../source/book.xml:11169 @@ -11935,7 +11934,7 @@ msgstr "在安装了我们的钩子脚本和确定它们可以被Subversion服 #: ../source/book.xml:11251 #, fuzzy msgid "The first thing we need to do with svnsync is to register in our target repository the fact that it will be a mirror of the source repository. We do this using the svnsync initialize subcommand. Note that the various svnsync subcommands provide several of the same authentication-related options that svn does: , , , , and ." -msgstr "对于svnsync,我们首先需要在目标版本库上注册源版本库,我们通过svnsync initialize实现这一步。注意,svnsync子命令提供了许多类似svn认证相关的选项,包括:。" +msgstr "对于svnsync,我们首先需要在目标版本库上注册源版本库,我们通过svnsync initialize实现这一步。注意,svnsync子命令提供了许多类似svn认证相关的选项,包括:。" #. (screen) #: ../source/book.xml:11263 @@ -12003,19 +12002,19 @@ msgstr "" #: ../source/book.xml:11292 #, fuzzy msgid "Our target repository will now remember that it is a mirror of the public Subversion source code repository. Notice that we provided a username and password as arguments to svnsync—that was required by the pre-revprop-change hook on our mirror repository." -msgstr "我们的目标版本库现在记住了它是Subversion公共源代码版本库的镜像,注意我们在svnsync提供了一个用户名和密码—这是我们的镜像版本库pre-revprop-change钩子的要求。" +msgstr "我们的目标版本库现在记住了它是Subversion公共源代码版本库的镜像,注意我们在svnsync提供了一个用户名和密码—这是我们的镜像版本库pre-revprop-change钩子的要求。" #. (para) #: ../source/book.xml:11298 #, fuzzy msgid "The URLs provided to svnsync must point to the root directories of the target and source repositories, respectively. The tool does not handle mirroring of repository subtrees." -msgstr "提供给svnsync的URL必须是指向目标和源版本库的根目录,这个工具不支持对版本库子树的处理。" +msgstr "提供给svnsync的URL必须是指向目标和源版本库的根目录,这个工具不支持对版本库子树的处理。" #. (para) #: ../source/book.xml:11304 #, fuzzy msgid "The initial release of svnsync (in Subversion 1.4) has a small shortcoming—the values given to the and command-line options get used for authentication against both the source and destination repositories. Obviously, there's no guarantee that the synchronizing user's credentials are the same in both places. In the event that they are not the same, users trying to run svnsync in non-interactive mode (with the option) might experience problems." -msgstr "svnsync的最初版本(在Subversion 1.4)有一些缺陷—用来认证的命令行参数同时作用于源和目标版本库。显然,我们无法保证同步的用户认证信息是相同的,如果不一样,用户使用非交互模式(选项)来运行svnsync时会遇到这个问题。" +msgstr "svnsync的最初版本(在Subversion 1.4)有一些缺陷—用来认证的命令行参数同时作用于源和目标版本库。显然,我们无法保证同步的用户认证信息是相同的,如果不一样,用户使用非交互模式(选项)来运行svnsync时会遇到这个问题。" #. (para) #: ../source/book.xml:11320 @@ -12026,7 +12025,7 @@ msgstr "要预先警告一下,尽管对于普通读者只需要几秒钟就可 #: ../source/book.xml:11316 #, fuzzy msgid "And now comes the fun part. With a single subcommand, we can tell svnsync to copy all the as-yet-unmirrored revisions from the source repository to the target. The svnsync synchronize subcommand will peek into the special revision properties previously stored on the target repository, and determine what repository it is mirroring and that the most recently mirrored revision was revision 0. Then it will query the source repository and determine what the latest revision in that repository is. Finally, it asks the source repository's server to start replaying all the revisions between 0 and that latest revision. As svnsync get the resulting response from the source repository's server, it begins forwarding those revisions to the target repository's server as new commits." -msgstr "现在有趣的部分开始了,通过一个单独的子命令,我们可以告诉svnsync将所有未镜像的修订版本从源版本库拷贝到目标版本库。svnsync synchronize子命令会查看目标版本库特定修订版本的属性,并且检测同步的版本库是哪一个,以及最新镜像的修订版本是0。然后它会查询源版本库,检测其最新的修订版本。最后,它会询问源版本库服务器来开始重演从修订版本0到最新修订版本。svnsync从源版本库服务器得到返回的结果,然后将其作为新的提交转发到目标版本库服务器。" +msgstr "现在有趣的部分开始了,通过一个单独的子命令,我们可以告诉svnsync将所有未镜像的修订版本从源版本库拷贝到目标版本库。svnsync synchronize子命令会查看目标版本库特定修订版本的属性,并且检测同步的版本库是哪一个,以及最新镜像的修订版本是0。然后它会查询源版本库,检测其最新的修订版本。最后,它会询问源版本库服务器来开始重演从修订版本0到最新修订版本。svnsync从源版本库服务器得到返回的结果,然后将其作为新的提交转发到目标版本库服务器。" #. (screen) #: ../source/book.xml:11337 @@ -12080,19 +12079,19 @@ msgstr "" #: ../source/book.xml:11359 #, fuzzy msgid "Of particular interest here is that for each mirrored revision, there is first a commit of that revision to the target repository, and then property changes follow. This is because the initial commit is performed by (and attributed to) the user syncuser, and datestamped with the time as of that revision's creation. Also, Subversion's underlying repository access interfaces don't provide a mechanism for setting arbitrary revision properties as part of a commit. So svnsync follows up with an immediate series of property modifications which copy all the revision properties found for that revision in the source repository into the target repository. This also has the effect of fixing the author and datestamp of the revision to match that of the source repository." -msgstr "镜像修订版本有一点特别有趣,首先是到目标版本库的修订版本提交,然后跟着属性修改。这是因为最初的提交是通过用户syncuser执行的,而时间戳是提交的时间,而且Subversion底层的版本库访问接口不允许在提交时任意修改修订版本属性,所以svnsync会立即使用属性修改,将源版本库发现的所有修订版本属性拷贝到目标版本库,这其中就包括了修改作者和时间戳使之与源版本库一致的效果。" +msgstr "镜像修订版本有一点特别有趣,首先是到目标版本库的修订版本提交,然后跟着属性修改。这是因为最初的提交是通过用户syncuser执行的,而时间戳是提交的时间,而且Subversion底层的版本库访问接口不允许在提交时任意修改修订版本属性,所以svnsync会立即使用属性修改,将源版本库发现的所有修订版本属性拷贝到目标版本库,这其中就包括了修改作者和时间戳使之与源版本库一致的效果。" #. (para) #: ../source/book.xml:11373 #, fuzzy msgid "Also noteworthy is that svnsync performs careful bookkeeping that allows it to be safely interrupted and restarted without ruining the integrity of the mirrored data. If a network glitch occurs while mirroring a repository, simply repeat the svnsync synchronize command and it will happily pick up right where it left off. In fact, as new revisions appear in the source repository, this is exactly what you to do in order to keep your mirror up-to-date." -msgstr "值得注意的是svnsync会小心簿记所有的操作,可以安全的中断并重新开始,而不必破坏镜像数据的完整性。如果在svnsync synchronize时出现网络故障,只需要重新运行svnsync synchronize,她会从中断处开始。实际上,随着新的修订版本在源版本库出现,这样就可以保证你的镜像不会过时。" +msgstr "值得注意的是svnsync会小心簿记所有的操作,可以安全的中断并重新开始,而不必破坏镜像数据的完整性。如果在svnsync synchronize时出现网络故障,只需要重新运行svnsync synchronize,她会从中断处开始。实际上,随着新的修订版本在源版本库出现,这样就可以保证你的镜像不会过时。" #. (para) #: ../source/book.xml:11382 #, fuzzy msgid "There is, however, one bit of inelegance in the process. Because Subversion revision properties can be changed at any time throughout the lifetime of the repository, and don't leave an audit trail that indicates when they were changed, replication processes have to pay special attention to them. If you've already mirrored the first 15 revisions of a repository and someone then changes a revision property on revision 12, svnsync won't know to go back and patch up its copy of revision 12. You'll need to tell it to do so manually by using (or with some additionally tooling around) the svnsync copy-revprops subcommand, which simply re-replicates all the revision properties for a particular revision." -msgstr "然而,这个进程还有一点不雅的地方,因为Subversion属性修改可以发生在整个生命周期的任何时候,不会留下任何审计痕迹来说明所作的修改,扶植进程需要对此额外关注。如果你已经镜像了某个版本库的15个修订版本,而某个人修改了修订版本12的属性,你需要告诉它手工使用(或一些额外的工具)svnsync copy-revprops子命令,只是简单的重新复制某个特定修订版本的属性。" +msgstr "然而,这个进程还有一点不雅的地方,因为Subversion属性修改可以发生在整个生命周期的任何时候,不会留下任何审计痕迹来说明所作的修改,扶植进程需要对此额外关注。如果你已经镜像了某个版本库的15个修订版本,而某个人修改了修订版本12的属性,你需要告诉它手工使用(或一些额外的工具)svnsync copy-revprops子命令,只是简单的重新复制某个特定修订版本的属性。" #. (screen) #: ../source/book.xml:11395 @@ -12131,7 +12130,7 @@ msgstr "版本库复制只是一个壳,你一定会希望利用这个进程的 #: ../source/book.xml:11415 #, fuzzy msgid "Also, while it isn't very commonplace to do so, svnsync does gracefully mirror repositories in which the user as whom it authenticates only has partial read access. It simply copies only the bits of the repository that it is permitted to see. Obviously such a mirror is not useful as a backup solution." -msgstr "而且,这样做并不平凡,在人证用户只有部分读权限时svnsync也会优雅的镜像,它只会拷贝允许查看的版本库内容,显然这种镜像不适合备份方案。" +msgstr "而且,这样做并不平凡,在人证用户只有部分读权限时svnsync也会优雅的镜像,它只会拷贝允许查看的版本库内容,显然这种镜像不适合备份方案。" #. (para) #: ../source/book.xml:11421 @@ -12162,13 +12161,13 @@ msgstr "" #: ../source/book.xml:11438 #, fuzzy msgid "Now that the two repositories have the same UUID, you can use svn switch --relocate to point your working copy to whichever of the repositories you wish to operate against, a process which is described in . There is a possible danger here, though, in that if the primary and mirror repositories aren't in close synchronization, a working copy up-to-date with, and pointing to, the primary repository will, if relocated to point to an out-of-date mirror, become confused about the apparent sudden loss of revisions it fully expects to be present, and throws errors to that effect. If this occurs, you can relocate your working copy back to the primary repository and then either wait until the mirror repository is up-to-date, or backdate your working copy to a revision you know is present in the sync repository and then retry the relocation." -msgstr "现在两个版本库有了相同的UUID,你可以使用svn switch --relocate指向任何你希望操作的版本库,详细方法见。这里也可能有危险,尽管如果主和镜像版本库没有同步的关闭,一个工作拷贝对于主版本库没有过时,而重定位的镜像却是过时的,显然期望存在的修订版本缺失会造成困惑。" +msgstr "现在两个版本库有了相同的UUID,你可以使用svn switch --relocate指向任何你希望操作的版本库,详细方法见。这里也可能有危险,尽管如果主和镜像版本库没有同步的关闭,一个工作拷贝对于主版本库没有过时,而重定位的镜像却是过时的,显然期望存在的修订版本缺失会造成困惑。" #. (para) #: ../source/book.xml:11453 #, fuzzy msgid "Finally, be aware that the revision-based replication provided by svnsync is only that—replication of revisions. It does not include such things as the hook implementations, repository or server configuration data, uncommitted transactions, or information about user locks on repository paths. Only information carried by the Subversion repository dump file format is available for replication." -msgstr "最后我们需要意识到,svnsync只支持修订版本为基础的复制,它没有包括诸如钩子实现,版本库或服务器配置数据,未提交事务或关于用户锁定版本库路径的信息,只有Subversion版本库转储文件格式在复制时包含这些信息。" +msgstr "最后我们需要意识到,svnsync只支持修订版本为基础的复制,它没有包括诸如钩子实现,版本库或服务器配置数据,未提交事务或关于用户锁定版本库路径的信息,只有Subversion版本库转储文件格式在复制时包含这些信息。" #. (title) #: ../source/book.xml:11465 @@ -12190,7 +12189,7 @@ msgstr "Subversion版本库管理有两种备份方法—完全和增量。一 #: ../source/book.xml:11487 #, fuzzy msgid "As far as full backups go, the naive approach might seem like a sane one, but unless you temporarily disable all other access to your repository, simply doing a recursive directory copy runs the risk of generating a faulty backup. In the case of Berkeley DB, the documentation describes a certain order in which database files can be copied that will guarantee a valid backup copy. A similar ordering exists for FSFS data. But you don't have to implement these algorithms yourself, because the Subversion development team has already done so. The svnadmin hotcopy command takes care of the minutia involved in making a hot backup of your repository. And its invocation is as trivial as Unix's cp or Windows' copy operations:" -msgstr "随着完全备份的使用,这种幼稚的方法或许看起来有点不够健全,但是除非你临时关闭所有访问版本库的进程,否则这种递归的拷贝目录会有产生错误拷贝的风险。Berkeley DB的情况下,其文档中记述了按照什么顺序拷贝可以保证正确的备份拷贝,FSFS也有类似的顺序。但是你不必自己实现这种算法,因为Subversion的开发团队已经这样做了。svnadmin hotcopy关注了在热拷贝版本库时的所有细节,它的调用就像Unix的cp或Windows的copy一样琐碎:" +msgstr "随着完全备份的使用,这种幼稚的方法或许看起来有点不够健全,但是除非你临时关闭所有访问版本库的进程,否则这种递归的拷贝目录会有产生错误拷贝的风险。Berkeley DB的情况下,其文档中记述了按照什么顺序拷贝可以保证正确的备份拷贝,FSFS也有类似的顺序。但是你不必自己实现这种算法,因为Subversion的开发团队已经这样做了。svnadmin hotcopy关注了在热拷贝版本库时的所有细节,它的调用就像Unix的cp或Windows的copy一样琐碎:" #. (screen) #: ../source/book.xml:11501 @@ -12211,7 +12210,7 @@ msgstr "作为结果的备份是一个完全功能的版本库,当发生严重 #: ../source/book.xml:11507 #, fuzzy msgid "When making copies of a Berkeley DB repository, you can even instruct svnadmin hotcopy to purge any unused Berkeley DB logfiles (see ) from the original repository upon completion of the copy. Simply provide the option on the command-line." -msgstr "当进行Berkeley DB版本库的备份时,你可以指导svnadmin hotcopy清理源版本库中无用的Berkeley DB日志文件(见),只需要简单的在命令行里提供。" +msgstr "当进行Berkeley DB版本库的备份时,你可以指导svnadmin hotcopy清理源版本库中无用的Berkeley DB日志文件(见),只需要简单的在命令行里提供。" #. (screen) #: ../source/book.xml:11513 @@ -12227,13 +12226,13 @@ msgstr "" #: ../source/book.xml:11516 #, fuzzy msgid "Additional tooling around this command is available, too. The tools/backup/ directory of the Subversion source distribution holds the hot-backup.py script. This script adds a bit of backup management atop svnadmin hotcopy, allowing you to keep only the most recent configured number of backups of each repository. It will automatically manage the names of the backed-up repository directories to avoid collisions with previous backups, and will rotate off older backups, deleting them so only the most recent ones remain. Even if you also have an incremental backup, you might want to run this program on a regular basis. For example, you might consider using hot-backup.py from a program scheduler (such as cron on Unix systems) which will cause it to run nightly (or at whatever granularity of Time you deem safe)." -msgstr "还有一些附加的加工命令,Subversion源程序中的tools/backup/目录包含了hot-backup.py脚本,这个脚本在hot-backup.py之上增加了备份管理功能,你可以保存每个版本库最近的配置号码。为了防止与以前的备份冲突,它会自动管理备份版本库目录名字,循环利用备份名,删除掉旧的,保存新的。即使你也有一个增量的备份,你还是会希望有规律的运行这个程序。例如,你会在一个调度程序(例如Unix系统的cron)中调用hot-backup.py会导致它在半夜执行(或者是任何你认为安全的时间间隔)。" +msgstr "还有一些附加的加工命令,Subversion源程序中的tools/backup/目录包含了hot-backup.py脚本,这个脚本在hot-backup.py之上增加了备份管理功能,你可以保存每个版本库最近的配置号码。为了防止与以前的备份冲突,它会自动管理备份版本库目录名字,循环利用备份名,删除掉旧的,保存新的。即使你也有一个增量的备份,你还是会希望有规律的运行这个程序。例如,你会在一个调度程序(例如Unix系统的cron)中调用hot-backup.py会导致它在半夜执行(或者是任何你认为安全的时间间隔)。" #. (para) #: ../source/book.xml:11533 #, fuzzy msgid "Some administrators use a different backup mechanism built around generating and storing repository dump data. We described in how to use svnadmin dump --incremental to perform an incremental backup of a given revision or range of revisions. And of course, there is a full backup variation of this achieved by omitting the option to that command. There is some value in these methods, in that the format of your backed-up information is flexible—it's not tied to a particular platform, versioned filesystem type, or release of Subversion or Berkeley DB. But that flexibility comes at a cost, namely that restoring that data can take a long time—longer with each new revision committed to your repository. Also, as is the case with so many of the various backup methods, revision property changes made to already-backed-up revisions won't get picked up by a non-overlapping, incremental dump generation. For these reasons, we recommend against relying solely on dump-based backup approaches." -msgstr "一些管理员使用不同的备份机制,通过生成和保存版本库转储数据。我们在中描述如何使用svnadmin dump --incremental来对一个修订版本或一个修订版本范围执行增量备份。当然,通过取消选项可以得到完整的备份。在备份信息中方法的值非常灵活—不会与特定平台,版本化的文件系统类型或Subversion和Berkeley DB的版本绑定。但是灵活带来了代价,数据恢复会占用更长的时间—比每个新版本提交更长。此外,在非完全的量转储生成时,对已经备份修订版本的修订版本属性的修改不会被采纳,因为这些原因,我们不建议你单独依赖转储为基础的备份方法。" +msgstr "一些管理员使用不同的备份机制,通过生成和保存版本库转储数据。我们在中描述如何使用svnadmin dump --incremental来对一个修订版本或一个修订版本范围执行增量备份。当然,通过取消选项可以得到完整的备份。在备份信息中方法的值非常灵活—不会与特定平台,版本化的文件系统类型或Subversion和Berkeley DB的版本绑定。但是灵活带来了代价,数据恢复会占用更长的时间—比每个新版本提交更长。此外,在非完全的量转储生成时,对已经备份修订版本的修订版本属性的修改不会被采纳,因为这些原因,我们不建议你单独依赖转储为基础的备份方法。" #. (para) #: ../source/book.xml:11552 @@ -12244,13 +12243,13 @@ msgstr "如你所见,几种备份方式都有各自的优点,最简单的方 #: ../source/book.xml:11567 #, fuzzy msgid "The svnsync program (see ) actually provides a rather handy middle-ground approach. If you are regularly synchronizing a read-only mirror with your main repository, then in a pinch, your read-only mirror is probably a good candidate for replacing that main repository if it falls over. The primary disadvantage of this method is that only the versioned repository data gets synchronized—repository configuration files, user-specified repository path locks, and other items which might live in the physical repository directory but not inside the repository's virtual versioned filesystem are not handled by svnsync." -msgstr "svnsync实际上提供了一种更易实施的妥协方法,如果你有规律的同步镜像版本库,则在必要时,镜像版本库就成了主版本库发生问题时的一个合适替代者。这个方法最大的缺点是只有版本化的数据得到了同步—版本库的配置信息,用户指定的路径锁定和其它以物理形式存在于版本库路径而不存在于版本库虚拟文件系统的项目不会被svnsync处理。" +msgstr "svnsync实际上提供了一种更易实施的妥协方法,如果你有规律的同步镜像版本库,则在必要时,镜像版本库就成了主版本库发生问题时的一个合适替代者。这个方法最大的缺点是只有版本化的数据得到了同步—版本库的配置信息,用户指定的路径锁定和其它以物理形式存在于版本库路径而不存在于版本库虚拟文件系统的项目不会被svnsync处理。" #. (para) #: ../source/book.xml:11585 #, fuzzy msgid "svnadmin setlog can be called in a way that bypasses the hook interface altogether." -msgstr "svnadmin setlog可以被绕过钩子程序被调用。" +msgstr "svnadmin setlog可以被绕过钩子程序被调用。" #. (para) #: ../source/book.xml:11579 @@ -12271,7 +12270,7 @@ msgstr "你知道的—只是对各种变化莫测的问题的统称。" #: ../source/book.xml:11602 #, fuzzy msgid "Often, the best approach to repository backups is a diversified one which leverages combinations of the methods described here. The Subversion developers, for example, back up the Subversion source code repository nightly using hot-backup.py and an offsite rsync of those full backups; keep multiple archives of all the commit and property change notification emails; and have repository mirrors maintained by various volunteers using svnsync. Your solution might be similar, but should be catered to your needs and that delicate balance of convenience with paranoia. And whatever you do, validate your backups from time to time—what good is a spare tire that has a hole in it? While all of this might not save your hardware from the iron fist of Fate, it should certainly help you recover from those trying times." -msgstr "通常情况下,最好的版本库备份方式是混合的,你可以平衡完全和增量备份,另外配合提交邮件的归档。Subversion开发者,举个例子,使用hot-backup.py对Subversion版本库进行完全备份并使用rsync同步这些备份;同时保存所有的提交日至和修改通知邮件;并且使用许多志愿者维护的svnsync镜像版本库。你们的解决方案可能非常类似,但是要实现满足需要和便利性的平衡。无论你做了什么,你需要一次次的验证你的备份—就像要检查备用轮胎是否有个窟窿?当然,所有做的事情都无法回避我们的硬件来自钢铁的命运,它将帮助你从艰难的时光恢复过来。" +msgstr "通常情况下,最好的版本库备份方式是混合的,你可以平衡完全和增量备份,另外配合提交邮件的归档。Subversion开发者,举个例子,使用hot-backup.py对Subversion版本库进行完全备份并使用rsync同步这些备份;同时保存所有的提交日至和修改通知邮件;并且使用许多志愿者维护的svnsync镜像版本库。你们的解决方案可能非常类似,但是要实现满足需要和便利性的平衡。无论你做了什么,你需要一次次的验证你的备份—就像要检查备用轮胎是否有个窟窿?当然,所有做的事情都无法回避我们的硬件来自钢铁的命运,它将帮助你从艰难的时光恢复过来。" #. (para) #: ../source/book.xml:11629 @@ -12313,19 +12312,19 @@ msgstr "Subversion的设计包括一个抽象的网络层,这意味着版本 #: ../source/book.xml:11676 #, fuzzy msgid "Apache is an extremely popular webserver; using the mod_dav_svn module, Apache can access a repository and make it available to clients via the WebDAV/DeltaV protocol, which is an extension of HTTP. Because Apache is an extremely extensible web server, it provides a number of features for free, such as encrypted SSL communication, logging, integration with a number of third-party authentication systems, and limited built-in web browsing of repositories." -msgstr "Apache是最流行的web服务器,通过使用mod_dav_svn模块,Apache可以访问版本库,并且可以使客户端使用HTTP的扩展协议WebDAV/DeltaV进行访问,因为Apache是一个非常易于扩展的web服务器,它提供了许多易于获取的特性,例如加密的SSL通讯,日志和与第三方工具的集成,以及内置的版本库web浏览功能。" +msgstr "Apache是最流行的web服务器,通过使用mod_dav_svn模块,Apache可以访问版本库,并且可以使客户端使用HTTP的扩展协议WebDAV/DeltaV进行访问,因为Apache是一个非常易于扩展的web服务器,它提供了许多易于获取的特性,例如加密的SSL通讯,日志和与第三方工具的集成,以及内置的版本库web浏览功能。" #. (para) #: ../source/book.xml:11685 #, fuzzy msgid "In the other corner is svnserve: a small, lightweight server program that speaks a custom protocol with clients. Because its protocol is explicitly designed for Subversion and is stateful (unlike HTTP), it provides significantly faster network operations—but at the cost of some features as well. It only understands CRAM-MD5 authentication, has no logging, no web-browsing, and no option to encrypt network traffic. It is, however, extremely easy to set up and is often the best option for small teams just starting out with Subversion." -msgstr "在另一个角落是svnserve:一个更小,轻型的服务器程序,同客户端使用自定义的协议。因为协议是为Subversion专门设计的,并且是有状态的(不像HTTP),它提供了更快的网络操作—但也有一些代价。它只理解CRAM-MD5的认证,然而它非常易于配置,是开始使用Subversion的小团队的最佳选择。" +msgstr "在另一个角落是svnserve:一个更小,轻型的服务器程序,同客户端使用自定义的协议。因为协议是为Subversion专门设计的,并且是有状态的(不像HTTP),它提供了更快的网络操作—但也有一些代价。它只理解CRAM-MD5的认证,然而它非常易于配置,是开始使用Subversion的小团队的最佳选择。" #. (para) #: ../source/book.xml:11695 #, fuzzy msgid "A third option is to use svnserve tunneled over an SSH connection. Even though this scenario still uses svnserve, it differs quite a bit in features from a traditional svnserve deployment. SSH is used to encrypt all communication. SSH is also used exclusively to authenticate, so real system accounts are required on the server host (unlike vanilla svnserve, which has its own private user accounts.) Finally, because this setup requires that each user spawn a private, temporary svnserve process, it's equivalent (from a permissions point of view) to allowing a group of local users to all access the repository via file:// URLs. Path-based access control has no meaning, since each user is accessing the repository database files directly." -msgstr "第三个选择是使用SSH连接包裹的svnserve,尽管这个场景依然使用svnserve,它与传统的svnserve部署非常不同,SSH在多所有的通讯中使用加密方式,SSH也使用排他的认证,所以在服务器主机(svnserve与之不同,它包含了自己的私有用户帐号)上必须要有真实的系统帐户。最后,因为这些配置需要每个用户发起一个私有的临时svnserve进程,这与允许一组本地用户通过file://协议访问等同(从访问许可的视点)。因此路径为基础的访问控制变得没有意义,因为每个用户都可以直接访问版本库。" +msgstr "第三个选择是使用SSH连接包裹的svnserve,尽管这个场景依然使用svnserve,它与传统的svnserve部署非常不同,SSH在多所有的通讯中使用加密方式,SSH也使用排他的认证,所以在服务器主机(svnserve与之不同,它包含了自己的私有用户帐号)上必须要有真实的系统帐户。最后,因为这些配置需要每个用户发起一个私有的临时svnserve进程,这与允许一组本地用户通过file://协议访问等同(从访问许可的视点)。因此路径为基础的访问控制变得没有意义,因为每个用户都可以直接访问版本库。" #. (para) #: ../source/book.xml:11710 @@ -12526,7 +12525,7 @@ msgstr "下面是你选择或者不选择某一个部署方式的原因。" #: ../source/book.xml:11806 #, fuzzy msgid "The svnserve Server" -msgstr "svnserve 服务器" +msgstr "svnserve 服务器" #. (term) #: ../source/book.xml:11810 ../source/book.xml:11863 ../source/book.xml:11912 @@ -12582,7 +12581,7 @@ msgstr "没有任何类型的日志,甚至是错误。" #: ../source/book.xml:11859 #, fuzzy msgid "svnserve over SSH" -msgstr "svnserve 使用 SSH 隧道" +msgstr "svnserve 使用 SSH 隧道" #. (para) #: ../source/book.xml:11871 @@ -12659,7 +12658,7 @@ msgstr "推荐" #: ../source/book.xml:11968 #, fuzzy msgid "In general, the authors of this book recommend a vanilla svnserve installation for small teams just trying to get started with a Subversion server; it's the simplest to set up, and has the fewest maintenance issues. You can always switch to a more complex server deployment as your needs change." -msgstr "通常,本书的作者推荐希望尝试开始使用Subversion的小团队使用svnserve;这是设置最简单,维护最少的方法,而当你的需求改变时,你可以转换到复杂的部署方式。" +msgstr "通常,本书的作者推荐希望尝试开始使用Subversion的小团队使用svnserve;这是设置最简单,维护最少的方法,而当你的需求改变时,你可以转换到复杂的部署方式。" #. (para) #: ../source/book.xml:11974 @@ -12670,7 +12669,7 @@ msgstr "下面是一些常见的建议和小技巧,基于多年对用户的支 #: ../source/book.xml:11978 #, fuzzy msgid "If you're trying to set up the simplest possible server for your group, then a vanilla svnserve installation is the easiest, fastest route. Note, however, that your repository data will be transmitted in the clear over the network. If your deployment is entirely within your company's LAN or VPN, this isn't an issue. If the repository is exposed to the wide-open internet, then you might want to make sure the repository's contents aren't sensitive (e.g. it contains only open-source code.)" -msgstr "如果你尝试为你的团队建立最简单的服务器,安装svnserve是最简单的,最快速的方法。注意,无论如何,如果你的整个部署都是在局域网或者VPN中,版本库数据可以在网络上没有限制的传递。如果版本库部署在internet,你会希望确定版本库的内容不是敏感的(例如只包含开源代码。)。" +msgstr "如果你尝试为你的团队建立最简单的服务器,安装svnserve是最简单的,最快速的方法。注意,无论如何,如果你的整个部署都是在局域网或者VPN中,版本库数据可以在网络上没有限制的传递。如果版本库部署在internet,你会希望确定版本库的内容不是敏感的(例如只包含开源代码。)。" #. (para) #: ../source/book.xml:11990 @@ -12681,13 +12680,13 @@ msgstr "如果你希望与现有的认证系统(LDAP、Active Directory、NTLM #: ../source/book.xml:11998 #, fuzzy msgid "If you've decided to use either Apache or stock svnserve, create a single svn user on your system and run the server process as that user. Be sure to make the repository directory wholly owned by the svn user as well. From a security point of view, this keeps the repository data nicely siloed and protected by operating system filesystem permissions, changeable by only the Subversion server process itself." -msgstr "如果你已经决定使用Apache或svnserve,应该单独创建一个运行服务器进程的svn用户,也需要确定版本库目录属于svn用户。从安全的角度,这样很好的利用了操作系统的文件系统许可保护了版本库数据,只有Subversion服务进程可以修改其内容。" +msgstr "如果你已经决定使用Apache或svnserve,应该单独创建一个运行服务器进程的svn用户,也需要确定版本库目录属于svn用户。从安全的角度,这样很好的利用了操作系统的文件系统许可保护了版本库数据,只有Subversion服务进程可以修改其内容。" #. (para) #: ../source/book.xml:12010 #, fuzzy msgid "If you have an existing infrastructure heavily based on SSH accounts, and if your users already have system accounts on your server machine, then it makes sense to deploy an svnserve-over-ssh solution. Otherwise, we don't widely recommend this option to the public. It's generally considered safer to have your users access the repository via (imaginary) accounts managed by svnserve or Apache, rather than by full-blown system accounts. If your deep desire for encrypted communication still draws you to this option, we recommend using Apache with SSL instead." -msgstr "如果你有一个严重依赖于SSH帐号的基础,而且你的用户已经在服务器上有了帐号,那建立一个通过ssh的svnserve方案就非常有意义,否则,我们不会建议这种方案。通常还是通过svnserve或Apache管理的用户访问版本库比较安全,而不是使用完全的系统帐户。如果你很希望加密的通讯,那可能还是需要选择这个方案,但我们更加推荐SSL的Apache方案。" +msgstr "如果你有一个严重依赖于SSH帐号的基础,而且你的用户已经在服务器上有了帐号,那建立一个通过ssh的svnserve方案就非常有意义,否则,我们不会建议这种方案。通常还是通过svnserve或Apache管理的用户访问版本库比较安全,而不是使用完全的系统帐户。如果你很希望加密的通讯,那可能还是需要选择这个方案,但我们更加推荐SSL的Apache方案。" #. (para) #: ../source/book.xml:12023 @@ -12704,7 +12703,7 @@ msgstr "svnserve,一个定制的服务器" #: ../source/book.xml:12051 #, fuzzy msgid "The svnserve program is a lightweight server, capable of speaking to clients over TCP/IP using a custom, stateful protocol. Clients contact an svnserve server by using URLs that begin with the svn:// or svn+ssh:// scheme. This section will explain the different ways of running svnserve, how clients authenticate themselves to the server, and how to configure appropriate access control to your repositories." -msgstr "svnserve是一个轻型的服务器,可以同客户端通过在TCP/IP基础上的自定义有状态协议通讯,客户端通过使用开头为svn://或者svn+ssh://svnserve的URL来访问一个svnserve服务器。这一小节将会解释运行svnserve的不同方式,客户端怎样实现服务器的认证,怎样配置版本库恰当的访问控制。" +msgstr "svnserve是一个轻型的服务器,可以同客户端通过在TCP/IP基础上的自定义有状态协议通讯,客户端通过使用开头为svn://或者svn+ssh://svnserve的URL来访问一个svnserve服务器。这一小节将会解释运行svnserve的不同方式,客户端怎样实现服务器的认证,怎样配置版本库恰当的访问控制。" #. (title) #: ../source/book.xml:12063 @@ -12715,43 +12714,43 @@ msgstr "调用服务器" #: ../source/book.xml:12065 #, fuzzy msgid "There are a few different ways to run the svnserve program:" -msgstr "有许多不同方法运行svnserve:" +msgstr "有许多不同方法运行svnserve:" #. (para) #: ../source/book.xml:12069 #, fuzzy msgid "Run svnserve as a standalone daemon, listening for requests." -msgstr "作为一个独立守护进程启动svnserve,监听请求。" +msgstr "作为一个独立守护进程启动svnserve,监听请求。" #. (para) #: ../source/book.xml:12074 #, fuzzy msgid "Have the Unix inetd daemon temporarily spawn svnserve whenever a request comes in on a certain port." -msgstr "当特定端口收到一个请求,就会使UNIX的inetd守护进程临时调用svnserve处理。" +msgstr "当特定端口收到一个请求,就会使UNIX的inetd守护进程临时调用svnserve处理。" #. (para) #: ../source/book.xml:12079 #, fuzzy msgid "Have SSH invoke a temporary svnserve over an encrypted tunnel." -msgstr "使用SSH在加密通道发起临时svnserve服务。" +msgstr "使用SSH在加密通道发起临时svnserve服务。" #. (para) #: ../source/book.xml:12084 #, fuzzy msgid "Run svnserve as a Windows service." -msgstr "以Windows service服务方式运行svnserve。" +msgstr "以Windows service服务方式运行svnserve。" #. (title) #: ../source/book.xml:12091 #, fuzzy msgid "svnserve as Daemon" -msgstr "svnserve 作为后台程序" +msgstr "svnserve 作为后台程序" #. (para) #: ../source/book.xml:12093 #, fuzzy msgid "The easiest option is to run svnserve as a standalone daemon process. Use the option for this:" -msgstr "执行svnserve最简单的选项是作为独立守护进程,使用选项:" +msgstr "执行svnserve最简单的选项是作为独立守护进程,使用选项:" #. (screen) #: ../source/book.xml:12096 @@ -12769,13 +12768,13 @@ msgstr "" #: ../source/book.xml:12100 #, fuzzy msgid "When running svnserve in daemon mode, you can use the and options to customize the exact port and hostname to bind to." -msgstr "当以守护模式运行svnserve时,你可以使用选项来自定义绑定的端口和主机名。" +msgstr "当以守护模式运行svnserve时,你可以使用选项来自定义绑定的端口和主机名。" #. (para) #: ../source/book.xml:12104 #, fuzzy msgid "Once we successfully start svnserve as above, it makes every repository on your system available to the network. A client needs to specify an absolute path in the repository URL. For example, if a repository is located at /usr/local/repositories/project1, then a client would reach it via svn://host.example.com/usr/local/repositories/project1. To increase security, you can pass the option to svnserve, which restricts it to exporting only repositories below that path. For example:" -msgstr "一旦svnserve已经运行,它会将你系统中所有版本库发布到网络,一个客户端需要指定版本库在URL中的绝对路径,举个例子,如果一个版本库是位于/usr/local/repositories/project1,则一个客户端可以使用svn://host.example.com/usr/local/repositories/project1 来进行访问,为了提高安全性,你可以使用svnserve选项,这样会限制只输出指定路径下的版本库,例如:" +msgstr "一旦svnserve已经运行,它会将你系统中所有版本库发布到网络,一个客户端需要指定版本库在URL中的绝对路径,举个例子,如果一个版本库是位于/usr/local/repositories/project1,则一个客户端可以使用svn://host.example.com/usr/local/repositories/project1 来进行访问,为了提高安全性,你可以使用svnserve选项,这样会限制只输出指定路径下的版本库,例如:" #. (screen) #: ../source/book.xml:12115 @@ -12810,12 +12809,12 @@ msgstr "" #: ../source/book.xml:12132 #, fuzzy msgid "svnserve via inetd" -msgstr "使用 svnserve 通过 inetd" +msgstr "使用 svnserve 通过 inetd" #. (para) #: ../source/book.xml:12134 msgid "If you want inetd to launch the process, then you need to pass the () option. In the example, we've shown the output from running svnserve -i at the command line, but note that isn't how you actually start the daemon; see the paragraphs following the example for how to configure inetd to start svnserve." -msgstr "" +msgstr "如果你希望inetd启动进程,你需要使用)选项,在这个例子里,我们显示了在命令行中运行svnserve -i的输出,但是请注意这不是如何实际启动daemon; 请继续阅读例子后的文章,学习如何配置inetd启动svnserve。" #. (screen) #: ../source/book.xml:12142 @@ -12833,7 +12832,7 @@ msgstr "" #: ../source/book.xml:12146 #, fuzzy msgid "When invoked with the option, svnserve attempts to speak with a Subversion client via stdin and stdout using a custom protocol. This is the standard behavior for a program being run via inetd. The IANA has reserved port 3690 for the Subversion protocol, so on a Unix-like system you can add lines to /etc/services like these (if they don't already exist):" -msgstr "当用参数调用时,svnserve会尝试使用自定义协议通过stdinstdout来与Subversion客户端通话,这是使用inetd工作的标准方式,IANA为Subversion协议保留3690端口,所以在类Unix系统你可以在/etc/services添加如下的几行(如果他们还不存在):" +msgstr "当用参数调用时,svnserve会尝试使用自定义协议通过stdinstdout来与Subversion客户端通话,这是使用inetd工作的标准方式,IANA为Subversion协议保留3690端口,所以在类Unix系统你可以在/etc/services添加如下的几行(如果他们还不存在):" #. (screen) #: ../source/book.xml:12155 @@ -12851,7 +12850,7 @@ msgstr "" #: ../source/book.xml:12159 #, fuzzy msgid "And if your system is using a classic Unix-like inetd daemon, you can add this line to /etc/inetd.conf:" -msgstr "如果系统是使用经典的类Unix的inetd守护进程,你可以在/etc/inetd.conf添加这几行:" +msgstr "如果系统是使用经典的类Unix的inetd守护进程,你可以在/etc/inetd.conf添加这几行:" #. (screen) #: ../source/book.xml:12162 @@ -12867,19 +12866,19 @@ msgstr "" #: ../source/book.xml:12165 #, fuzzy msgid "Make sure svnowner is a user which has appropriate permissions to access your repositories. Now, when a client connection comes into your server on port 3690, inetd will spawn an svnserve process to service it. Of course, you may also want to add to the configuration line as well, to restrict which repositories are exported." -msgstr "确定svnowner用户拥有访问版本库的适当权限,现在如果一个客户连接来到你的服务器的端口3690,inetd会产生一个svnserve进程来做服务。当然,你也可以添加到命令行,限制暴露出的版本库。" +msgstr "确定svnowner用户拥有访问版本库的适当权限,现在如果一个客户连接来到你的服务器的端口3690,inetd会产生一个svnserve进程来做服务。当然,你也可以添加到命令行,限制暴露出的版本库。" #. (title) #: ../source/book.xml:12177 #, fuzzy msgid "svnserve over a Tunnel" -msgstr "通过隧道 svnserve" +msgstr "通过隧道 svnserve" #. (para) #: ../source/book.xml:12179 #, fuzzy msgid "A third way to invoke svnserve is in tunnel mode, with the option. This mode assumes that a remote-service program such as RSH or SSH has successfully authenticated a user and is now invoking a private svnserve process as that user. (Note that you, the user, will rarely, if ever, have reason to invoke svnserve with the at the command line; instead, the SSH daemon does so for you.) The svnserve program behaves normally (communicating via stdin and stdout), and assumes that the traffic is being automatically redirected over some sort of tunnel back to the client. When svnserve is invoked by a tunnel agent like this, be sure that the authenticated user has full read and write access to the repository database files. It's essentially the same as a local user accessing the repository via file:// URLs." -msgstr "也一直有第三种方式,使用选项的管道模式,这个模式假定一个分布式服务程序如RSHSSH已经验证了一个用户,并且以这个用户调用了一个私有svnserve进程,svnserve运作如常(通过stdinstdout通讯),并且可以设想通讯是自动转向到一种通道传递回客户端,当svnserve被这样的通道代理调用,确定认证用户对版本数据库有完全的读写权限,这与本地用户通过file:///URl访问版本库同样重要。" +msgstr "也一直有第三种方式,使用选项的管道模式,这个模式假定一个分布式服务程序如RSHSSH已经验证了一个用户,并且以这个用户调用了一个私有svnserve进程,svnserve运作如常(通过stdinstdout通讯),并且可以设想通讯是自动转向到一种通道传递回客户端,当svnserve被这样的通道代理调用,确定认证用户对版本数据库有完全的读写权限,这与本地用户通过file:///URl访问版本库同样重要。" #. (para) #: ../source/book.xml:12199 @@ -12890,19 +12889,19 @@ msgstr "这个选项将在 #: ../source/book.xml:12205 #, fuzzy msgid "svnserve as Windows Service" -msgstr "svnserve 作为 Windows 服务" +msgstr "svnserve 作为 Windows 服务" #. (para) #: ../source/book.xml:12207 #, fuzzy msgid "If your Windows system is a descendant of Windows NT (2000, 2003, XP, Vista), then you can run svnserve as a standard Windows service. This is typically a much nicer experience than running it as a standalone daemon with the option. Using daemon-mode requires launching a console, typing a command, and then leaving the console window running indefinitely. A Windows service, however, runs in the background, can start at boot time automatically, and can be started and stopped using the same consistent administration interface as other Windows services." -msgstr "如果你的Windows系统是Windows NT (2000, 2003, XP, Vista)的后代,你可以将svnserve作为Windows服务运行,这是比使用选项直接运行守护进程感觉更好。使用守护进程模式,需要打开命令行窗口,输入命令,然后保持命令行窗口不关闭,而作为Windows服务时,在后台运行,可以在启动时自动执行,并且可以使用同其他Windows服务一致的管理界面启动和停止服务。" +msgstr "如果你的Windows系统是Windows NT (2000, 2003, XP, Vista)的后代,你可以将svnserve作为Windows服务运行,这是比使用选项直接运行守护进程感觉更好。使用守护进程模式,需要打开命令行窗口,输入命令,然后保持命令行窗口不关闭,而作为Windows服务时,在后台运行,可以在启动时自动执行,并且可以使用同其他Windows服务一致的管理界面启动和停止服务。" #. (para) #: ../source/book.xml:12219 #, fuzzy msgid "You'll need to define the new service using the command-line tool SC.EXE. Much like the inetd configuration line, you must specify an exact invocation of svnserve for Windows to run at start-up time:" -msgstr "你需要使用命令行工具SC.EXE定义新的服务,就像inetd的配置行,你必须在Windows启动时指明svnserve的调用。" +msgstr "你需要使用命令行工具SC.EXE定义新的服务,就像inetd的配置行,你必须在Windows启动时指明svnserve的调用。" #. (screen) #: ../source/book.xml:12224 @@ -12926,13 +12925,13 @@ msgstr "" #: ../source/book.xml:12231 #, fuzzy msgid "This defines a new Windows service named svn, and which executes a particular svnserve.exe command when started (in this case, rooted at C:\\repos.) There are a number of caveats in the prior example, however." -msgstr "这样定义了一个新的Windows服务,叫做svn,会在启动时(在这个例子里,根目录是C:\\repos。)执行特定的svnserve.exe,可是前面这个例子产生了一些错误。" +msgstr "这样定义了一个新的Windows服务,叫做svn,会在启动时(在这个例子里,根目录是C:\\repos。)执行特定的svnserve.exe,可是前面这个例子产生了一些错误。" #. (para) #: ../source/book.xml:12237 #, fuzzy msgid "First, notice that the svnserve.exe program must always be invoked with the option. Any other options to svnserve must then be specified on the same line, but you cannot add conflicting options such as , , or . Options such as or are fine, though. Second, be careful about spaces when invoking the SC.EXE command: the key= value patterns must have no spaces between key= and exactly one space before the value. Lastly, be careful about spaces in your command-line to be invoked. If a directory name contains spaces (or other characters that need escaping), place the entire inner value of binpath in double-quotes, by escaping them:" -msgstr "首先,必须注意svnserve.exe使用选项启动。svnserve的其它选项必须在同一行上指定,但你不能使用冲突的选项,例如,而选项都没有问题。第二,调用SC.EXE时必须注意空格:key= value的模式中key=之间必须没有空格,而且在与value之间只能有一个空格。最后,必须注意执行的命令行中的空格,如果目录名中包含了空格(或其它需要回避的字符),为了回避这些字符,请将整个binpath值放在双引号中:" +msgstr "首先,必须注意svnserve.exe使用选项启动。svnserve的其它选项必须在同一行上指定,但你不能使用冲突的选项,例如,而选项都没有问题。第二,调用SC.EXE时必须注意空格:key= value的模式中key=之间必须没有空格,而且在与value之间只能有一个空格。最后,必须注意执行的命令行中的空格,如果目录名中包含了空格(或其它需要回避的字符),为了回避这些字符,请将整个binpath值放在双引号中:" #. (screen) #: ../source/book.xml:12256 @@ -12955,7 +12954,7 @@ msgstr "" #. (para) #: ../source/book.xml:12263 msgid "Also note that the word binpath is misleading—its value is a command line, not the path to an executable. That's why you need to surround it with quote marks if it contains embedded spaces." -msgstr "" +msgstr "也需要注意单词binpath会造成误解—它的值是一个命令行,而不是可执行的路径,所以我们为了防止有嵌入的空格而使用了引号围绕。" #. (para) #: ../source/book.xml:12268 @@ -12979,7 +12978,7 @@ msgstr "" #: ../source/book.xml:12276 #, fuzzy msgid "The service can also be uninstalled (i.e. undefined) by deleting its definition: sc delete svn. Just be sure to stop the service first! The SC.EXE program has many other subcommands and options; run sc /? to learn more about it." -msgstr "也可以通过删除其定义删除服务:sc delete svn,只需要确定首先停止服务,SC.EXE有许多子命令和选项,更多信息可以运行sc /?查看。" +msgstr "也可以通过删除其定义删除服务:sc delete svn,只需要确定首先停止服务,SC.EXE有许多子命令和选项,更多信息可以运行sc /?查看。" #. (title) #: ../source/book.xml:12287 @@ -12990,7 +12989,7 @@ msgstr "内置的认证和授权" #: ../source/book.xml:12289 #, fuzzy msgid "When a client connects to an svnserve process, the following things happen:" -msgstr "如果一个客户端连接到svnserve进程,如下事情会发生:" +msgstr "如果一个客户端连接到svnserve进程,如下事情会发生:" #. (para) #: ../source/book.xml:12293 @@ -13037,7 +13036,7 @@ msgstr "在撰写本文时,服务器还只知道怎样发送CRAM-MD5SSH. In that case, the server simply examines the user it's running as, and uses it as the authenticated username. For more on this, see ." -msgstr "当然也有可能,如果客户端在外部通过通道代理认证,如SSH,在那种情况下,服务器简单的检验作为那个用户的运行,然后使用它作为认证用户名,更多信息请看。" +msgstr "当然也有可能,如果客户端在外部通过通道代理认证,如SSH,在那种情况下,服务器简单的检验作为那个用户的运行,然后使用它作为认证用户名,更多信息请看。" #. (para) #: ../source/book.xml:12338 @@ -13094,7 +13093,7 @@ msgstr "" #: ../source/book.xml:12378 #, fuzzy msgid "The value of password-db can be an absolute or relative path to the users file. For many admins, it's easy to keep the file right in the conf/ area of the repository, alongside svnserve.conf. On the other hand, it's possible you may want to have two or more repositories share the same users file; in that case, the file should probably live in a more public place. The repositories sharing the users file should also be configured to have the same realm, since the list of users essentially defines an authentication realm. Wherever the file lives, be sure to set the file's read and write permissions appropriately. If you know which user(s) svnserve will run as, restrict read access to the user file as necessary." -msgstr "password-db的值可以是用户文件的绝对或相对路径,对许多管理员来说,把文件保存在版本库conf/下的svnserve.conf旁边是一个简单的方法。另一方面,可能你的多个版本库使用同一个用户文件,此时,这个文件应该在更公开的地方,版本库分享用户文件时必须配置为相同的域,因为用户列表本质上定义了一个认证域,无论这个文件在哪里,必须设置好文件的读写权限,如果你知道运行svnserve的用户,限定这个用户对这个文件有读权限是必须的。" +msgstr "password-db的值可以是用户文件的绝对或相对路径,对许多管理员来说,把文件保存在版本库conf/下的svnserve.conf旁边是一个简单的方法。另一方面,可能你的多个版本库使用同一个用户文件,此时,这个文件应该在更公开的地方,版本库分享用户文件时必须配置为相同的域,因为用户列表本质上定义了一个认证域,无论这个文件在哪里,必须设置好文件的读写权限,如果你知道运行svnserve的用户,限定这个用户对这个文件有读权限是必须的。" #. (title) #: ../source/book.xml:12396 @@ -13205,13 +13204,13 @@ msgstr "SSH 隧道" #: ../source/book.xml:12465 #, fuzzy msgid "svnserve's built-in authentication can be very handy, because it avoids the need to create real system accounts. On the other hand, some administrators already have well-established SSH authentication frameworks in place. In these situations, all of the project's users already have system accounts and the ability to SSH into the server machine." -msgstr "svnserve的内置认证会非常容易得到,因为它避免了创建真实的系统帐号,另一方面,一些管理员已经创建好了SSH认证框架,在这种情况下,所有的项目用户已经拥有了系统帐号和有能力SSH到服务器。" +msgstr "svnserve的内置认证会非常容易得到,因为它避免了创建真实的系统帐号,另一方面,一些管理员已经创建好了SSH认证框架,在这种情况下,所有的项目用户已经拥有了系统帐号和有能力SSH到服务器。" #. (para) #: ../source/book.xml:12472 #, fuzzy msgid "It's easy to use SSH in conjunction with svnserve. The client simply uses the svn+ssh:// URL scheme to connect:" -msgstr "SSH与svnserve结合很简单,客户端只需要使用svn+ssh://的URL模式来连接:" +msgstr "SSH与svnserve结合很简单,客户端只需要使用svn+ssh://的URL模式来连接:" #. (screen) #: ../source/book.xml:12475 @@ -13245,25 +13244,25 @@ msgstr "" #: ../source/book.xml:12487 #, fuzzy msgid "In this example, the Subversion client is invoking a local ssh process, connecting to host.example.com, authenticating as the user harry, then spawning a private svnserve process on the remote machine running as the user harry. The svnserve command is being invoked in tunnel mode () and its network protocol is being tunneled over the encrypted connection by ssh, the tunnel-agent. svnserve is aware that it's running as the user harry, and if the client performs a commit, the authenticated username will be used as the author of the new revision." -msgstr "在这个例子里,Subversion客户端会调用一个ssh进程,连接到host.example.com,使用用户harry认证,然后会有一个svnserve私有进程以用户harry运行。svnserve是以管道模式调用的(),它的网络协议是通过ssh封装的,被管道代理的svnserve会知道程序是以用户harry运行的,如果客户执行一个提交,认证的用户名会作为版本的参数保存到新的修订本。" +msgstr "在这个例子里,Subversion客户端会调用一个ssh进程,连接到host.example.com,使用用户harry认证,然后会有一个svnserve私有进程以用户harry运行。svnserve是以管道模式调用的(),它的网络协议是通过ssh封装的,被管道代理的svnserve会知道程序是以用户harry运行的,如果客户执行一个提交,认证的用户名会作为版本的参数保存到新的修订本。" #. (para) #: ../source/book.xml:12501 #, fuzzy msgid "The important thing to understand here is that the Subversion client is not connecting to a running svnserve daemon. This method of access doesn't require a daemon, nor does it notice one if present. It relies wholly on the ability of ssh to spawn a temporary svnserve process, which then terminates when the network connection is closed." -msgstr "这里要理解的最重要的事情是Subversion客户端是连接到运行中的svnserve守护进程,这种访问方法不需要一个运行的守护进程,也不需要在必要时唤醒一个,它依赖于ssh来发起一个svnserve进程,然后网络断开后终止进程。" +msgstr "这里要理解的最重要的事情是Subversion客户端是连接到运行中的svnserve守护进程,这种访问方法不需要一个运行的守护进程,也不需要在必要时唤醒一个,它依赖于ssh来发起一个svnserve进程,然后网络断开后终止进程。" #. (para) #: ../source/book.xml:12509 #, fuzzy msgid "When using svn+ssh:// URLs to access a repository, remember that it's the ssh program prompting for authentication, and not the svn client program. That means there's no automatic password caching going on (see ). The Subversion client often makes multiple connections to the repository, though users don't normally notice this due to the password caching feature. When using svn+ssh:// URLs, however, users may be annoyed by ssh repeatedly asking for a password for every outbound connection. The solution is to use a separate SSH password-caching tool like ssh-agent on a Unix-like system, or pageant on Windows." -msgstr "当使用svn+ssh://的URL访问版本库时,记住是ssh提示请求认证,而svn客户端程序。这意味着密码不会有自动缓存(见),Subversion客户端通常会建立多个版本库的连接,但用户通常会因为密码缓存特性而没有注意到这一点,当使用svn+ssh://的URL时,用户会为ssh在每次建立连接时重复的询问密码感到讨厌,解决方案是用一个独立的SSH密码缓存工具,像类Unix系统的ssh-agent或者是Windows下的pageant。" +msgstr "当使用svn+ssh://的URL访问版本库时,记住是ssh提示请求认证,而svn客户端程序。这意味着密码不会有自动缓存(见),Subversion客户端通常会建立多个版本库的连接,但用户通常会因为密码缓存特性而没有注意到这一点,当使用svn+ssh://的URL时,用户会为ssh在每次建立连接时重复的询问密码感到讨厌,解决方案是用一个独立的SSH密码缓存工具,像类Unix系统的ssh-agent或者是Windows下的pageant。" #. (para) #: ../source/book.xml:12536 #, fuzzy msgid "Note that using any sort of svnserve-enforced access control at all is a bit pointless; the user already has direct access to the repository database." -msgstr "请注意,使用svnserve的访问控制进行权限控制将会失去意义,因为用户已经直接访问到了版本库数据。" +msgstr "请注意,使用svnserve的访问控制进行权限控制将会失去意义,因为用户已经直接访问到了版本库数据。" #. (para) #: ../source/book.xml:12524 @@ -13274,7 +13273,7 @@ msgstr "当在一个管道上运行时,认证通常是基于操作系统对版 #. (para) #: ../source/book.xml:12545 msgid "We don't actually recommend this, since RSH is notably less secure than SSH." -msgstr "" +msgstr "我们实际上不支持这个,因为RSH在安全性上显著不如SSH。" #. (para) #: ../source/book.xml:12541 @@ -13298,7 +13297,7 @@ msgstr "" #: ../source/book.xml:12555 #, fuzzy msgid "And now, you can use this new tunnel definition by using a URL scheme that matches the name of your new variable: svn+rsh://host/path. When using the new URL scheme, the Subversion client will actually be running the command rsh host svnserve -t behind the scenes. If you include a username in the URL (for example, svn+rsh://username@host/path) the client will also include that in its command (rsh username@host svnserve -t). But you can define new tunneling schemes to be much more clever than that:" -msgstr "现在你可以通过指定与定义匹配的URL模式来使用新的管道定义:svn+rsh://host/path。当使用新的URL模式时,Subversion客户端实际上会在后台运行rsh host svnserve -t这个命令,如果你在URL中包括一个用户名(例如,svn+rsh://username@host/path),客户端也会在自己的命令中包含这部分(rsh username@host svnserve -t),但是你可以定义比这个更加智能的新的管道模式:" +msgstr "现在你可以通过指定与定义匹配的URL模式来使用新的管道定义:svn+rsh://host/path。当使用新的URL模式时,Subversion客户端实际上会在后台运行rsh host svnserve -t这个命令,如果你在URL中包括一个用户名(例如,svn+rsh://username@host/path),客户端也会在自己的命令中包含这部分(rsh username@host svnserve -t),但是你可以定义比这个更加智能的新的管道模式:" #. (screen) #: ../source/book.xml:12565 @@ -13322,7 +13321,7 @@ msgstr "这个例子里论证了一些事情,首先,它展现了如何让Sub #: ../source/book.xml:12578 #, fuzzy msgid "Second, it shows how to define a custom environment variable that can override the name of the tunneling program. Setting the SVN_SSH environment variable is a convenient way to override the default SSH tunnel agent. But if you need to have several different overrides for different servers, each perhaps contacting a different port or passing a different set of options to SSH, you can use the mechanism demonstrated in this example. Now if we were to set the JOESSH environment variable, its value would override the entire value of the tunnel variable—$JOESSH would be executed instead of /opt/alternate/ssh -p 29934." -msgstr "第二点,它展示了怎样定义一个自定义的环境变量来覆盖管道程序中的名字,设置SVN_SSH环境变量是覆盖缺省的SSH管道的一种简便方法,但是如果你需要为多个服务器做出多个不同的覆盖,或许每一个都联系不同的端口或传递不同的SSH选项,你可以使用本例论述的机制。现在如果我们设置JOESSH环境变量,它的值会覆盖管道中的变量值—会执行$JOESSH而不是/opt/alternate/ssh -p 29934。" +msgstr "第二点,它展示了怎样定义一个自定义的环境变量来覆盖管道程序中的名字,设置SVN_SSH环境变量是覆盖缺省的SSH管道的一种简便方法,但是如果你需要为多个服务器做出多个不同的覆盖,或许每一个都联系不同的端口或传递不同的SSH选项,你可以使用本例论述的机制。现在如果我们设置JOESSH环境变量,它的值会覆盖管道中的变量值—会执行$JOESSH而不是/opt/alternate/ssh -p 29934。" #. (title) #: ../source/book.xml:12595 @@ -13333,13 +13332,13 @@ msgstr "SSH 配置技巧" #: ../source/book.xml:12597 #, fuzzy msgid "It's not only possible to control the way in which the client invokes ssh, but also to control the behavior of sshd on your server machine. In this section, we'll show how to control the exact svnserve command executed by sshd, as well as how to have multiple users share a single system account." -msgstr "不仅仅是可以控制客户端调用ssh方式,也可以控制服务器中的sshd的行为方式,在本小节,我们会展示怎样控制sshd执行svnserve,包括如何让多个用户分享同一个系统帐户。" +msgstr "不仅仅是可以控制客户端调用ssh方式,也可以控制服务器中的sshd的行为方式,在本小节,我们会展示怎样控制sshd执行svnserve,包括如何让多个用户分享同一个系统帐户。" #. (para) #: ../source/book.xml:12609 #, fuzzy msgid "To begin, locate the home directory of the account you'll be using to launch svnserve. Make sure the account has an SSH public/private keypair installed, and that the user can log in via public-key authentication. Password authentication will not work, since all of the following SSH tricks revolve around using the SSH authorized_keys file." -msgstr "作为开始,定位到你启动svnserve的帐号的主目录,确定这个账户已经安装了一套SSH公开/私有密钥对,用户可以通过公开密钥认证,因为所有如下的技巧围绕着使用SSHauthorized_keys文件,密码认证在这里不会工作。" +msgstr "作为开始,定位到你启动svnserve的帐号的主目录,确定这个账户已经安装了一套SSH公开/私有密钥对,用户可以通过公开密钥认证,因为所有如下的技巧围绕着使用SSHauthorized_keys文件,密码认证在这里不会工作。" #. (para) #: ../source/book.xml:12616 @@ -13377,7 +13376,7 @@ msgstr "" #: ../source/book.xml:12633 #, fuzzy msgid "When the command field is set, the SSH daemon will run the named program instead of the typical svnserve -t invocation that the Subversion client asks for. This opens the door to a number of server-side tricks. In the following examples, we abbreviate the lines of the file as:" -msgstr "当command字段设置后,SSH守护进程运行命名的程序而不是通常Subversion客户端询问的svnserve -t。这为实施许多服务器端技巧开启了大门,在下面的例子里,我们简写了文件的这些行:" +msgstr "当command字段设置后,SSH守护进程运行命名的程序而不是通常Subversion客户端询问的svnserve -t。这为实施许多服务器端技巧开启了大门,在下面的例子里,我们简写了文件的这些行:" #. (screen) #: ../source/book.xml:12639 @@ -13398,7 +13397,7 @@ msgstr "控制调用的命令" #: ../source/book.xml:12648 #, fuzzy msgid "Because we can specify the executed server-side command, it's easy to name a specific svnserve binary to run and to pass it extra arguments:" -msgstr "因为我们可以指定服务器端执行的命令,我们很容易来选择运行一个特定的svnserve程序来并且传递给它额外的参数:" +msgstr "因为我们可以指定服务器端执行的命令,我们很容易来选择运行一个特定的svnserve程序来并且传递给它额外的参数:" #. (screen) #: ../source/book.xml:12651 @@ -13414,7 +13413,7 @@ msgstr "" #: ../source/book.xml:12654 #, fuzzy msgid "In this example, /path/to/svnserve might be a custom wrapper script around svnserve which sets the umask (see ). It also shows how to anchor svnserve in a virtual root directory, just as one often does when running svnserve as a daemon process. This might be done either to restrict access to parts of the system, or simply to relieve the user of having to type an absolute path in the svn+ssh:// URL." -msgstr "在这个例子里,/path/to/svnserve也许会是一个svnserve程序的包裹脚本,会来设置umask(见)。它也展示了怎样在虚拟根目录定位一个svnserve,就像我们经常在使用守护进程模式下运行svnserve一样。这样做不仅可以把访问限制在系统的一部分,也可以使用户不需要在svn+ssh://URL里输入绝对路径。" +msgstr "在这个例子里,/path/to/svnserve也许会是一个svnserve程序的包裹脚本,会来设置umask(见)。它也展示了怎样在虚拟根目录定位一个svnserve,就像我们经常在使用守护进程模式下运行svnserve一样。这样做不仅可以把访问限制在系统的一部分,也可以使用户不需要在svn+ssh://URL里输入绝对路径。" #. (para) #: ../source/book.xml:12665 @@ -13438,7 +13437,7 @@ msgstr "" #: ../source/book.xml:12676 #, fuzzy msgid "This example allows both Harry and Sally to connect to the same account via public-key authentication. Each of them has a custom command that will be executed; the option tells svnserve -t to assume that the named argument is the authenticated user. Without , it would appear as though all commits were coming from the one shared system account." -msgstr "这个例子允许Harry和Sally通过公钥认证连接同一个的账户,每个人自定义的命令将会执行。选项告诉svnserve -t命令采用命名的参数作为经过认证的用户,如果没有,所有的提交会作为共享的系统帐户提交。" +msgstr "这个例子允许Harry和Sally通过公钥认证连接同一个的账户,每个人自定义的命令将会执行。选项告诉svnserve -t命令采用命名的参数作为经过认证的用户,如果没有,所有的提交会作为共享的系统帐户提交。" #. (para) #: ../source/book.xml:12685 @@ -13474,7 +13473,7 @@ msgstr "他们讨厌这样做。" #: ../source/book.xml:12710 #, fuzzy msgid "The Apache HTTP Server is a heavy duty network server that Subversion can leverage. Via a custom module, httpd makes Subversion repositories available to clients via the WebDAV/DeltaV protocol, which is an extension to HTTP 1.1 (see http://www.webdav.org/ for more information). This protocol takes the ubiquitous HTTP protocol that is the core of the World Wide Web, and adds writing—specifically, versioned writing—capabilities. The result is a standardized, robust system that is conveniently packaged as part of the Apache 2.0 software, is supported by numerous operating systems and third-party products, and doesn't require network administrators to open up yet another custom port. While an Apache-Subversion server has more features than svnserve, it's also a bit more difficult to set up. With flexibility often comes more complexity." -msgstr "Apache的HTTP服务器是一个Subversion可以利用的重型网络服务器,通过一个自定义模块,httpd可以让Subversion版本库通过WebDAV/DeltaV协议在客户端前可见,WebDAV/DeltaV协议是HTTP 1.1的扩展(见来查看详细信息)。这个协议利用了无处不在的HTTP协议是广域网的核心这一点,添加了写能力—更明确一点,版本化的写—能力。结果就是这样一个标准化的健壮的系统,作为Apache 2.0软件的一部分打包,被许多操作系统和第三方产品支持,网络管理员也不需要打开另一个自定义端口。 这样一个Apache-Subversion服务器具备了许多svnserve没有的特性,但是也有一点难于配置,灵活通常会带来复杂性。" +msgstr "Apache的HTTP服务器是一个Subversion可以利用的重型网络服务器,通过一个自定义模块,httpd可以让Subversion版本库通过WebDAV/DeltaV协议在客户端前可见,WebDAV/DeltaV协议是HTTP 1.1的扩展(见来查看详细信息)。这个协议利用了无处不在的HTTP协议是广域网的核心这一点,添加了写能力—更明确一点,版本化的写—能力。结果就是这样一个标准化的健壮的系统,作为Apache 2.0软件的一部分打包,被许多操作系统和第三方产品支持,网络管理员也不需要打开另一个自定义端口。 这样一个Apache-Subversion服务器具备了许多svnserve没有的特性,但是也有一点难于配置,灵活通常会带来复杂性。" #. (para) #: ../source/book.xml:12727 @@ -13524,7 +13523,7 @@ msgstr "先决条件" #: ../source/book.xml:12777 #, fuzzy msgid "To network your repository over HTTP, you basically need four components, available in two packages. You'll need Apache httpd 2.0, the mod_dav DAV module that comes with it, Subversion, and the mod_dav_svn filesystem provider module distributed with Subversion. Once you have all of those components, the process of networking your repository is as simple as:" -msgstr "为了让你的版本库使用HTTP网络,你基本上需要两个包里的四个部分。你需要Apache httpd 2.0和包括的mod_dav DAV模块,Subversion和与之一同分发的mod_dav_svn文件系统提供者模块,如果你有了这些组件,网络化你的版本库将非常简单,如:" +msgstr "为了让你的版本库使用HTTP网络,你基本上需要两个包里的四个部分。你需要Apache httpd 2.0和包括的mod_dav DAV模块,Subversion和与之一同分发的mod_dav_svn文件系统提供者模块,如果你有了这些组件,网络化你的版本库将非常简单,如:" #. (para) #: ../source/book.xml:12787 @@ -13546,7 +13545,7 @@ msgstr "配置你的httpd.conf来输出 #: ../source/book.xml:12800 #, fuzzy msgid "You can accomplish the first two items either by compiling httpd and Subversion from source code, or by installing pre-built binary packages of them on your system. For the most up-to-date information on how to compile Subversion for use with the Apache HTTP Server, as well as how to compile and configure Apache itself for this purpose, see the INSTALL file in the top level of the Subversion source code tree." -msgstr "你可以通过从源代码编译httpd和Subversion来完成前两个项目,也可以通过你的系统上的已经编译好的二进制包来安装。最新的使用Apache HTTP的Subversion的编译方法和Apache的配置方式可以看Subversion源代码树根目录的INSTALL文件。" +msgstr "你可以通过从源代码编译httpd和Subversion来完成前两个项目,也可以通过你的系统上的已经编译好的二进制包来安装。最新的使用Apache HTTP的Subversion的编译方法和Apache的配置方式可以看Subversion源代码树根目录的INSTALL文件。" #. (title) #: ../source/book.xml:12812 @@ -13557,7 +13556,7 @@ msgstr "基本的 Apache 配置" #: ../source/book.xml:12814 #, fuzzy msgid "Once you have all the necessary components installed on your system, all that remains is the configuration of Apache via its httpd.conf file. Instruct Apache to load the mod_dav_svn module using the LoadModule directive. This directive must precede any other Subversion-related configuration items. If your Apache was installed using the default layout, your mod_dav_svn module should have been installed in the modules subdirectory of the Apache install location (often /usr/local/apache2). The LoadModule directive has a simple syntax, mapping a named module to the location of a shared library on disk:" -msgstr "一旦你安装了必须的组件,剩下的工作就是在httpd.conf里配置Apache,使用LoadModule来加载mod_dav_svn模块,这个指示必须先与其它Subversion相关的其它配置出现,如果你的Apache使用缺省布局安装,你的mod_dav_svn模块一定在Apache安装目录(通常是在/usr/local/apache2)的modules子目录,LoadModule指示的语法很简单,影射一个名字到它的共享库的物理位置:" +msgstr "一旦你安装了必须的组件,剩下的工作就是在httpd.conf里配置Apache,使用LoadModule来加载mod_dav_svn模块,这个指示必须先与其它Subversion相关的其它配置出现,如果你的Apache使用缺省布局安装,你的mod_dav_svn模块一定在Apache安装目录(通常是在/usr/local/apache2)的modules子目录,LoadModule指示的语法很简单,影射一个名字到它的共享库的物理位置:" #. (screen) #: ../source/book.xml:12828 @@ -13573,7 +13572,7 @@ msgstr "" #: ../source/book.xml:12831 #, fuzzy msgid "Note that if mod_dav was compiled as a shared object (instead of statically linked directly to the httpd binary), you'll need a similar LoadModule statement for it, too. Be sure that it comes before the mod_dav_svn line:" -msgstr "注意,如果mod_dav是作为共享对象编译(而不是静态链接到httpd程序),你需要为它使用使用LoadModule语句,一定确定它在mod_dav_svn之前:" +msgstr "注意,如果mod_dav是作为共享对象编译(而不是静态链接到httpd程序),你需要为它使用使用LoadModule语句,一定确定它在mod_dav_svn之前:" #. (screen) #: ../source/book.xml:12836 @@ -13645,7 +13644,7 @@ msgstr "使用上面的语法,Apache会代理所有URL路径部分为Location, it doesn't overlap with other exported Locations. For example, if your main DocumentRoot is exported to /www, do not export a Subversion repository in <Location /www/repos>. If a request comes in for the URI /www/repos/foo.c, Apache won't know whether to look for a file repos/foo.c in the DocumentRoot, or whether to delegate mod_dav_svn to return foo.c from the Subversion repository. The result is often an error from the server of the form 301 Moved Permanently." -msgstr "请确定当你定义新的Location,不会与其它输出的位置重叠。例如你的主要DocumentRoot/www,不要把Subversion版本库输出到<Location /www/repos>,如果一个请求的URI是/www/repos/foo.c,Apache不知道是直接到repos/foo.c访问这个文件还是让mod_dav_svn代理从Subversion版本库返回foo.c。" +msgstr "请确定当你定义新的Location,不会与其它输出的位置重叠。例如你的主要DocumentRoot/www,不要把Subversion版本库输出到<Location /www/repos>,如果一个请求的URI是/www/repos/foo.c,Apache不知道是直接到repos/foo.c访问这个文件还是让mod_dav_svn代理从Subversion版本库返回foo.c。" #. (title) #: ../source/book.xml:12909 @@ -13749,7 +13748,7 @@ msgstr "基本 HTTP 认证" #: ../source/book.xml:13001 #, fuzzy msgid "The easiest way to authenticate a client is via the HTTP Basic authentication mechanism, which simply uses a username and password to verify that a user is who she says she is. Apache provides an htpasswd utility for managing the list of acceptable usernames and passwords. Let's grant commit access to Sally and Harry. First, we need to add them to the password file." -msgstr "最简单的客户端认证方式是通过HTTP基本认证机制,简单的使用用户名和密码来验证一个用户所自称的身份,Apache提供了一个htpasswd工具来管理可接受的用户名和密码,这些就是你希望赋予Subversion特别权限的用户,让我们给Sally和Harry赋予提交权限,首先,我们需要添加他们到密码文件。" +msgstr "最简单的客户端认证方式是通过HTTP基本认证机制,简单的使用用户名和密码来验证一个用户所自称的身份,Apache提供了一个htpasswd工具来管理可接受的用户名和密码,这些就是你希望赋予Subversion特别权限的用户,让我们给Sally和Harry赋予提交权限,首先,我们需要添加他们到密码文件。" #. (screen) #: ../source/book.xml:13009 @@ -13785,7 +13784,7 @@ msgstr "" #: ../source/book.xml:13022 #, fuzzy msgid "Next, you need to add some more httpd.conf directives inside your Location block to tell Apache what to do with your new password file. The AuthType directive specifies the type of authentication system to use. In this case, we want to specify the Basic authentication system. AuthName is an arbitrary name that you give for the authentication domain. Most browsers will display this name in the pop-up dialog box when the browser is querying the user for his name and password. Finally, use the AuthUserFile directive to specify the location of the password file you created using htpasswd." -msgstr "下一步,你需要在httpd.confLocation区里添加一些指示来告诉Apache如何来使用这些密码文件,AuthType指示指定系统使用的认证类型,这种情况下,我们需要指定Basic认证系统,AuthName是你提供给认证域一个任意名称,大多数浏览器会在向用户询问名称和密码的弹出窗口里显示这个名称,最终,使用AuthUserFile指示来指定使用htpasswd创建的密码文件的位置。" +msgstr "下一步,你需要在httpd.confLocation区里添加一些指示来告诉Apache如何来使用这些密码文件,AuthType指示指定系统使用的认证类型,这种情况下,我们需要指定Basic认证系统,AuthName是你提供给认证域一个任意名称,大多数浏览器会在向用户询问名称和密码的弹出窗口里显示这个名称,最终,使用AuthUserFile指示来指定使用htpasswd创建的密码文件的位置。" #. (para) #: ../source/book.xml:13036 @@ -14156,13 +14155,13 @@ msgstr "每目录访问控制" #: ../source/book.xml:13317 #, fuzzy msgid "It's possible to set up finer-grained permissions using a second Apache httpd module, mod_authz_svn. This module grabs the various opaque URLs passing from client to server, asks mod_dav_svn to decode them, and then possibly vetoes requests based on access policies defined in a configuration file." -msgstr "也可以使用Apache的httpd模块mod_authz_svn更加细致的设置访问权限,这个模块收集客户端传递过来的不同的晦涩的URL信息,询问mod_dav_svn来解码,然后根据在配置文件定义的访问政策来裁决请求。" +msgstr "也可以使用Apache的httpd模块mod_authz_svn更加细致的设置访问权限,这个模块收集客户端传递过来的不同的晦涩的URL信息,询问mod_dav_svn来解码,然后根据在配置文件定义的访问政策来裁决请求。" #. (para) #: ../source/book.xml:13324 #, fuzzy msgid "If you've built Subversion from source code, mod_authz_svn is automatically built and installed alongside mod_dav_svn. Many binary distributions install it automatically as well. To verify that it's installed correctly, make sure it comes right after mod_dav_svn's LoadModule directive in httpd.conf:" -msgstr "如果你从源代码创建Subversion,mod_authz_svn会自动附加到mod_dav_svn,许多二进制分发版本也会自动安装,为了验证它是安装正确,确定它是在httpd.confLoadModule指示中的mod_dav_svn后面:" +msgstr "如果你从源代码创建Subversion,mod_authz_svn会自动附加到mod_dav_svn,许多二进制分发版本也会自动安装,为了验证它是安装正确,确定它是在httpd.confLoadModule指示中的mod_dav_svn后面:" #. (screen) #: ../source/book.xml:13332 @@ -14344,19 +14343,19 @@ msgstr "禁用基于路径的检查" #: ../source/book.xml:13442 #, fuzzy msgid "The mod_dav_svn module goes through a lot of work to make sure that data you've marked unreadable doesn't get accidentally leaked. This means that it needs to closely monitor all of the paths and file-contents returned by commands like svn checkout or svn update commands. If these commands encounter a path that isn't readable according to some authorization policy, then the path is typically omitted altogether. In the case of history or rename tracing—e.g. running a command like svn cat -r OLD foo.c on a file that was renamed long ago—the rename tracking will simply halt if one of the object's former names is determined to be read-restricted." -msgstr "mod_dav_svn模块做了许多工作来确定你标记为不可读的数据不会因意外而泄露,这意味着需要紧密监控通过svn checkout或是svn update返回的路径和文件内容,如果这些命令遇到一些根据认证策略不是可读的路径,这个路径通常会被一起忽略,在历史或者重命名操作时—例如运行一个类似svn cat -r OLD foo.c的命令来操作一个很久以前改过名字的文件 — 如果一个对象的以前的名字检测到是只读的,重命令追踪就会终止。" +msgstr "mod_dav_svn模块做了许多工作来确定你标记为不可读的数据不会因意外而泄露,这意味着需要紧密监控通过svn checkout或是svn update返回的路径和文件内容,如果这些命令遇到一些根据认证策略不是可读的路径,这个路径通常会被一起忽略,在历史或者重命名操作时—例如运行一个类似svn cat -r OLD foo.c的命令来操作一个很久以前改过名字的文件 — 如果一个对象的以前的名字检测到是只读的,重命令追踪就会终止。" #. (para) #: ../source/book.xml:13456 #, fuzzy msgid "All of this path-checking can sometimes be quite expensive, especially in the case of svn log. When retrieving a list of revisions, the server looks at every changed path in each revision and checks it for readability. If an unreadable path is discovered, then it's omitted from the list of the revision's changed paths (normally seen with the option), and the whole log message is suppressed. Needless to say, this can be time-consuming on revisions that affect a large number of files. This is the cost of security: even if you haven't configured a module like mod_authz_svn at all, the mod_dav_svn module is still asking Apache httpd to run authorization checks on every path. The mod_dav_svn module has no idea what authorization modules have been installed, so all it can do is ask Apache to invoke whatever might be present." -msgstr "所有的路径检查在有时会非常昂贵,特别是svn log的情况。当检索一列修订版本时,服务器会查看所有修订版本修改的路径,并且检查可读性,如果发现了一个不可读路径,它会从修订版本的修改路径中忽略(通常可以使用选项查看),并且整个的日志信息会被禁止,不必多说,这种影响大量文件修订版本的操作会非常耗时。这是安全的代价:即使你并没有配置mod_authz_svn模块,mod_dav_svn还是会询问httpd来对所有路径运行认证检查,mod_dav_svn模块没有办法知道那个认证模块被安装,所以只能要求Apache调用时提供的内容。" +msgstr "所有的路径检查在有时会非常昂贵,特别是svn log的情况。当检索一列修订版本时,服务器会查看所有修订版本修改的路径,并且检查可读性,如果发现了一个不可读路径,它会从修订版本的修改路径中忽略(通常可以使用选项查看),并且整个的日志信息会被禁止,不必多说,这种影响大量文件修订版本的操作会非常耗时。这是安全的代价:即使你并没有配置mod_authz_svn模块,mod_dav_svn还是会询问httpd来对所有路径运行认证检查,mod_dav_svn模块没有办法知道那个认证模块被安装,所以只能要求Apache调用时提供的内容。" #. (para) #: ../source/book.xml:13474 #, fuzzy msgid "On the other hand, there's also an escape-hatch of sorts, one which allows you to trade security features for speed. If you're not enforcing any sort of per-directory authorization (i.e. not using mod_authz_svn or similar module), then you can disable all of this path-checking. In your httpd.conf file, use the SVNPathAuthz directive:" -msgstr "在另一方面,也有一个安全舱门允许你用安全特性来交换速度,如果你不是坚持要求有每目录授权(如不使用 mod_authz_svn和类似的模块),你就可以关闭所有的路径检查,在你的httpd.conf文件,使用SVNPathAuthz指示:" +msgstr "在另一方面,也有一个安全舱门允许你用安全特性来交换速度,如果你不是坚持要求有每目录授权(如不使用 mod_authz_svn和类似的模块),你就可以关闭所有的路径检查,在你的httpd.conf文件,使用SVNPathAuthz指示:" #. (title) #: ../source/book.xml:13484 @@ -14389,7 +14388,7 @@ msgstr "" #: ../source/book.xml:13495 #, fuzzy msgid "The SVNPathAuthz directive is on by default. When set off, all path-based authorization checking is disabled; mod_dav_svn stops invoking authorization checks on every path it discovers." -msgstr "SVNPathAuthz指示缺省是on,当设置为off时,所有的路径为基础的授权都会关闭;mod_dav_svn停止对每个目录调用授权检查。" +msgstr "SVNPathAuthz指示缺省是on,当设置为off时,所有的路径为基础的授权都会关闭;mod_dav_svn停止对每个目录调用授权检查。" #. (title) #: ../source/book.xml:13505 @@ -14426,7 +14425,7 @@ msgstr "我可以看到老的修订版本吗?" #: ../source/book.xml:13538 #, fuzzy msgid "With an ordinary web browser? In one word: nope. At least, not with mod_dav_svn as your only tool." -msgstr "通过一个普通的浏览器?一句话:不可以,至少是当你只使用mod_dav_svn作为唯一的工具时。" +msgstr "通过一个普通的浏览器?一句话:不可以,至少是当你只使用mod_dav_svn作为唯一的工具时。" #. (para) #: ../source/book.xml:13541 @@ -14442,7 +14441,7 @@ msgstr "之前叫做ViewCVS。" #: ../source/book.xml:13552 #, fuzzy msgid "So to answer the question, one obvious way to see older revisions of files and directories is by passing the argument to the svn list and svn cat commands. To browse old revisions with your web browser, however, you can use third-party software. A good example of this is ViewVC (http://viewvc.tigris.org/). ViewVC was originally written to display CVS repositories through the web, and the latest releases are able to understand Subversion repositories as well." -msgstr "为了回答这些问题,一个明显的看老版本文件和目录的方式是带参数的svn listsvn cat命令,为了在浏览器里察看老版本,你可以使用第三方的软件,一个好的例子是ViewVC(),ViewVC最初写出来是为了在web显示CVS版本库,最新的版本也已经可以理解Subversion版本库了。" +msgstr "为了回答这些问题,一个明显的看老版本文件和目录的方式是带参数的svn listsvn cat命令,为了在浏览器里察看老版本,你可以使用第三方的软件,一个好的例子是ViewVC(),ViewVC最初写出来是为了在web显示CVS版本库,最新的版本也已经可以理解Subversion版本库了。" #. (title) #: ../source/book.xml:13568 @@ -14672,7 +14671,7 @@ msgstr "同样有用的是Apache和Subversion关系的一些特性,像可以 #: ../source/book.xml:13778 #, fuzzy msgid "Finally, because mod_dav_svn is speaking a subset of the WebDAV/DeltaV protocol, it's possible to access the repository via third-party DAV clients. Most modern operating systems (Win32, OS X, and Linux) have the built-in ability to mount a DAV server as a standard network share. This is a complicated topic; for details, read ." -msgstr "最后,因为mod_dav_svn是使用一个半完成的WebDAV/DeltaV方言,所以通过第三方的DAV客户端访问也是可能的,几乎所有的现代操作系统(Win32、OS X和Linux)都有把DAV服务器影射为普通的网络共享的内置能力,这是一个复杂的主题;察看来得到更多细节。" +msgstr "最后,因为mod_dav_svn是使用一个半完成的WebDAV/DeltaV方言,所以通过第三方的DAV客户端访问也是可能的,几乎所有的现代操作系统(Win32、OS X和Linux)都有把DAV服务器影射为普通的网络共享的内置能力,这是一个复杂的主题;察看来得到更多细节。" #. (title) #: ../source/book.xml:13793 @@ -14683,13 +14682,13 @@ msgstr "基于路径的授权" #: ../source/book.xml:13795 #, fuzzy msgid "Both Apache and svnserve are capable of granting (or denying) permissions to users. Typically this is done over the entire repository: a user can read the repository (or not), and she can write to the repository (or not). It's also possible, however, to define finer-grained access rules. One set of users may have permission to write to a certain directory in the repository, but not others; another directory might not even be readable by all but a few special people." -msgstr "Apache和svnserve都可以给用户赋予(或拒绝)访问许可,通常是对整个版本库:一个用户可以读版本库(或不),而且他可以写版本库(或不)。如果可能,也可以定义细粒度的访问规则。一组用户可以有版本库的一个目录的读写权限,但是没有其它的;另一个目录可以是只对一少部分用户可读。" +msgstr "Apache和svnserve都可以给用户赋予(或拒绝)访问许可,通常是对整个版本库:一个用户可以读版本库(或不),而且他可以写版本库(或不)。如果可能,也可以定义细粒度的访问规则。一组用户可以有版本库的一个目录的读写权限,但是没有其它的;另一个目录可以是只对一少部分用户可读。" #. (para) #: ../source/book.xml:13804 #, fuzzy msgid "Both servers use a common file format to describe these path-based access rules. In the case of Apache, one needs to load the mod_authz_svn module and then add the AuthzSVNAccessFile directive (within the httpd.conf file) pointing to your own rules-file. (For a full explanation, see .) If you're using svnserve, then you need to make the authz-db variable (within svnserve.conf) point to your rules-file." -msgstr "两种服务器都使用同样的文件格式描述路径为基础的规则,如果是Apache,需要加载mod_authz_svn模块,然后添加AuthzSVNAccessFile指示(在文件httpd.conf中)指明你的规则文件。(完全解释可以看。)如果你在使用svnserve,你需要让你的authz-db变量(在svnserve.conf中)指向规则文件。" +msgstr "两种服务器都使用同样的文件格式描述路径为基础的规则,如果是Apache,需要加载mod_authz_svn模块,然后添加AuthzSVNAccessFile指示(在文件httpd.conf中)指明你的规则文件。(完全解释可以看。)如果你在使用svnserve,你需要让你的authz-db变量(在svnserve.conf中)指向规则文件。" #. (title) #: ../source/book.xml:13817 @@ -14735,7 +14734,7 @@ msgstr "当你的服务器知道去查找规则文件时,就是需要定义规 #: ../source/book.xml:13871 #, fuzzy msgid "The syntax of the file is the same familiar one used by svnserve.conf and the runtime configuration files. Lines that start with a hash (#) are ignored. In its simplest form, each section names a repository and path within it, and the authenticated usernames are the option names within each section. The value of each option describes the user's level of access to the repository path: either r (read-only) or rw (read-write). If the user is not mentioned at all, no access is allowed." -msgstr "访问文件的语法与svnserve.conf和运行中配置文件非常相似,以(#)开头的行会被忽略,在它的简单形式里,每一小节命名一个版本库和一个里面的路径,认证用户名是在每个小节中的选项名,每个选项的值描述了用户访问版本库的级别:r(只读)或者rw(读写),如果用户没有提到,访问是不允许的。" +msgstr "访问文件的语法与svnserve.conf和运行中配置文件非常相似,以(#)开头的行会被忽略,在它的简单形式里,每一小节命名一个版本库和一个里面的路径,认证用户名是在每个小节中的选项名,每个选项的值描述了用户访问版本库的级别:r(只读)或者rw(读写),如果用户没有提到,访问是不允许的。" #. (para) #: ../source/book.xml:13882 @@ -14860,7 +14859,7 @@ msgstr "这是一个普通的设置;注意在小节名中没有提到版本库 #: ../source/book.xml:13957 #, fuzzy msgid "The asterisk variable (*) is also worth special mention here: it's the only pattern which matches an anonymous user. If you've configured your server block to allow a mixture of anonymous and authenticated access, all users start out accessing anonymously. The server looks for a * value defined for the path being accessed; if it can't find one, then it demands real authentication from the client." -msgstr "星号(*)参数需要在这里详细强调:这是匹配匿名用户的唯一模式,如果你已经配置了你的Location区块允许匿名和认证用户的混合访问,所有用户作为Apache匿名用户开始访问,mod_authz_svn会在要访问路径的定义中查找*值;如果找不到,Apache就会要求真实的客户端认证。" +msgstr "星号(*)参数需要在这里详细强调:这是匹配匿名用户的唯一模式,如果你已经配置了你的Location区块允许匿名和认证用户的混合访问,所有用户作为Apache匿名用户开始访问,mod_authz_svn会在要访问路径的定义中查找*值;如果找不到,Apache就会要求真实的客户端认证。" #. (para) #: ../source/book.xml:13966 @@ -14934,17 +14933,17 @@ msgstr "" #. (title) #: ../source/book.xml:13998 msgid "Partial Readability and Checkouts" -msgstr "" +msgstr "部分可读性和检出" #. (para) #: ../source/book.xml:14000 msgid "If you're using Apache as your Subversion server and have made certain subdirectories of your repository unreadable to certain users, then you need to be aware of a possible non-optimal behavior with svn checkout." -msgstr "" +msgstr "如果你使用Apache作为Subversion服务器,并让版本库的某些子目录对特定用户不可读,然后你需要知道svn checkout会有一个不理想的执行方式。" #. (para) #: ../source/book.xml:14005 msgid "When the client requests a checkout or update over HTTP, it makes a single server request, and receives a single (often large) server response. When the server receives the request, that is the only opportunity Apache has to demand user authentication. This has some odd side-effects. For example, if a certain subdirectory of the repository is only readable by user Sally, and user Harry checks out a parent directory, his client will respond to the initial authentication challenge as Harry. As the server generates the large response, there's no way it can re-send an authentication challenge when it reaches the special subdirectory; thus the subdirectory is skipped altogether, rather than asking the user to re-authenticate as Sally at the right moment. In a similar way, if the root of the repository is anonymously world-readable, then the entire checkout will be done without authentication—again, skipping the unreadable directory, rather than asking for authentication partway through." -msgstr "" +msgstr "当客户端通过HTTP请求检出或更新时,它会做出一个单独的服务器请求,并接收一个单独的(通常很大)服务器响应,当服务器接收到请求,这是Apache服务器要求用户认证的唯一机会,这有一些副作用。例如,如果版本库的一个特定子目录只对用户Sally可读,用户Harry检出父目录,他的客户端会在收到认证要求时返回用户名Harry,因为服务器生成的响应很大,无法在达到特别子目录时重新发送认证请求;因此子目录会被一起略过,而不会询问用户是否使用Sally重新认证。如果版本库是匿名可访问的,则整个检出将不需要认证—再一次,略过不可读的目录,而不会中途要求认证。" #. (title) #: ../source/book.xml:14029 @@ -14971,19 +14970,19 @@ msgstr "常规的系统用户使用Subversion客户端(客户端程序本身 #: ../source/book.xml:14044 #, fuzzy msgid "regular system users connecting to SSH-spawned private svnserve processes (running as themselves) which access the repository;" -msgstr "常规的系统用户连接使用SSH调用的访问版本库的svnserve进程(以它们自己运行);" +msgstr "常规的系统用户连接使用SSH调用的访问版本库的svnserve进程(以它们自己运行);" #. (para) #: ../source/book.xml:14049 #, fuzzy msgid "an svnserve process—either a daemon or one launched by inetd—running as a particular fixed user;" -msgstr "一个svnserve进程—是一个守护进程或是通过inetd启动的—作为一个固定的用户运行;" +msgstr "一个svnserve进程—是一个守护进程或是通过inetd启动的—作为一个固定的用户运行;" #. (para) #: ../source/book.xml:14055 #, fuzzy msgid "an Apache httpd process, running as a particular fixed user." -msgstr "一个Apache httpd进程,以一个固定用户运行。" +msgstr "一个Apache httpd进程,以一个固定用户运行。" #. (para) #: ../source/book.xml:14059 @@ -14995,7 +14994,7 @@ msgstr "最通常的一个问题是管理进入到版本库的所有权和访问 #: ../source/book.xml:14069 #, fuzzy msgid "So the next step beyond setting up a common group for repository users is to force every repository-accessing process to use a sane umask. For users accessing the repository directly, you can make the svn program into a wrapper script that first sets umask 002 and then runs the real svn client program. You can write a similar wrapper script for the svnserve program, and add a umask 002 command to Apache's own startup script, apachectl. For example:" -msgstr "所以下一步我们不选择为每个版本库用户设置一个共同的组的方法,而是强制每个版本库访问进程使用一个健全的umask。对直接访问版本库的用户,你可以使用svn的包裹脚本来首先设置umask 002,然后运行真实的svn客户端程序,你可以为svnserve写相同的脚本,并且增加umask 002命令到Apache自己的启动脚本apachectl中。例如:" +msgstr "所以下一步我们不选择为每个版本库用户设置一个共同的组的方法,而是强制每个版本库访问进程使用一个健全的umask。对直接访问版本库的用户,你可以使用svn的包裹脚本来首先设置umask 002,然后运行真实的svn客户端程序,你可以为svnserve写相同的脚本,并且增加umask 002命令到Apache自己的启动脚本apachectl中。例如:" #. (screen) #: ../source/book.xml:14079 @@ -15023,7 +15022,7 @@ msgstr "" #: ../source/book.xml:14088 #, fuzzy msgid "Another common problem is often encountered on Unix-like systems. As a repository is used, Berkeley DB occasionally creates new log files to journal its actions. Even if the repository is wholly owned by the svn group, these newly created files won't necessarily be owned by that same group, which then creates more permissions problems for your users. A good workaround is to set the group SUID bit on the repository's db directory. This causes all newly-created log files to have the same group owner as the parent directory." -msgstr "另一个在类Unix系统下常见的问题是,当版本库在使用时,BerkeleyDB有时候创建一个新的日志文件来记录它的东西,即使这个版本库是完全由svn组拥有,这个新创建的文件不是必须被同一个组拥有,这给你的用户造成了更多地许可问题。一个好的工作区应该设置组的SUID字节到版本库的db目录,这会导致所有新创建的日志文件拥有同父目录相同的组拥有者。" +msgstr "另一个在类Unix系统下常见的问题是,当版本库在使用时,BerkeleyDB有时候创建一个新的日志文件来记录它的东西,即使这个版本库是完全由svn组拥有,这个新创建的文件不是必须被同一个组拥有,这给你的用户造成了更多地许可问题。一个好的工作区应该设置组的SUID字节到版本库的db目录,这会导致所有新创建的日志文件拥有同父目录相同的组拥有者。" #. (para) #: ../source/book.xml:14098 @@ -15034,7 +15033,7 @@ msgstr "一旦你跳过了这些障碍,你的版本库一定是可以通过各 #: ../source/book.xml:14103 #, fuzzy msgid "Fortunately, most repository administrators will never need to have such a complex configuration. Users who wish to access repositories that live on the same machine are not limited to using file:// access URLs—they can typically contact the Apache HTTP server or svnserve using localhost for the server name in their http:// or svn:// URLs. And to maintain multiple server processes for your Subversion repositories is likely to be more of a headache than necessary. We recommend you choose the server that best meets your needs and stick with it!" -msgstr "幸运的是,大多数版本库管理员不需要这样复杂的配置,用户如果希望访问本机的版本库,并不是一定要通过file://的URL—他们可以用localhost机器名联系Apache的HTTP服务器或者是svnserve,协议分别是http://svn://。为你的Subversion版本库维护多个服务器进程,版本库会变得超出需要的头痛,我们建议你选择最符合你的需要的版本库,并且坚持使用!" +msgstr "幸运的是,大多数版本库管理员不需要这样复杂的配置,用户如果希望访问本机的版本库,并不是一定要通过file://的URL—他们可以用localhost机器名联系Apache的HTTP服务器或者是svnserve,协议分别是http://svn://。为你的Subversion版本库维护多个服务器进程,版本库会变得超出需要的头痛,我们建议你选择最符合你的需要的版本库,并且坚持使用!" #. (title) #: ../source/book.xml:14117 @@ -15055,7 +15054,7 @@ msgstr "所有的SSH用户需要能够读写版本库,把所有的SSH用户放 #. (para) #: ../source/book.xml:14132 msgid "Make the repository wholly owned by that group." -msgstr "" +msgstr "让那个组拥有整个版本库。" #. (para) #: ../source/book.xml:14137 @@ -15067,13 +15066,13 @@ msgstr "组访问权处理" #: ../source/book.xml:14140 #, fuzzy msgid "Your users need to use a sane umask when accessing the repository, so: make sure that svnserve (/usr/bin/svnserve, or wherever it lives in $PATH) is actually a wrapper script which sets umask 002 and executes the real svnserve binary." -msgstr "你的用户在访问版本库时需要使用一个健全的umask,确定svnserve/usr/bin/svnserve或者是任何一个$PATH说明的位置)是一个设置了umask 002和执行真正的svnserve程序的包裹脚本,对svnlooksvnadmin使用相同的措施,或者是使用一个健全的umask运行或者是使用上面说明的包裹。" +msgstr "你的用户在访问版本库时需要使用一个健全的umask,确定svnserve/usr/bin/svnserve或者是任何一个$PATH说明的位置)是一个设置了umask 002和执行真正的svnserve程序的包裹脚本,对svnlooksvnadmin使用相同的措施,或者是使用一个健全的umask运行或者是使用上面说明的包裹。" #. (para) #: ../source/book.xml:14149 #, fuzzy msgid "Take similar measures when using svnlook and svnadmin. Either run them with a sane umask, or wrap them as described above." -msgstr "像svnservesvnversion没有子命令,只有选项。" +msgstr "像svnservesvnversion没有子命令,只有选项。" #. (title) #: ../source/book.xml:14165 @@ -15083,7 +15082,7 @@ msgstr "定制你的 Subversion 用法" #. (para) #: ../source/book.xml:14167 msgid "Version control can be a complex subject, as much art as science, and offering myriad ways of getting stuff done. Throughout this book you've read of the various Subversion command-line client subcommands and the options which modify their behavior. In this chapter, we'll look into still more ways to customize the way Subversion works for you—setting up the Subversion runtime configuration, using external helper applications, Subversion's interaction with the operating system's configured locale, and so on." -msgstr "" +msgstr "版本控制可以成为复杂的主题,和科学一样充满艺术性,为解决事情能提供了无数的方法。贯穿这本书,你已经阅读许多Subversion命令行子命令,以及可以改变运行方式的选项,在本章我们要查看一些自定义Subversion工作的方法—设置Subversion运行配置,使用外置帮助程序,Subversion与操作系统配置的地区交互等等。" #. (title) #: ../source/book.xml:14186 @@ -15116,19 +15115,19 @@ msgstr "APPDATA环境变量指向svn command-line client is executed, it creates a per-user configuration area. On Unix-like systems, this area appears as a directory named .subversion in the user's home directory. On Win32 systems, Subversion creates a folder named Subversion, typically inside the Application Data area of the user's profile directory (which, by the way, is usually a hidden directory). However, on this platform the exact location differs from system to system, and is dictated by the Windows registry. We will refer to the per-user configuration area using its Unix name, .subversion." -msgstr "svn命令行客户端第一次执行时,会创建一个用户配置区,在类Unix系统中,配置区位于用户主目录中,名为.subversion。在Win32系统,Subversion创建一个名为Subversion的目录,这个目录通常位于用户配置目录(顺便说一句,通常是一个隐藏目录)的Application Data子目录下。然而,在Win32平台上,此目录的具体位置在不同的系统上是不一样的,由Windows注册表决定。 我们以Unix下的名字.subversion来表示用户配置区。" +msgstr "svn命令行客户端第一次执行时,会创建一个用户配置区,在类Unix系统中,配置区位于用户主目录中,名为.subversion。在Win32系统,Subversion创建一个名为Subversion的目录,这个目录通常位于用户配置目录(顺便说一句,通常是一个隐藏目录)的Application Data子目录下。然而,在Win32平台上,此目录的具体位置在不同的系统上是不一样的,由Windows注册表决定。 我们以Unix下的名字.subversion来表示用户配置区。" #. (para) #: ../source/book.xml:14227 #, fuzzy msgid "In addition to the per-user configuration area, Subversion also recognizes the existence of a system-wide configuration area. This gives system administrators the ability to establish defaults for all users on a given machine. Note that the system-wide configuration area does not alone dictate mandatory policy—the settings in the per-user configuration area override those in the system-wide one, and command-line arguments supplied to the svn program have the final word on behavior. On Unix-like platforms, the system-wide configuration area is expected to be the /etc/subversion directory; on Windows machines, it looks for a Subversion directory inside the common Application Data location (again, as specified by the Windows Registry). Unlike the per-user case, the svn program does not attempt to create the system-wide configuration area." -msgstr "除了用户配置区,Subversion也提供了系统配置区,通过系统配置区,系统管理员可以为某个机器的所有用户建立缺省配置值。注意系统配置区不会规定强制性的策略—每个用户配置区都可以覆盖系统配置区中的配置项,而svn的命令行参数决定了最后的行为。在类Unix的平台上,系统配置区位于/etc/subversion目录下,在Windows平台上,系统配置区位于Application Data(再说一次,是由Windows注册表决定的)的Subversion目录中。与用户配置区不同,svn不会试图创建系统配置区。" +msgstr "除了用户配置区,Subversion也提供了系统配置区,通过系统配置区,系统管理员可以为某个机器的所有用户建立缺省配置值。注意系统配置区不会规定强制性的策略—每个用户配置区都可以覆盖系统配置区中的配置项,而svn的命令行参数决定了最后的行为。在类Unix的平台上,系统配置区位于/etc/subversion目录下,在Windows平台上,系统配置区位于Application Data(再说一次,是由Windows注册表决定的)的Subversion目录中。与用户配置区不同,svn不会试图创建系统配置区。" #. (para) #: ../source/book.xml:14244 #, fuzzy msgid "The per-user configuration area currently contains three files—two configuration files (config and servers), and a README.txt file which describes the INI format. At the time of their creation, the files contain default values for each of the supported Subversion options, mostly commented out and grouped with textual descriptions about how the values for the key affect Subversion's behavior. To change a certain behavior, you need only to load the appropriate configuration file into a text editor, and modify the desired option's value. If at any time you wish to have the default configuration settings restored, you can simply remove (or rename) your configuration directory and then run some innocuous svn command, such as svn --version. A new configuration directory with the default contents will be created." -msgstr "目前,Subversion的配置区包含三个文件—两个配置文件(configservers),和一个INI文件格式的README.txt描述文件。配置文件创建的时候,Subversion的选项都设置为默认值。配置文件中的选项都按功能划分成组,大多数选项还有详细的文字描述注释,说明这些选项的值对Subversion的主要影响。要修改选项,只需用文本编辑器打开并编辑配置文件。如果想要恢复缺省的配置,可以直接删除(或者重命名)配置目录,并且运行一些如svn --version之类的无关紧要的svn命令,一个包含缺省值的新配置目录就会创建起来。" +msgstr "目前,Subversion的配置区包含三个文件—两个配置文件(configservers),和一个INI文件格式的README.txt描述文件。配置文件创建的时候,Subversion的选项都设置为默认值。配置文件中的选项都按功能划分成组,大多数选项还有详细的文字描述注释,说明这些选项的值对Subversion的主要影响。要修改选项,只需用文本编辑器打开并编辑配置文件。如果想要恢复缺省的配置,可以直接删除(或者重命名)配置目录,并且运行一些如svn --version之类的无关紧要的svn命令,一个包含缺省值的新配置目录就会创建起来。" #. (para) #: ../source/book.xml:14260 @@ -15193,7 +15192,7 @@ msgstr "此外,虽然Windows注册表不支持注释掉这种 #: ../source/book.xml:14321 #, fuzzy msgid "The svn command-line client never attempts to write to the Windows Registry, and will not attempt to create a default configuration area there. You can create the keys you need using the REGEDIT program. Alternatively, you can create a .reg file, and then double-click on that file from the Explorer shell, which will cause the data to be merged into your registry." -msgstr "svn命令行客户端不会尝试写Windows注册表,也不会在注册表中创建默认配置区。不过可以使用REGEDIT创建所需的键。此外,还可以创建一个.reg文件,并在文件浏览器中双击这个文件,文件中的数据就会合并到注册表中。" +msgstr "svn命令行客户端不会尝试写Windows注册表,也不会在注册表中创建默认配置区。不过可以使用REGEDIT创建所需的键。此外,还可以创建一个.reg文件,并在文件浏览器中双击这个文件,文件中的数据就会合并到注册表中。" #. (title) #: ../source/book.xml:14331 @@ -15361,7 +15360,7 @@ msgstr "http-proxy-host" #. (para) #: ../source/book.xml:14443 msgid "This specifies a comma-separated list of patterns for repository hostnames that should accessed directly, without using the proxy machine. The pattern syntax is the same as is used in the Unix shell for filenames. A repository hostname matching any of these patterns will not be proxied." -msgstr "" +msgstr "这里指定了一组逗号分割的列表,其内容是无须代理服务器可以直接访问的版本库主机名模式,模式语法与Unix的shell中的文件名相同,其中任何匹配的版本库主机不会通过代理访问。" #. (literal) #: ../source/book.xml:14453 @@ -15504,7 +15503,7 @@ msgstr "store-passwords" #: ../source/book.xml:14605 #, fuzzy msgid "This instructs Subversion to cache, or not to cache, passwords that are supplied by the user in response to server authentication challenges. The default value is yes. Set this to no to disable this on-disk password caching. You can override this option for a single instance of the svn command using the command-line parameter (for those subcommands that support it). For more information, see ." -msgstr "这告诉Subversion是否缓存服务器认证要求时用户提供的密码,缺省值是yes。设置为no可以关闭在存盘的密码缓存,你可以通过svn命令行参数(那些支持这个参数的子命令)来覆盖这个设置,详细信息请见。" +msgstr "这告诉Subversion是否缓存服务器认证要求时用户提供的密码,缺省值是yes。设置为no可以关闭在存盘的密码缓存,你可以通过svn命令行参数(那些支持这个参数的子命令)来覆盖这个设置,详细信息请见。" #. (literal) #: ../source/book.xml:14619 @@ -15532,7 +15531,7 @@ msgstr "editor-cmd" #: ../source/book.xml:14640 #, fuzzy msgid "This specifies the program Subversion will use to query the user for a log message during a commit operation, such as when using svn commit without either the () or () options. This program is also used with the svn propedit command—a temporary file is populated with the current value of the property the user wishes to edit, and the edits take place right in the editor program (see ). This option's default value is empty. The order of priority for determining the editor command (where lower-numbered locations take precedence over higher-numbered locations) is:" -msgstr "Subversion在提交操作时用来询问用户日志信息的程序,例如使用svn commit而没有指定)或者)选项。这个程序也会与svn propedit一起使用—一个临时文件跳出来包含已经存在的用户希望编辑的属性,然后用户可以对这个属性进行编辑(见),这个选项的缺省值为空,检测编辑器的顺序如下:" +msgstr "Subversion在提交操作时用来询问用户日志信息的程序,例如使用svn commit而没有指定)或者)选项。这个程序也会与svn propedit一起使用—一个临时文件跳出来包含已经存在的用户希望编辑的属性,然后用户可以对这个属性进行编辑(见),这个选项的缺省值为空,检测编辑器的顺序如下:" #. (para) #: ../source/book.xml:14656 @@ -15584,7 +15583,7 @@ msgstr "diff-cmd" #: ../source/book.xml:14688 #, fuzzy msgid "This specifies the absolute path of a differencing program, used when Subversion generates diff output (such as when using the svn diff command). By default Subversion uses an internal differencing library—setting this option will cause it to perform this task using an external program. See for more details on using such programs." -msgstr "这个命令是比较程序的绝对路径,当Subversion生成了diff输出时(例如当使用svn diff命令)就会使用,缺省Subversion会使用一个内置的比较库—设置这个参数会强制它使用外部程序执行这个任务,此类程序的更多信息见。" +msgstr "这个命令是比较程序的绝对路径,当Subversion生成了diff输出时(例如当使用svn diff命令)就会使用,缺省Subversion会使用一个内置的比较库—设置这个参数会强制它使用外部程序执行这个任务,此类程序的更多信息见。" #. (literal) #: ../source/book.xml:14701 @@ -15611,7 +15610,7 @@ msgstr "如果diff3-cmd选项设置的程 #: ../source/book.xml:14727 #, fuzzy msgid "The tunnels section allows you to define new tunnel schemes for use with svnserve and svn:// client connections. For more details, see ." -msgstr "tunnels小节允许你定义一个svnservesvn://客户端连接使用的管道模式,更多细节见。" +msgstr "tunnels小节允许你定义一个svnservesvn://客户端连接使用的管道模式,更多细节见。" #. (para) #: ../source/book.xml:14733 @@ -15633,13 +15632,13 @@ msgstr "global-ignores" #: ../source/book.xml:14741 #, fuzzy msgid "When running the svn status command, Subversion lists unversioned files and directories along with the versioned ones, annotating them with a ? character (see ). Sometimes, it can be annoying to see uninteresting, unversioned items—for example, object files that result from a program's compilation—in this display. The global-ignores option is a list of whitespace-delimited globs which describe the names of files and directories that Subversion should not display unless they are versioned. The default value is *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store." -msgstr "当运行svn status命令时,Subversion会和版本化的文件一样列出未版本化的文件和目录,并使用?字符(见see )标记,有时候察看无关的未版本化文件会很讨厌—比如程序编译产生的对象文件—的显示出来。global-ignores选项是一个空格分隔的列表,用来描述Subversion在它们版本化之前不想显示的文件和目录,缺省值是*.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store。" +msgstr "当运行svn status命令时,Subversion会和版本化的文件一样列出未版本化的文件和目录,并使用?字符(见see )标记,有时候察看无关的未版本化文件会很讨厌—比如程序编译产生的对象文件—的显示出来。global-ignores选项是一个空格分隔的列表,用来描述Subversion在它们版本化之前不想显示的文件和目录,缺省值是*.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store。" #. (para) #: ../source/book.xml:14754 #, fuzzy msgid "As well as svn status, the svn add and svn import commands also ignore files that match the list when they are scanning a directory. You can override this behaviour for a single instance of any of these commands by explicitly specifying the file name, or by using the command-line flag." -msgstr "就像svn statussvn addsvn import命令也会忽略匹配这个列表的文件,你可以用单个的命令行参数来覆盖这个选项,关于更加细致的控制忽略的项目,见。" +msgstr "就像svn statussvn addsvn import命令也会忽略匹配这个列表的文件,你可以用单个的命令行参数来覆盖这个选项,关于更加细致的控制忽略的项目,见。" #. (para) #: ../source/book.xml:14761 @@ -15676,13 +15675,13 @@ msgstr "use-commit-times" #: ../source/book.xml:14799 #, fuzzy msgid "Normally your working copy files have timestamps that reflect the last time they were touched by any process, whether that be your own editor or by some svn subcommand. This is generally convenient for people developing software, because build systems often look at timestamps as a way of deciding which files need to be recompiled." -msgstr "通常你的工作拷贝文件会有最后一次被进程访问的时间戳,不管是你自己的编辑器还是用svn子命令。这通常对人们开发软件提供了便利,因为编译系统通常会通过查看时间戳来决定那些文件需要重新编译。" +msgstr "通常你的工作拷贝文件会有最后一次被进程访问的时间戳,不管是你自己的编辑器还是用svn子命令。这通常对人们开发软件提供了便利,因为编译系统通常会通过查看时间戳来决定那些文件需要重新编译。" #. (para) #: ../source/book.xml:14806 #, fuzzy msgid "In other situations, however, it's sometimes nice for the working copy files to have timestamps that reflect the last time they were changed in the repository. The svn export command always places these last-commit timestamps on trees that it produces. By setting this config variable to yes, the svn checkout, svn update, svn switch, and svn revert commands will also set last-commit timestamps on files that they touch." -msgstr "在其他情形,有时候如果工作拷贝的文件时间戳反映了上一次在版本库中更改的时间会非常好,svn export命令会一直放置这些上次提交的时间戳放到它创建的目录树。通过设置这个config参数为yessvn checkoutsvn updatesvn switchsvn revert命令也会为它们操作的文件设置上次提交的时间戳。" +msgstr "在其他情形,有时候如果工作拷贝的文件时间戳反映了上一次在版本库中更改的时间会非常好,svn export命令会一直放置这些上次提交的时间戳放到它创建的目录树。通过设置这个config参数为yessvn checkoutsvn updatesvn switchsvn revert命令也会为它们操作的文件设置上次提交的时间戳。" #. (para) #: ../source/book.xml:14823 @@ -15714,7 +15713,7 @@ msgstr "许多现代操作系统都有一个当前地区的概念 #: ../source/book.xml:14870 #, fuzzy msgid "On most Unix-like systems, you can check the values of the locale-related runtime configuration options by running the locale command:" -msgstr "在类Unix的系统,你可以运行locale命令来检查本地关联的运行配置的选项值:" +msgstr "在类Unix的系统,你可以运行locale命令来检查本地关联的运行配置的选项值:" #. (screen) #: ../source/book.xml:14873 @@ -15746,7 +15745,7 @@ msgstr "" #: ../source/book.xml:14884 #, fuzzy msgid "The output is a list of locale-related environment variables and their current values. In this example, the variables are all set to the default C locale, but users can set these variables to specific country/language code combinations. For example, if one were to set the LC_TIME variable to fr_CA, then programs would know to present time and date information formatted according a French-speaking Canadian's expectations. And if one were to set the LC_MESSAGES variable to zh_TW, then programs would know to present human-readable messages in Traditional Chinese. Setting the LC_ALL variable has the effect of changing every locale variable to the same value. The value of LANG is used as a default value for any locale variable that is unset. To see the list of available locales on a Unix system, run the command locale -a." -msgstr "输出是一个本地相关的环境变量和它们的值,在这个例子里,所有的变量设置为缺省的C地区,但是用户可以设置这些变量为特定的国家/语言代码组合。举个例子,如果有人设置LC_TIME变量为fr_CA,然后程序会知道使用讲法语的加拿大期望的格式来显示时间和日期信息。如果一个人会设置LC_MESSAGES变量为zh_TW,程序会知道使用繁体中文显示可读信息。如果设置LC_ALL的效果同分别设置所有的位置变量为同一个值有相同的效果。LANG用来作为没有设置地区变量的缺省值,为了查看Unix系统所有的地区列表,运行locale -a命令。" +msgstr "输出是一个本地相关的环境变量和它们的值,在这个例子里,所有的变量设置为缺省的C地区,但是用户可以设置这些变量为特定的国家/语言代码组合。举个例子,如果有人设置LC_TIME变量为fr_CA,然后程序会知道使用讲法语的加拿大期望的格式来显示时间和日期信息。如果一个人会设置LC_MESSAGES变量为zh_TW,程序会知道使用繁体中文显示可读信息。如果设置LC_ALL的效果同分别设置所有的位置变量为同一个值有相同的效果。LANG用来作为没有设置地区变量的缺省值,为了查看Unix系统所有的地区列表,运行locale -a命令。" #. (para) #: ../source/book.xml:14902 @@ -15762,7 +15761,7 @@ msgstr "Subversion 对地区的支持" #: ../source/book.xml:14914 #, fuzzy msgid "The Subversion client, svn, honors the current locale configuration in two ways. First, it notices the value of the LC_MESSAGES variable and attempts to print all messages in the specified language. For example:" -msgstr "Subversion客户端,svn通过两种方式支持当前的地区配置。首先,它会注意LC_MESSAGES的值,然后尝试使用特定的语言打印所有的信息,例如:" +msgstr "Subversion客户端,svn通过两种方式支持当前的地区配置。首先,它会注意LC_MESSAGES的值,然后尝试使用特定的语言打印所有的信息,例如:" #. (screen) #: ../source/book.xml:14919 @@ -15792,7 +15791,7 @@ msgstr "这个行为在Unix和Windows上同样工作,注意,尽管有时你 #: ../source/book.xml:14948 #, fuzzy msgid "The second way in which the locale is honored involves how svn interprets your input. The repository stores all paths, filenames, and log messages in Unicode, encoded as UTF-8. In that sense, the repository is internationalized—that is, the repository is ready to accept input in any human language. This means, however, that the Subversion client is responsible for sending only UTF-8 filenames and log messages into the repository. In order to do this, it must convert the data from the native locale into UTF-8." -msgstr "第二种支持地区设置的方式包括svn怎样解释你的输入,版本库使用UTF-8保存了所有的路径,文件名和日志信息。在这种情况下,版本库是国际化的—也就是版本库准备接受任何人类的语言。这意味着,无论如何Subversion客户端要负责发送UTF-8的文件名和日志信息到版本库,为此,必须将数据从本地位置转化为UTF-8。" +msgstr "第二种支持地区设置的方式包括svn怎样解释你的输入,版本库使用UTF-8保存了所有的路径,文件名和日志信息。在这种情况下,版本库是国际化的—也就是版本库准备接受任何人类的语言。这意味着,无论如何Subversion客户端要负责发送UTF-8的文件名和日志信息到版本库,为此,必须将数据从本地位置转化为UTF-8。" #. (para) #: ../source/book.xml:14958 @@ -15835,7 +15834,7 @@ msgstr "" #: ../source/book.xml:14985 #, fuzzy msgid "Errors like this typically occur when the Subversion client has received a UTF-8 string from the repository, but not all of the characters in that string can be represented using the encoding of the current locale. For example, if your locale is en_US but a collaborator has committed a Japanese filename, you're likely to see this error when you receive the file during an svn update." -msgstr "这个错误信息通常会发生在Subversion客户端从版本库接收到一个UTF-8串,但字符不能转化为当前的地区文字时,举个例子,如果你的地区设置是en_US,但是一个写作者使用日本文件名提交,你会在svn update接受文件时会看到这个错误。" +msgstr "这个错误信息通常会发生在Subversion客户端从版本库接收到一个UTF-8串,但字符不能转化为当前的地区文字时,举个例子,如果你的地区设置是en_US,但是一个写作者使用日本文件名提交,你会在svn update接受文件时会看到这个错误。" #. (para) #: ../source/book.xml:14993 @@ -15861,7 +15860,7 @@ msgstr "Subversion的开发者很好,但最好的也会发生错误。" #: ../source/book.xml:15018 #, fuzzy msgid "The interface between Subversion and external diff and merge tools harkens back to a time when Subversion's only contextual differencing capabilities were built around invocations of the GNU diffutils toolchain, specifically the diff and diff3 utilities. To get the kind of behavior Subversion needed, it called these utilities with more than a handful of options and parameters, most of which were quite specific to the utilities. Some time later, Subversion grew its own internal differencing library, and as a failover mechanism, the and options were added to the Subversion command-line client so users could more easily indicate that they preferred to use the GNU diff and diff3 utilities instead of the newfangled internal diff library. If those options were used, Subversion would simply ignore the internal diff library, and fall back to running those external programs, lengthy argument lists and all. And that's where things remain today." -msgstr "Subversion和外置比较和合并工具的接口可以追溯到很久以前,当时Subversion的唯一文本比较能力是建立在GNU的工具链之上,特别是diffdiff3工具,为了得到Subversion需要的方式,它使用非常复杂的选项和参数调用这些工具,而这些选项和参数都是工具特定的,渐渐的,Subversion发展了自己的比较区别库作为备份机制。选项是添加到Subversion的命令行客户端,所以用户可以更加容易的指明他们最喜欢的使用的GNU diff和diff3工具,而不是新奇的内置比较库,如果使用了这些选项,Subversion会忽略内置的比较库,转而使用外置程序,使用冗长的参数列表,目前还是这种情况。" +msgstr "Subversion和外置比较和合并工具的接口可以追溯到很久以前,当时Subversion的唯一文本比较能力是建立在GNU的工具链之上,特别是diffdiff3工具,为了得到Subversion需要的方式,它使用非常复杂的选项和参数调用这些工具,而这些选项和参数都是工具特定的,渐渐的,Subversion发展了自己的比较区别库作为备份机制。选项是添加到Subversion的命令行客户端,所以用户可以更加容易的指明他们最喜欢的使用的GNU diff和diff3工具,而不是新奇的内置比较库,如果使用了这些选项,Subversion会忽略内置的比较库,转而使用外置程序,使用冗长的参数列表,目前还是这种情况。" #. (para) #: ../source/book.xml:15038 @@ -16311,7 +16310,7 @@ msgstr "模块化的另一个好处是我们有能力去构造一个全新的, #: ../source/book.xml:15410 #, fuzzy msgid "The client itself also highlights the benefits of modularity in the Subversion design. Subversion's libsvn_client library is a one-stop shop for most of the functionality necessary for designing a working Subversion client (see ). So while the Subversion distribution provides only the svn command-line client program, there are several third-party programs which provide various forms of graphical client UI. These GUIs use the same APIs that the stock command-line client does. This type of modularity has played a large role in the proliferation of available Subversion clients and IDE integrations and, by extension, to the tremendous adoption rate of Subversion itself." -msgstr "客户端本身也得益于Subversion设计的模块化,Subversion的libsvn_client库提供了设计一个Subversion工作客户端(见)的绝大多数功能。所以尽管Subversion的发布版只有svn命令行客户端程序,依然有许多第三方的程序提供了各种形式的图形化客户端UI。这些GUI使用的API与命令行客户端完全相同。模块化类型的API的促使了大量Subversion客户端和IDE集成插件使用Subversion本身。" +msgstr "客户端本身也得益于Subversion设计的模块化,Subversion的libsvn_client库提供了设计一个Subversion工作客户端(见)的绝大多数功能。所以尽管Subversion的发布版只有svn命令行客户端程序,依然有许多第三方的程序提供了各种形式的图形化客户端UI。这些GUI使用的API与命令行客户端完全相同。模块化类型的API的促使了大量Subversion客户端和IDE集成插件使用Subversion本身。" #. (title) #: ../source/book.xml:15425 @@ -16465,13 +16464,13 @@ msgstr "版本库访问层" #: ../source/book.xml:15645 #, fuzzy msgid "If the Subversion Repository Layer is at the other end of the line, the Repository Access (RA) Layer is the line itself. Charged with marshaling data between the client libraries and the repository, this layer includes the libsvn_ra module loader library, the RA modules themselves (which currently includes libsvn_ra_dav, libsvn_ra_local, libsvn_ra_serf, and libsvn_ra_svn), and any additional libraries needed by one or more of those RA modules (such as the mod_dav_svn Apache module or libsvn_ra_svn's server, svnserve)." -msgstr "如果说Subversion版本库层是在这条线的另一端,那版本库访问层就是这条线。负责在客户端库和版本库之间编码数据,这一层包括libsvn_ra模块加载模块,RA模块本身(现在包括了libsvn_ra_dav、libsvn_ra_local、libsvn_ra_serf和libsvn_ra_svn),和所有一个或多个RA模块需要的附加库,例如与Apache模块mod_dav_svn通讯的libsvn_ra_dav或者是libsvn_ra_svn的服务器,svnserve。" +msgstr "如果说Subversion版本库层是在这条线的另一端,那版本库访问层就是这条线。负责在客户端库和版本库之间编码数据,这一层包括libsvn_ra模块加载模块,RA模块本身(现在包括了libsvn_ra_dav、libsvn_ra_local、libsvn_ra_serf和libsvn_ra_svn),和所有一个或多个RA模块需要的附加库,例如与Apache模块mod_dav_svn通讯的libsvn_ra_dav或者是libsvn_ra_svn的服务器,svnserve。" #. (para) #: ../source/book.xml:15655 #, fuzzy msgid "Since Subversion uses URLs to identify its repository resources, the protocol portion of the URL scheme (usually file://, http://, https://, svn://, or svn+ssh://) is used to determine which RA module will handle the communications. Each module registers a list of the protocols it knows how to speak so that the RA loader can, at runtime, determine which module to use for the task at hand. You can determine which RA modules are available to the Subversion command-line client, and what protocols they claim to support, by running svn --version:" -msgstr "因为Subversion使用URL来识别版本库资源,URL模式的协议部分(通常是file:http:https:svn:)用来监测那个RA模块用来处理通讯。每个模块注册一组它们知道如何说话的协议,所以RA加载器可以在运行中监测在手边的任务中使用哪个模块。通过运行svn --version,你可以监测Subversion命令行客户端所支持的RA模块和它们声明支持的协议:" +msgstr "因为Subversion使用URL来识别版本库资源,URL模式的协议部分(通常是file:http:https:svn:)用来监测那个RA模块用来处理通讯。每个模块注册一组它们知道如何说话的协议,所以RA加载器可以在运行中监测在手边的任务中使用哪个模块。通过运行svn --version,你可以监测Subversion命令行客户端所支持的RA模块和它们声明支持的协议:" #. (screen) #: ../source/book.xml:15667 @@ -16523,7 +16522,7 @@ msgstr "" #: ../source/book.xml:15688 #, fuzzy msgid "The public API exported by the RA Layer contains functionality necessary for sending and receiving versioned data to and from the repository. And each of the available RA plugins is able to perform that task using a specific protocol—libsvn_ra_dav speaks HTTP/WebDAV (optionally using SSL encryption) with an Apache HTTP Server that is running the mod_dav_svn Subversion server module; libsvn_ra_svn speaks a custom network protocol with the svnserve program; and so on." -msgstr "RA层导出的API包含了发送和接收版本化数据的必要功能,并且每一个存在的RA插件可以使用特定协议执行任务—libsvn_ra_dav同配置了mod_dav_svn模块的Apache HTTP服务器使用HTTP/WebDAV(可选SSL加密)通讯,libsvn_ra_svn同svnserve使用自定义网络协议通讯。" +msgstr "RA层导出的API包含了发送和接收版本化数据的必要功能,并且每一个存在的RA插件可以使用特定协议执行任务—libsvn_ra_dav同配置了mod_dav_svn模块的Apache HTTP服务器使用HTTP/WebDAV(可选SSL加密)通讯,libsvn_ra_svn同svnserve使用自定义网络协议通讯。" #. (para) #: ../source/book.xml:15697 @@ -16775,17 +16774,17 @@ msgstr "非常不幸,Subversion的语言绑定缺乏对核心Subversion模块 #. (para) #: ../source/book.xml:16101 msgid "Subversion also has language bindings for Java. The JavaJL bindings (located in subversion/bindings/java in the Subversion source tree) aren't SWIG-based, but are instead a mixture of javah and hand-coded JNI. JavaHL most covers Subversion client-side APIs, and is specifically targeted at implementors of Java-based Subversion clients and IDE integrations." -msgstr "" +msgstr "Subversion也有Java的语言绑定,JavaJL绑定(位于Subversion源目录树的subversion/bindings/java)不是基于SWIG的,而是javah和手写JNI的混合,JavaHL几乎覆盖Subversion客户端的API,目标是作为Java基础的Subversion客户端和集成IDE的实现。" #. (para) #: ../source/book.xml:16109 msgid "Subversion's language bindings tend to lack the level of developer attention given to the core Subversion modules, but can generally be trusted as production-ready. A number of scripts and applications, alternative Subversion GUI clients and other third-party tools are successfully using Subversion's language bindings today to accomplish their Subversion integrations." -msgstr "" +msgstr "Subversion的语言绑定缺乏Subversion核心模块的关注,但是通常可以作为一个产品信赖。大量脚本、应用、Subversion的GUI客户端和其他第三方工具现在已经成功地运用了Subversion语言绑定来完成Subversion的集成。" #. (para) #: ../source/book.xml:16116 msgid "It's worth noting here that there are other options for interfacing with Subversion using other languages: alternative bindings for Subversion which aren't provided by the Subversion development community at all. You can find links to these alternative bindings on the Subversion project's links page (at http://subversion.tigris.org/links.html), but there are a couple of popular ones we feel are especially noteworthy. First, Barry Scott's PySVN bindings (http://pysvn.tigris.org/) are a popular option for binding with Python. PySVN boasts of a more Pythonic interface than the more C-like APIs provided by Subversion's own Python bindings. For folks looking for a pure Java implementation of Subversion, check out SVNKit (http://svnkit.com/), which is Subversion re-written from the ground up in Java. You should exercise caution here, though—because SVNKit doesn't use the core Subversion libraries, it's behavior is not guaranteed to match that of Subversion itself." -msgstr "" +msgstr "这里使用其它语言的方法来与Subversion交互没有任何意义:Subversion开发社区没有提供其他的绑定,你可以在Subversion项目链接页里(http://subversion.tigris.org/links.html)找到其他绑定的链接,但是有一些流行的绑定我觉得应该特别留意。首先是Python的流行绑定,Barry Scott的PySVN(http://pysvn.tigris.org/)。PySVN鼓吹它们提供了更多Python样式的接口,而不像Subversion自己的Python绑定的C样式接口。对于希望寻求Subversion纯Java实现的人,可以看看SVNKit(http://svnkit.com/),也就是从头使用Java编写的Subversion。你必须要小心,SVNKit没有采用Subversion的核心库,其行为方式没有确保与Subversion匹配。" #. (title) #: ../source/book.xml:16136 @@ -17169,7 +17168,7 @@ msgstr "同样的C程序需要处理APR内存池系统,但是Python自己处 #: ../source/book.xml:16358 #, fuzzy msgid "The Subversion Python bindings can be used for working copy operations, too. In the previous section of this chapter, we mentioned the libsvn_client interface, and how it exists for the sole purpose of simplifying the process of writing a Subversion client. is a brief example of how that library can be accessed via the SWIG Python bindings to recreate a scaled-down version of the svn status command." -msgstr "Subversion的Python绑定也可以用来进行工作拷贝的操作,在本章前面的小节中,我们提到过libsvn_client接口,它存在的目的就是简化编写Subversion客户端的难度,是一个例子,讲的是如何使用SWIG绑定创建一个扩展版本的svn status命令。" +msgstr "Subversion的Python绑定也可以用来进行工作拷贝的操作,在本章前面的小节中,我们提到过libsvn_client接口,它存在的目的就是简化编写Subversion客户端的难度,是一个例子,讲的是如何使用SWIG绑定创建一个扩展版本的svn status命令。" #. (title) #: ../source/book.xml:16368 @@ -17365,13 +17364,13 @@ msgstr "Subversion 完全参考" #: ../source/book.xml:16483 #, fuzzy msgid "This chapter is intended to be a complete reference to using Subversion. This includes the command line client (svn) and all its subcommands, as well as the repository administration programs (svnadmin and svnlook) and their respective subcommands." -msgstr "本章是使用Subversion的一个完全手册,包括了命令行客户端(svn)和它的所有子命令,也有版本库管理程序(svnadminsvnlook)和它们各自的子命令。" +msgstr "本章是使用Subversion的一个完全手册,包括了命令行客户端(svn)和它的所有子命令,也有版本库管理程序(svnadminsvnlook)和它们各自的子命令。" #. (title) #: ../source/book.xml:16494 #, fuzzy msgid "The Subversion Command Line Client: svn" -msgstr "Subversion 命令行客户端:svn" +msgstr "Subversion 命令行客户端:svn" #. (para) #: ../source/book.xml:16498 @@ -17383,7 +17382,7 @@ msgstr "是的,使用选项不需要子命令,几 #: ../source/book.xml:16496 #, fuzzy msgid "To use the command line client, you type svn, the subcommand you wish to use , and any options or targets that you wish to operate on—there is no specific order that the subcommand and the options must appear in. For example, all of the following are valid ways to use svn status:" -msgstr "为了使用命令行客户端,只需要输入svn和它的子命令以及相关的选项或操作的对象—输入的子命令和选项没有特定的顺序,下面使用svn status的方式都是合法的:" +msgstr "为了使用命令行客户端,只需要输入svn和它的子命令以及相关的选项或操作的对象—输入的子命令和选项没有特定的顺序,下面使用svn status的方式都是合法的:" #. (screen) #: ../source/book.xml:16505 @@ -17408,7 +17407,7 @@ msgstr "你可以在发现更多使用客户端命 #: ../source/book.xml:16516 #, fuzzy msgid "svn Options" -msgstr "svn 选项" +msgstr "svn 选项" #. (para) #: ../source/book.xml:16518 @@ -17436,7 +17435,7 @@ msgstr " () ARGchange (aka a revision), this option is syntactic sugar for -r ARG-1:ARG." -msgstr "" +msgstr "作为引用特定修改(也叫做修订版本)的方法,这个选项是-r ARG-1:ARG语法上的甜头。" #. (option) #: ../source/book.xml:16547 ../source/book.xml:22670 @@ -17468,7 +17467,7 @@ msgstr "CMD" #: ../source/book.xml:16563 #, fuzzy msgid "Specifies an external program to use to show differences between files. When svn diff is invoked without this option, it uses Subversion's internal diff engine, which provides unified diffs by default. If you want to use an external diff program, use . You can pass options to the diff program with the option (more on that later in this section)." -msgstr "指定用来表示文件区别的外部程序,当svn diff调用时,会使用Subversion的内置区别引擎,默认会提供统一区别输出,如果你希望使用一个外置区别程序,使用。你可以通过(本小节后面有更多介绍)把选项传递到区别程序。" +msgstr "指定用来表示文件区别的外部程序,当svn diff调用时,会使用Subversion的内置区别引擎,默认会提供统一区别输出,如果你希望使用一个外置区别程序,使用。你可以通过(本小节后面有更多介绍)把选项传递到区别程序。" #. (option) #: ../source/book.xml:16577 @@ -17525,7 +17524,7 @@ msgstr " () ARGSsvn diff or svn merge commands, with the option. If you wish to pass multiple arguments, you must enclose all of them in quotes (for example, svn diff --diff-cmd /usr/bin/diff -x \"-b -E\")." -msgstr "指定一个或多个Subversion传递给提供文件区别的外部区别程序的参数,如果你要传递多个参数,你一定能够要用引号(例如,svn diff --diff-cmd /usr/bin/diff -x \"-b -E\")括起所有的参数。这个选项只有在使用选项时使用。" +msgstr "指定一个或多个Subversion传递给提供文件区别的外部区别程序的参数,如果你要传递多个参数,你一定能够要用引号(例如,svn diff --diff-cmd /usr/bin/diff -x \"-b -E\")括起所有的参数。这个选项只有在使用选项时使用。" #. (term) #: ../source/book.xml:16636 @@ -17535,7 +17534,7 @@ msgstr " () FILENAMEsvn commit uses the content as a commit log, whereas svn propset uses it as a property value." -msgstr "" +msgstr "为特定子命令使用命名文件的的内容,尽管不同的子命令对这些内容做不同的事情。例如,svn commit使用内容作为提交日志,而svn propset使用它作为属性值。" #. (option) #: ../source/book.xml:16650 @@ -17680,7 +17679,7 @@ msgstr "--no-diff-deleted" #: ../source/book.xml:16781 #, fuzzy msgid "Prevents Subversion from printing differences for deleted files. The default behavior when you remove a file is for svn diff to print the same differences that you would see if you had left the file but removed all the content." -msgstr "防止Subversion打印删除文件的区别信息,缺省的行为方式是当你删除了一个文件后运行svn diff打印的区别与删除文件所有的内容得到的结果一样。" +msgstr "防止Subversion打印删除文件的区别信息,缺省的行为方式是当你删除了一个文件后运行svn diff打印的区别与删除文件所有的内容得到的结果一样。" #. (option) #: ../source/book.xml:16790 @@ -17793,7 +17792,7 @@ msgstr "目的路径[PATH...]" #: ../source/book.xml:16886 #, fuzzy msgid "Used with the svn switch subcommand, changes the location of the repository that your working copy references. This is useful if the location of your repository changes and you have an existing working copy that you'd like to continue to use. See svn switch for an example." -msgstr "svn switch子命令中使用,用来修改你的工作拷贝所引用的版本库位置。当版本库的位置修改了,而你有一个工作拷贝,希望继续使用时非常有用。见svn switch的例子。" +msgstr "svn switch子命令中使用,用来修改你的工作拷贝所引用的版本库位置。当版本库的位置修改了,而你有一个工作拷贝,希望继续使用时非常有用。见svn switch的例子。" #. (term) #: ../source/book.xml:16896 @@ -17849,7 +17848,7 @@ msgstr " ()" #: ../source/book.xml:16933 #, fuzzy msgid "Causes the client to display information about which files in your working copy are out-of-date. This doesn't actually update any of your files—it just shows you which files will be updated if you run svn update." -msgstr "导致客户端显示本地拷贝哪些文件已经过期,这不会实际更新你的任何文件—只是显示了如果你运行svn update时更新的文件。" +msgstr "导致客户端显示本地拷贝哪些文件已经过期,这不会实际更新你的任何文件—只是显示了如果你运行svn update时更新的文件。" #. (option) #: ../source/book.xml:16943 @@ -17936,12 +17935,12 @@ msgstr "使用XML格式打印输出。" #: ../source/book.xml:17025 #, fuzzy msgid "svn Subcommands" -msgstr "svn 子命令" +msgstr "svn 子命令" #. (para) #: ../source/book.xml:17027 ../source/book.xml:22734 msgid "Here are the various subcommands:" -msgstr "" +msgstr "下面是一些子命令:" #. (secondary) #: ../source/book.xml:17031 ../source/book.xml:17134 ../source/book.xml:17238 @@ -18045,7 +18044,7 @@ msgstr "描述" #: ../source/book.xml:17048 #, fuzzy msgid "Schedule files, directories, or symbolic links in your working copy for addition to the repository. They will be uploaded and added to the repository on your next commit. If you add something and change your mind before committing, you can unschedule the addition using svn revert." -msgstr "添加文件、目录或符号链到你的工作拷贝并且预定添加到版本库。它们会在下次提交上传并添加到版本库,如果你在提交之前改变了主意,你可以使用svn revert取消预定。" +msgstr "添加文件、目录或符号链到你的工作拷贝并且预定添加到版本库。它们会在下次提交上传并添加到版本库,如果你在提交之前改变了主意,你可以使用svn revert取消预定。" #. (title) #: ../source/book.xml:17058 ../source/book.xml:17159 ../source/book.xml:17262 @@ -18138,7 +18137,7 @@ msgstr "选项" #. (screen) #: ../source/book.xml:17078 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "--targets FILENAME\n" @@ -18155,7 +18154,6 @@ msgstr "" "--non-recursive (-N)\n" "--quiet (-q)\n" "--config-dir DIR\n" -"--no-ignore\n" "--auto-props\n" "--no-auto-props\n" "--force\n" @@ -18204,7 +18202,7 @@ msgstr "" #: ../source/book.xml:17098 #, fuzzy msgid "When adding a directory, the default behavior of svn add is to recurse:" -msgstr "当添加一个目录,svn add缺省的行为方式是递归的:" +msgstr "当添加一个目录,svn add缺省的行为方式是递归的:" #. (screen) #: ../source/book.xml:17100 @@ -18247,7 +18245,7 @@ msgstr "" #: ../source/book.xml:17114 #, fuzzy msgid "Normally, the command svn add * will skip over any directories that are already under version control. Sometimes, however, you may want to add every unversioned object in your working copy, including those hiding deeper down. Passing the option makes svn add recurse into versioned directories:" -msgstr "通常情况下,命令svn add *会忽略所有已经在版本控制之下的目录,有时候,你会希望添加所有工作拷贝的未版本化文件,包括那些隐藏在深处的文件,可以使用svn add递归到版本化的目录下:" +msgstr "通常情况下,命令svn add *会忽略所有已经在版本控制之下的目录,有时候,你会希望添加所有工作拷贝的未版本化文件,包括那些隐藏在深处的文件,可以使用svn add递归到版本化的目录下:" #. (screen) #: ../source/book.xml:17122 @@ -18315,7 +18313,7 @@ msgstr "是" #. (screen) #: ../source/book.xml:17179 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "--revision (-r) ARG\n" @@ -18331,17 +18329,16 @@ msgid "" "--config-dir ARG\n" msgstr "" "\n" -"--revision (-r) ARG\n" +"--revision (-r) REV\n" "--verbose (-v)\n" +"--recursive (-R)\n" "--incremental\n" "--xml\n" -"--extensions (-x) ARG\n" -"--force\n" -"--username ARG\n" -"--password ARG\n" +"--username USER\n" +"--password PASS\n" "--no-auth-cache\n" "--non-interactive\n" -"--config-dir ARG\n" +"--config-dir DIR\n" #. (para) #: ../source/book.xml:17219 @@ -18366,7 +18363,7 @@ msgstr "" #. (para) #: ../source/book.xml:17227 msgid "Even if svn blame says that Harry last modified readme.txt in revision 5, you'll have to examine exactly what the revision changed to be sure that Harry changed the context of the line—he may have just adjusted the whitespace." -msgstr "" +msgstr "即使svn blame说明Harry最后在修订版本5被修改,你也需要验证Harry在修订版本修改行的上下文—也许他只是调整了空格。" #. (tertiary) #: ../source/book.xml:17239 ../source/book.xml:21855 @@ -18388,7 +18385,7 @@ msgstr "svn cat TARGET[@REV]..." #: ../source/book.xml:17256 #, fuzzy msgid "Output the contents of the specified files or URLs. For listing the contents of directories, see svn list." -msgstr "输出特定文件或URL的内容。列出目录的内容可以使用svn list。" +msgstr "输出特定文件或URL的内容。列出目录的内容可以使用svn list。" #. (screen) #: ../source/book.xml:17282 @@ -18689,7 +18686,7 @@ msgstr "递归清理工作拷贝,删除未完成的工作拷贝锁定,并恢 #: ../source/book.xml:17476 #, fuzzy msgid "If, for some reason, an svn update fails due to a problem running an external diff program (e.g. user input or network failure), pass the to allow cleanup to complete any merging with your external diff program. You can also specify any configuration directory with the option, but you should need these options extremely infrequently." -msgstr "如果,因为一些原因,运行外置的区别程序(例如,用户输入或是网络错误)有时候会导致一个svn update失败,使用选项可以完全清除你的外置区别程序所作的合并,你也可以使用指定任何配置目录,但是你应该不会经常使用这些选项。" +msgstr "如果,因为一些原因,运行外置的区别程序(例如,用户输入或是网络错误)有时候会导致一个svn update失败,使用选项可以完全清除你的外置区别程序所作的合并,你也可以使用指定任何配置目录,但是你应该不会经常使用这些选项。" #. (para) #: ../source/book.xml:17495 ../source/book.xml:19143 ../source/book.xml:19886 @@ -18713,7 +18710,7 @@ msgstr "" #: ../source/book.xml:17516 #, fuzzy msgid "Well, there's not much to the examples here as svn cleanup generates no output. If you pass no PATH, . is used." -msgstr "svn cleanup没有输出,没有太多的例子,如果你没有传递PATH,会使用.。" +msgstr "svn cleanup没有输出,没有太多的例子,如果你没有传递PATH,会使用.。" #. (screen) #: ../source/book.xml:17520 @@ -18749,12 +18746,13 @@ msgstr "svn commit [PATH...]" #: ../source/book.xml:17547 #, fuzzy msgid "Send changes from your working copy to the repository. If you do not supply a log message with your commit by using either the or option, svn will launch your editor for you to compose a commit message. See the editor-cmd section in ." -msgstr "将修改从工作拷贝发送到版本库。如果你没有使用提供一个提交日志信息,svn会启动你的编辑器来编写一个提交信息,见editor-cmd小节。" +msgstr "将修改从工作拷贝发送到版本库。如果你没有使用提供一个提交日志信息,svn会启动你的编辑器来编写一个提交信息,见editor-cmd小节。" #. (para) #: ../source/book.xml:17554 +#, fuzzy msgid "svn commit will send any lock tokens that it finds and will release locks on all PATHS committed (recursively), unless is passed." -msgstr "" +msgstr "svn commit will send found lock tokens and release locks on all PATHS committed (recursively) unless is passed." #. (para) #: ../source/book.xml:17559 @@ -19103,7 +19101,7 @@ msgstr "" #: ../source/book.xml:17792 #, fuzzy msgid "This is the easiest way to tag a revision in your repository—just svn copy that revision (usually HEAD) into your tags directory." -msgstr "这是在版本库里作标签最简单的方法—svn copy那个修订版本(通常是HEAD)到你的tags目录。" +msgstr "这是在版本库里作标签最简单的方法—svn copy那个修订版本(通常是HEAD)到你的tags目录。" #. (screen) #: ../source/book.xml:17797 @@ -19225,7 +19223,7 @@ msgstr "" #: ../source/book.xml:17887 #, fuzzy msgid "Using svn to delete a file from your working copy deletes your local copy of the file, but merely schedules it to be deleted from the repository. When you commit, the file is deleted in the repository." -msgstr "使用svn从工作拷贝删除文件只是预定要删除,当你提交,文件才会从版本库删除。" +msgstr "使用svn从工作拷贝删除文件只是预定要删除,当你提交,文件才会从版本库删除。" #. (screen) #: ../source/book.xml:17892 @@ -19308,15 +19306,15 @@ msgstr "比较两条路径的区别。" #. (programlisting) #: ../source/book.xml:17935 -#, no-wrap +#, fuzzy, no-wrap msgid "diff [-c M | -r N[:M]] [TARGET[@REV]...]" -msgstr "diff [-c M | -r N[:M]] [TARGET[@REV]...]" +msgstr "diff [-r N[:M]] [TARGET[@REV]...]" #. (programlisting) #: ../source/book.xml:17936 -#, no-wrap +#, fuzzy, no-wrap msgid "diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] [PATH...]" -msgstr "diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] [PATH...]" +msgstr "diff [-r N[:M]] --old OLD-TGT[@OLDREV] [--new NEW-TGT[@NEWREV]] [PATH...]" #. (programlisting) #: ../source/book.xml:17937 @@ -19328,39 +19326,41 @@ msgstr "diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]" #: ../source/book.xml:17943 #, fuzzy msgid "Display the differences between two paths. The ways you can use svn diff are:" -msgstr "显示两条路径的区别,svn diff有三种使用方式:" +msgstr "显示两条路径的区别,svn diff有三种使用方式:" #. (para) #: ../source/book.xml:17945 #, fuzzy msgid "Use just svn diff'to display local modifications in a working copy." -msgstr "运行svn diff以标准差别格式查看修改的内容。" +msgstr "运行svn diff以标准差别格式查看修改的内容。" #. (para) #: ../source/book.xml:17947 msgid "Display the changes made to TARGETs as they are seen in REV between two revisions. TARGETs may be all working copy paths or all URLs. If TARGETs are working copy paths, N defaults to BASE and M to the working copy; if URLs, N must be specified and M defaults to HEAD. The -c M option is equivalent to -r N:M where N = M-1. Using -c -M does the reverse: -r M:N where N = M-1." -msgstr "" +msgstr "显示TARGETREV的样子时两个修订版本之间所作的修改,TARGET可以是任何工作拷贝路径或任何URL,如果TARGET是工作拷贝路径,则N缺省是BASE,而M是工作拷贝;如果是URL,则必须指定N,而M缺省是HEAD-c M选项与-r N:M等价,其中N = M-1。使用-c -M则相反:-r M:N的意思是N = M-1。" #. (para) #: ../source/book.xml:17963 msgid "Display the differences between OLD-TGT as it was seen in OLDREV and NEW-TGT as it was seen ain NEWREV. PATHs, if given, are relative to OLD-TGT and NEW-TGT and restrict the output to differences for those paths. OLD-TGT and NEW-TGT may be working copy paths or URL[@REV]. NEW-TGT defaults to OLD-TGT if not specified. -r N makes OLDREV default to N, -r N:M makes OLDREV default to N and NEWREV default to M." -msgstr "" +msgstr "显示在OLDREVOLD-TGTNEWREVNEW-TGT之间的区别。如果提供PATH,则与OLD-TGTNEW-TGT关联,将输出限制在那些路径。OLD-TGTNEW-TGT可能是工作拷贝路经或URL[@REV]。如果没有指定,NEW-TGT缺省是OLD-TGT-r N设置OLDREV缺省为N,而-r N:M设置OLDREV缺省为N,而NEWREV缺省为M。" #. (para) #: ../source/book.xml:17982 +#, fuzzy msgid "Shorthand for svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]" -msgstr "" +msgstr "svn diff -r N:M URL is shorthand for svn diff -r N:M --old=URL --new=URL." #. (para) #: ../source/book.xml:17984 +#, fuzzy msgid "svn diff -r N:M URL is shorthand for svn diff -r N:M --old=URL --new=URL." -msgstr "" +msgstr "svn diff -r N:M URL is shorthand for svn diff -r N:M --old=URL --new=URL." #. (para) #: ../source/book.xml:17987 #, fuzzy msgid "svn diff [-r N[:M]] URL1[@N] URL2[@M] is shorthand for svn diff [-r N[:M]] --old=URL1 --new=URL2." -msgstr "svn diff [-r N[:M]] URL1[@N] URL2[@M]svn diff [-r N[:M]] --old=URL1 --new=URL2的缩写。" +msgstr "svn diff [-r N[:M]] URL1[@N] URL2[@M]svn diff [-r N[:M]] --old=URL1 --new=URL2的缩写。" #. (para) #: ../source/book.xml:17990 @@ -19413,7 +19413,7 @@ msgstr "如果使用其他语法,服务器会比较URL1svn diff ignores the ancestry of files and merely compares the contents of the two files being compared. If you use , the ancestry of the paths in question will be taken into consideration when comparing revisions (that is, if you run svn diff on two files with identical contents but different ancestry you will see the entire contents of the file as having been removed and added again)." -msgstr "缺省情况下,svn diff忽略文件的祖先,只会比较两个文件的内容。如果你使用,比较修订版本(也就是,当你运行svn diff比较两个内容相同,但祖先历史不同的对象会看到所有的内容被删除又再次添加)时就会考虑路径的祖先。" +msgstr "缺省情况下,svn diff忽略文件的祖先,只会比较两个文件的内容。如果你使用,比较修订版本(也就是,当你运行svn diff比较两个内容相同,但祖先历史不同的对象会看到所有的内容被删除又再次添加)时就会考虑路径的祖先。" #. (para) #: ../source/book.xml:18049 @@ -19428,7 +19428,7 @@ msgstr "获得工作拷贝非BASE修订版 #. (screen) #: ../source/book.xml:18068 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "--revision (-r) ARG\n" @@ -19450,29 +19450,25 @@ msgid "" "\n" msgstr "" "\n" -"--revision (-r) ARG\n" -"--change (-c) ARG\n" -"--old ARG\n" -"--new ARG\n" +"--revision (-r) REV\n" +"--old OLD-TARGET\n" +"--new NEW-TARGET\n" +"--extensions (-x) \"ARGS\"\n" "--non-recursive (-N)\n" "--diff-cmd CMD\n" -"--extensions (-x) \"ARGS\"\n" -"--no-diff-deleted\n" "--notice-ancestry\n" -"--summarize\n" -"--force\n" "--username USER\n" "--password PASS\n" "--no-auth-cache\n" "--non-interactive\n" +"--no-diff-deleted\n" "--config-dir DIR\n" -"\n" #. (para) #: ../source/book.xml:18092 #, fuzzy msgid "Compare BASE and your working copy (one of the most popular uses of svn diff):" -msgstr "比较BASE和你的工作拷贝(svn diff最经常的用法):" +msgstr "比较BASE和你的工作拷贝(svn diff最经常的用法):" #. (screen) #: ../source/book.xml:18095 @@ -19500,7 +19496,7 @@ msgstr "环境变量EDITOR" #. (screen) #: ../source/book.xml:18104 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "$ svn diff -c 9115 COMMITTERS \n" @@ -19510,7 +19506,7 @@ msgid "" "+++ COMMITTERS\t(working copy)\n" msgstr "" "\n" -"$ svn diff -c 9115 COMMITTERS \n" +"$ svn diff -r 3900 COMMITTERS \n" "Index: COMMITTERS\n" "===================================================================\n" "--- COMMITTERS\t(revision 3900)\n" @@ -19853,13 +19849,11 @@ msgstr "不访问" #. (screen) #: ../source/book.xml:18334 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "--config-dir DIR\n" -msgstr "" -"\n" -"--config-dir DIR\n" +msgstr "--config-dir" #. (tertiary) #: ../source/book.xml:18343 @@ -19930,11 +19924,11 @@ msgstr "" #: ../source/book.xml:18412 #, fuzzy msgid "This imports the local directory myproj into trunk/misc in your repository. The directory trunk/misc need not exist before you import into it—svn import will recursively create directories for you." -msgstr "这将本地目录myproj导入到版本库的trunk/misctrunk/misc在导入之前不需要存在—svn import会递归的为你创建目录:" +msgstr "这将本地目录myproj导入到版本库的trunk/misctrunk/misc在导入之前不需要存在—svn import会递归的为你创建目录:" #. (screen) #: ../source/book.xml:18419 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "$ svn import -m \"New import\" myproj http://svn.red-bean.com/repos/trunk/misc\n" @@ -19944,7 +19938,7 @@ msgid "" "Committed revision 16.\n" msgstr "" "\n" -"$ svn import -m \"New import\" myproj http://svn.red-bean.com/repos/trunk/misc\n" +"$ svn import -m \"New import\" myproj http://svn.red-bean.com/repos/test\n" "Adding myproj/sample.txt\n" "…\n" "Transmitting file data .........\n" @@ -19958,7 +19952,7 @@ msgstr "在上一个例子里,将会拷贝目录my #. (screen) #: ../source/book.xml:18430 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "$ svn import -m \"New import\" myproj http://svn.red-bean.com/repos/trunk/misc/myproj\n" @@ -19968,17 +19962,18 @@ msgid "" "Committed revision 16.\n" msgstr "" "\n" -"$ svn import -m \"New import\" myproj http://svn.red-bean.com/repos/trunk/misc/myproj\n" +"$ svn import -m \"New import\" myproj \\\n" +" http://svn.red-bean.com/repos/test/trunk/misc/myproj\n" "Adding myproj/sample.txt\n" "…\n" "Transmitting file data .........\n" -"Committed revision 16.\n" +"Committed revision 19.\n" #. (para) #: ../source/book.xml:18437 #, fuzzy msgid "After importing data, note that the original tree is not under version control. To start working, you still need to svn checkout a fresh working copy of the tree." -msgstr "在导入数据之后,你会发现原先的目录树并没有纳入版本控制,为了开始工作,你还是要运行svn checkout得到一个干净的目录树工作拷贝。" +msgstr "在导入数据之后,你会发现原先的目录树并没有纳入版本控制,为了开始工作,你还是要运行svn checkout得到一个干净的目录树工作拷贝。" #. (tertiary) #: ../source/book.xml:18447 ../source/book.xml:22253 @@ -19997,9 +19992,9 @@ msgstr "显示本地或远程条目的信息。" #. (programlisting) #: ../source/book.xml:18458 -#, no-wrap +#, fuzzy, no-wrap msgid "svn info [TARGET[@REV]...]" -msgstr "svn info [TARGET[@REV]...]" +msgstr "svn list [TARGET[@REV]...]" #. (para) #: ../source/book.xml:18464 @@ -20158,7 +20153,7 @@ msgstr "" #: ../source/book.xml:18585 #, fuzzy msgid "svn info will show you all the useful information that it has for items in your working copy. It will show information for files:" -msgstr "svn info会展示所有项目的所有有用信息,它会显示文件的信息:" +msgstr "svn info会展示所有项目的所有有用信息,它会显示文件的信息:" #. (screen) #: ../source/book.xml:18588 @@ -20238,7 +20233,7 @@ msgstr "" #: ../source/book.xml:18620 #, fuzzy msgid "svn info also acts on URLs (also note that the file readme.doc in this example is locked, so lock information is also provided):" -msgstr "svn info也可以针对URL操作(另外,可以注意一下例子中的readme.doc文件已经被锁定,所以也会显示锁定信息):" +msgstr "svn info也可以针对URL操作(另外,可以注意一下例子中的readme.doc文件已经被锁定,所以也会显示锁定信息):" #. (screen) #: ../source/book.xml:18623 @@ -20313,7 +20308,7 @@ msgstr "缺省的TARGET--verbose, svn list shows the following fields for each item:" -msgstr "如果一个客户端连接到svnserve进程,如下事情会发生:" +msgstr "如果一个客户端连接到svnserve进程,如下事情会发生:" #. (para) #: ../source/book.xml:18678 @@ -20328,7 +20323,7 @@ msgstr "最后一次提交的作者" #. (para) #: ../source/book.xml:18685 msgid "If locked, the letter O (See for details)." -msgstr "" +msgstr "如果锁定,字符为O(更多细节见)" #. (para) #: ../source/book.xml:18688 @@ -20382,7 +20377,7 @@ msgstr "" #: ../source/book.xml:18740 #, fuzzy msgid "svn list is most useful if you want to see what files a repository has without downloading a working copy:" -msgstr "如果你希望在没有下载工作拷贝时察看版本库有哪些文件,svn list会非常有用:" +msgstr "如果你希望在没有下载工作拷贝时察看版本库有哪些文件,svn list会非常有用:" #. (screen) #: ../source/book.xml:18743 @@ -20406,7 +20401,7 @@ msgstr "" #: ../source/book.xml:18750 #, fuzzy msgid "You can pass the option for additional information, rather like the UNIX command ls -l:" -msgstr "你也可以传递选项来得到额外信息,非常类似UNIX的ls -l命令:" +msgstr "你也可以传递选项来得到额外信息,非常类似UNIX的ls -l命令:" #. (screen) #: ../source/book.xml:18753 @@ -20518,7 +20513,7 @@ msgstr "锁定工作拷贝的一个被其它用户锁定的文件:" #. (screen) #: ../source/book.xml:18840 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "$ svn lock tree.jpg\n" @@ -20530,11 +20525,11 @@ msgid "" msgstr "" "\n" "$ svn lock tree.jpg\n" -"svn: warning: Path '/tree.jpg is already locked by user 'sally in \\\n" +"svn: warning: Path '/tree.jpg is already locked by user 'harry in \\\n" " filesystem '/svn/repos/db'\n" "\n" -"$ svn lock --force tree.jpg\n" -"'tree.jpg' locked by user 'harry'.\n" +"$ svn lock --force foo\n" +"'tree.jpg' locked by user 'sally'.\n" #. (para) #: ../source/book.xml:18848 @@ -20543,7 +20538,7 @@ msgstr "没有工作拷贝的情况下锁定文件:" #. (screen) #: ../source/book.xml:18849 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "$ svn lock http://svn.red-bean.com/repos/test/tree.jpg\n" @@ -20551,7 +20546,7 @@ msgid "" msgstr "" "\n" "$ svn lock http://svn.red-bean.com/repos/test/tree.jpg\n" -"'tree.jpg' locked by user 'harry'.\n" +"'tree.jpg' locked by user 'sally'.\n" #. (para) #: ../source/book.xml:18853 ../source/book.xml:20632 @@ -20582,15 +20577,15 @@ msgstr "svn log URL [PATH...]" #. (programlisting) #: ../source/book.xml:18872 -#, no-wrap +#, fuzzy, no-wrap msgid "svn log URL[@REV] [PATH...]" -msgstr "svn log URL[@REV] [PATH...]" +msgstr "svn log URL [PATH...]" #. (para) #: ../source/book.xml:18878 #, fuzzy msgid "Shows log messages from the repository. If no arguments are supplied, svn log shows the log messages for all files and directories inside of (and including) the current working directory of your working copy. You can refine the results by specifying a path, one or more revisions, or any combination of the two. The default revision range for a local path is BASE:1." -msgstr "缺省目标是你的当前目录的路径,如果没有提供参数,svn log会显示当前目录下的所有文件和目录的日志信息,你可以通过指定路径来精炼结果,一个或多个修订版本,或者是任何两个的组合。对于本地路径的缺省修订版本范围BASE:1。" +msgstr "缺省目标是你的当前目录的路径,如果没有提供参数,svn log会显示当前目录下的所有文件和目录的日志信息,你可以通过指定路径来精炼结果,一个或多个修订版本,或者是任何两个的组合。对于本地路径的缺省修订版本范围BASE:1。" #. (para) #: ../source/book.xml:18886 @@ -20602,7 +20597,7 @@ msgstr "如果你只是指定一个URL,就会打印这个URL上所有的日志 #: ../source/book.xml:18891 #, fuzzy msgid "With , svn log will also print all affected paths with each log message. With , svn log will not print the log message body itself (this is compatible with )." -msgstr "svn log使用选项也会打印所有影响路径的日志信息,使用选项不会打印日志信息正文本身(这与协调一致)。" +msgstr "svn log使用选项也会打印所有影响路径的日志信息,使用选项不会打印日志信息正文本身(这与协调一致)。" #. (para) #: ../source/book.xml:18896 @@ -20647,7 +20642,7 @@ msgstr "" #: ../source/book.xml:18945 #, fuzzy msgid "You can see the log messages for all the paths that changed in your working copy by running svn log from the top:" -msgstr "你可以在顶级目录运行svn log看到工作拷贝中所有修改的路径的日志信息:" +msgstr "你可以在顶级目录运行svn log看到工作拷贝中所有修改的路径的日志信息:" #. (screen) #: ../source/book.xml:18948 @@ -20773,7 +20768,7 @@ msgstr "" #: ../source/book.xml:18999 #, fuzzy msgid "When you're concatenating the results of multiple calls to the log command, you may want to use the option. svn log normally prints out a dashed line at the beginning of a log message, after each subsequent log message, and following the final log message. If you ran svn log on a range of two revisions, you would get this:" -msgstr "当你想¿ž接多个队日志命令的调用结果,你会希望使用选项。svn log通常会在日志信息的开头和每一小段间打印一行虚线,如果你对一段修订版本运行svn log,你会得到下面的结果:" +msgstr "当你想¿ž接多个队日志命令的调用结果,你会希望使用选项。svn log通常会在日志信息的开头和每一小段间打印一行虚线,如果你对一段修订版本运行svn log,你会得到下面的结果:" #. (screen) #: ../source/book.xml:19007 @@ -20892,7 +20887,7 @@ msgstr "选项为提供了 #: ../source/book.xml:19058 #, fuzzy msgid "If you run svn log on a specific path and provide a specific revision and get no output at all" -msgstr "如果你在特定路径和修订版本运行svn log,输出结果为空" +msgstr "如果你在特定路径和修订版本运行svn log,输出结果为空" #. (screen) #: ../source/book.xml:19061 @@ -20948,9 +20943,9 @@ msgstr "应用两组源文件的差别到工作拷贝路径。" #. (programlisting) #: ../source/book.xml:19095 -#, no-wrap +#, fuzzy, no-wrap msgid "svn merge [-c M | -r N:M] SOURCE[@REV] [WCPATH]" -msgstr "svn merge [-c M | -r N:M] SOURCE[@REV] [WCPATH]" +msgstr "svn merge -r N:M SOURCE[@REV] [WCPATH]" #. (programlisting) #: ../source/book.xml:19096 @@ -20991,7 +20986,7 @@ msgstr "WCPATH是接收变化的工作拷贝路径, #: ../source/book.xml:19127 #, fuzzy msgid "Unlike svn diff, the merge command takes the ancestry of a file into consideration when performing a merge operation. This is very important when you're merging changes from one branch into another and you've renamed a file on one branch but not the other." -msgstr "不像svn diff,合并操作在执行时会考虑文件的祖先,当你从一个分支合并到另一个分支,而这两个分支有各自重命名的文件时,这一点会非常重要。" +msgstr "不像svn diff,合并操作在执行时会考虑文件的祖先,当你从一个分支合并到另一个分支,而这两个分支有各自重命名的文件时,这一点会非常重要。" #. (para) #: ../source/book.xml:19149 @@ -21000,7 +20995,7 @@ msgstr "只有在对URL操作时会" #. (screen) #: ../source/book.xml:19155 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "--revision (-r) REV\n" @@ -21020,13 +21015,11 @@ msgid "" msgstr "" "\n" "--revision (-r) REV\n" -"--change (-c) REV\n" "--non-recursive (-N)\n" "--quiet (-q)\n" "--force\n" "--dry-run\n" "--diff3-cmd CMD\n" -"--extensions (-x) ARG\n" "--ignore-ancestry\n" "--username USER\n" "--password PASS\n" @@ -21230,7 +21223,7 @@ msgstr "这个命令移动文件或目录到你的工作拷贝或者是版本库 #: ../source/book.xml:19310 #, fuzzy msgid "This command is equivalent to an svn copy followed by svn delete." -msgstr "这个命令同svn copy加一个svn delete等同。" +msgstr "这个命令同svn copy加一个svn delete等同。" #. (para) #: ../source/book.xml:19315 @@ -21260,7 +21253,7 @@ msgstr "删除" #. (screen) #: ../source/book.xml:19358 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "--message (-m) TEXT\n" @@ -21280,7 +21273,7 @@ msgstr "" "\n" "--message (-m) TEXT\n" "--file (-F) FILE\n" -"--revision (-r) REV ()\n" +"--revision (-r) REV\n" "--quiet (-q)\n" "--force\n" "--username USER\n" @@ -21459,9 +21452,9 @@ msgstr "svn propedit PROPNAME PATH..." #. (programlisting) #: ../source/book.xml:19489 -#, no-wrap +#, fuzzy, no-wrap msgid "svn propedit PROPNAME --revprop -r REV [TARGET]" -msgstr "svn propedit PROPNAME --revprop -r REV [TARGET]" +msgstr "svn propedit PROPNAME --revprop -r REV [URL]" #. (para) #: ../source/book.xml:19495 @@ -21504,7 +21497,7 @@ msgstr "" #: ../source/book.xml:19540 #, fuzzy msgid "svn propedit makes it easy to modify properties that have multiple values:" -msgstr "svn propedit对修改多个值的属性非常简单:" +msgstr "svn propedit对修改多个值的属性非常简单:" #. (screen) #: ../source/book.xml:19542 @@ -21650,9 +21643,9 @@ msgstr "svn proplist [TARGET[@REV]...]" #. (programlisting) #: ../source/book.xml:19648 -#, no-wrap +#, fuzzy, no-wrap msgid "svn proplist --revprop -r REV [TARGET]" -msgstr "svn proplist --revprop -r REV [TARGET]" +msgstr "svn proplist --revprop -r REV [URL]" #. (para) #: ../source/book.xml:19654 @@ -21762,9 +21755,9 @@ msgstr "svn propset PROPNAME [PROPVAL | -F VALFILE] PATH..." #. (programlisting) #: ../source/book.xml:19736 -#, no-wrap +#, fuzzy, no-wrap msgid "svn propset PROPNAME --revprop -r REV [PROPVAL | -F VALFILE] [TARGET]" -msgstr "svn propset PROPNAME --revprop -r REV [PROPVAL | -F VALFILE] [TARGET]" +msgstr "svn propset PROPNAME --revprop -r REV [PROPVAL | -F VALFILE] [URL]" #. (para) #: ../source/book.xml:19742 @@ -22001,13 +21994,13 @@ msgstr "" #: ../source/book.xml:19921 #, fuzzy msgid "Once you've resolved the conflict and foo.c is ready to be committed, run svn resolved to let your working copy know you've taken care of everything." -msgstr "当你解决了foo.c的冲突,并且准备提交,运行svn resolved让你的工作拷贝知道你已经完成了所有事情。" +msgstr "当你解决了foo.c的冲突,并且准备提交,运行svn resolved让你的工作拷贝知道你已经完成了所有事情。" #. (para) #: ../source/book.xml:19926 #, fuzzy msgid "You can just remove the conflict files and commit, but svn resolved fixes up some bookkeeping data in the working copy administrative area in addition to removing the conflict files, so we recommend that you use this command." -msgstr "你可以仅仅删除冲突的文件并且提交,但是svn resolved除了删除冲突文件,还修正了一些记录在工作拷贝管理区域的记录数据,所以我们推荐你使用这个命令。" +msgstr "你可以仅仅删除冲突的文件并且提交,但是svn resolved除了删除冲突文件,还修正了一些记录在工作拷贝管理区域的记录数据,所以我们推荐你使用这个命令。" #. (tertiary) #: ../source/book.xml:19939 @@ -22029,7 +22022,7 @@ msgstr "svn revert PATH..." #: ../source/book.xml:19955 #, fuzzy msgid "Reverts any local changes to a file or directory and resolves any conflicted states. svn revert will not only revert the contents of an item in your working copy, but also any property changes. Finally, you can use it to undo any scheduling operations that you may have done (e.g. files scheduled for addition or deletion can be unscheduled)." -msgstr "恢复所有对文件和目录的修改,并且解决所有的冲突状态。svn revert不会只是恢复工作拷贝中一个项目的内容,也包括了对属性修改的恢复。最终,你可以使用它来取消所有已经做过的预定操作(例如,文件预定要添加或删除可以恢复)。" +msgstr "恢复所有对文件和目录的修改,并且解决所有的冲突状态。svn revert不会只是恢复工作拷贝中一个项目的内容,也包括了对属性修改的恢复。最终,你可以使用它来取消所有已经做过的预定操作(例如,文件预定要添加或删除可以恢复)。" #. (para) #: ../source/book.xml:19997 @@ -22109,13 +22102,13 @@ msgstr "" #. (para) #: ../source/book.xml:20027 msgid "svn revert is inherently dangerous, since its entire purpose is to throw away data—namely, your uncommitted changes. Once you've reverted, Subversion provides no way to get back those uncommitted changes." -msgstr "" +msgstr "svn revert本身有固有的危险,因为它的目的是放弃数据—未提交的修改。一旦你选择了恢复,Subversion没有方法找回未提交的修改。" #. (para) #: ../source/book.xml:20033 #, fuzzy msgid "If you provide no targets to svn revert, it will do nothing—to protect you from accidentally losing changes in your working copy, svn revert requires you to provide at least one target." -msgstr "如果你没有给svn revert提供了目标,它不会做任何事情—为了保护你不小心失去对工作拷贝的修改,svn revert需要你提供至少一个目标。" +msgstr "如果你没有给svn revert提供了目标,它不会做任何事情—为了保护你不小心失去对工作拷贝的修改,svn revert需要你提供至少一个目标。" #. (tertiary) #: ../source/book.xml:20045 @@ -22252,7 +22245,7 @@ msgstr "'!'" #: ../source/book.xml:20137 #, fuzzy msgid "Item is missing (e.g. you moved or deleted it without using svn). This also indicates that a directory is incomplete (a checkout or update was interrupted)." -msgstr "项目已经丢失(例如,你使用svn移动或者删除了它)。这也说明了一个目录不是完整的(一个检出或更新中断)。" +msgstr "项目已经丢失(例如,你使用svn移动或者删除了它)。这也说明了一个目录不是完整的(一个检出或更新中断)。" #. (term) #: ../source/book.xml:20144 @@ -22516,7 +22509,7 @@ msgstr "" #: ../source/book.xml:20363 #, fuzzy msgid "only places an asterisk next to items that are out of date (that is, items that will be updated from the repository if you run svn update). does not cause the status listing to reflect the repository's version of the item (although you can see the revision number in the repository by passing the option)." -msgstr "只会在过期的项目(如果你运行svn update,就会更新的项目)旁边安置一个星号。不会导致状态列表反映项目的版本库版本。" +msgstr "只会在过期的项目(如果你运行svn update,就会更新的项目)旁边安置一个星号。不会导致状态列表反映项目的版本库版本。" #. (para) #: ../source/book.xml:20372 @@ -22547,7 +22540,7 @@ msgstr "" #: ../source/book.xml:20382 #, fuzzy msgid "For many more examples of svn status, see ." -msgstr "关于svn status的更多例子可以见。" +msgstr "关于svn status的更多例子可以见。" #. (tertiary) #: ../source/book.xml:20390 @@ -22585,7 +22578,7 @@ msgstr "这个子命令更新你的工作拷贝来反映新的URL—通常是一 #. (para) #: ../source/book.xml:20414 msgid "The option causes svn switch to do something different: it updates your working copy to point to the same repository directory, only at a different URL (typically because an administrator has moved the repository to another server, or to another URL on the same server)." -msgstr "" +msgstr "选项导致svn switch做不同的事情:它更新你的工作拷贝指向到同一个版本库目录,但是不同的URL(通常因为管理员将版本库转移了服务器,或到了同一个服务器的另一个URL)。" #. (para) #: ../source/book.xml:20427 @@ -22680,7 +22673,7 @@ msgstr "如果你不希望跳转所有的工作拷贝,你可以只跳转一部 #: ../source/book.xml:20490 #, fuzzy msgid "Sometimes an administrator might change the base location of your repository—in other words, the contents of the repository doesn't change, but the main URL used to reach the root of the repository does. For example, the hostname may change, the URL scheme may change, or any part of the URL which leads to the repository itself may change. Rather than check out a new working copy, you can have the svn switch command rewrite the beginnings of all the URLs in your working copy. Use the option to do the substitution. No file contents are changed, nor is the repository contacted. It's similar to running a Perl script over your working copy .svn/ directories which runs s/OldRoot/NewRoot/." -msgstr "有时候管理员会修改版本库的基本位置—换句话说,版本库的内容并不改变,但是访问根的主URL变了。举个例子,主机名变了、URL模式变了或者是URL中的任何一部分改变了。我们不选择重新检出一个工作拷贝,你可以使用svn switch来重写版本库所有URL的开头。使用来做这种替换,没有文件内容会改变,访问的版本库也不会改变。只是像在工作拷贝.svn/运行了一段Perl脚本s/OldRoot/NewRoot/。" +msgstr "有时候管理员会修改版本库的基本位置—换句话说,版本库的内容并不改变,但是访问根的主URL变了。举个例子,主机名变了、URL模式变了或者是URL中的任何一部分改变了。我们不选择重新检出一个工作拷贝,你可以使用svn switch来重写版本库所有URL的开头。使用来做这种替换,没有文件内容会改变,访问的版本库也不会改变。只是像在工作拷贝.svn/运行了一段Perl脚本s/OldRoot/NewRoot/。" #. (screen) #: ../source/book.xml:20505 @@ -22729,13 +22722,13 @@ msgstr "小心使用选项,如果你输入了错误 #: ../source/book.xml:20533 #, fuzzy msgid "If the working copy needs to reflect a new directory within the repository, then use just svn switch." -msgstr "如果工作拷贝需要反映一个版本库的新目录,只需要使用svn switch。" +msgstr "如果工作拷贝需要反映一个版本库的新目录,只需要使用svn switch。" #. (para) #: ../source/book.xml:20539 #, fuzzy msgid "If the working copy still reflects the same repository directory, but the location of the repository itself has changed, then use svn switch --relocate." -msgstr "如果你的工作拷贝还是反映相同的版本库目录,但是版本库本身的位置改变了,使用svn switch --relocate。" +msgstr "如果你的工作拷贝还是反映相同的版本库目录,但是版本库本身的位置改变了,使用svn switch --relocate。" #. (tertiary) #: ../source/book.xml:20552 @@ -22864,7 +22857,7 @@ msgstr "svn update [PATH...]" #: ../source/book.xml:20655 #, fuzzy msgid "svn update brings changes from the repository into your working copy. If no revision is given, it brings your working copy up-to-date with the HEAD revision. Otherwise, it synchronizes the working copy to the revision given by the option. As part of the synchronization, svn update also removes any stale locks (see ) found in the working copy." -msgstr "svn update会把版本库的修改带到工作拷贝,如果没有给定修订版本,它会把你的工作拷贝更新到HEAD修订版本,否则,它会把工作拷贝更新到你用指定的修订版本。为了保持同步,svn update也会删除所有在工作拷贝发现的无效锁定(见)。" +msgstr "svn update会把版本库的修改带到工作拷贝,如果没有给定修订版本,它会把你的工作拷贝更新到HEAD修订版本,否则,它会把工作拷贝更新到你用指定的修订版本。为了保持同步,svn update也会删除所有在工作拷贝发现的无效锁定(见)。" #. (para) #: ../source/book.xml:20664 @@ -22935,7 +22928,7 @@ msgstr "up" #. (screen) #: ../source/book.xml:20725 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "--revision (-r) REV\n" @@ -22955,8 +22948,6 @@ msgstr "" "--revision (-r) REV\n" "--non-recursive (-N)\n" "--quiet (-q)\n" -"--no-ignore\n" -"--incremental\n" "--diff3-cmd CMD\n" "--username USER\n" "--password PASS\n" @@ -23022,25 +23013,25 @@ msgstr "" #: ../source/book.xml:20767 #, fuzzy msgid "If you want to examine an older revision of a single file, you may want to use svn cat instead—it won't change your working copy." -msgstr "如果你希望检查单个文件的旧的修订版本,你会希望使用svn cat。" +msgstr "如果你希望检查单个文件的旧的修订版本,你会希望使用svn cat。" #. (para) #: ../source/book.xml:20784 #, fuzzy msgid "svnadmin is the administrative tool for monitoring and repairing your Subversion repository. For detailed information, see ." -msgstr "svnadmin是一个用来监控和修改Subversion版本库的管理工具,详情请见。" +msgstr "svnadmin是一个用来监控和修改Subversion版本库的管理工具,详情请见。" #. (para) #: ../source/book.xml:20787 #, fuzzy msgid "Since svnadmin works via direct repository access (and thus can only be used on the machine that holds the repository), it refers to the repository with a path, not a URL." -msgstr "因为svnadmin直接访问版本库(因此只可以在存放版本库的机器上使用),它通过路径访问版本库,而不是URL。" +msgstr "因为svnadmin直接访问版本库(因此只可以在存放版本库的机器上使用),它通过路径访问版本库,而不是URL。" #. (title) #: ../source/book.xml:20793 #, fuzzy msgid "svnadmin Options" -msgstr "svnadmin 选项" +msgstr "svnadmin 选项" #. (option) #: ../source/book.xml:20798 @@ -23050,7 +23041,7 @@ msgstr "--bdb-log-keep" #. (para) #: ../source/book.xml:20801 msgid "(Berkeley DB specific) Disable automatic log removal of database log files. Having these log files around can be convenient if you need to restore from a catastrophic repository failure." -msgstr "" +msgstr "(Berkeley DB特定)关闭数据库日志文件的自动删除,保留这些文件可以帮助你在灾难性版本库故障时更加便利。" #. (option) #: ../source/book.xml:20809 @@ -23060,7 +23051,7 @@ msgstr "--bdb-txn-nosync" #. (para) #: ../source/book.xml:20812 msgid "(Berkeley DB specific) Disables fsync when committing database transactions. Used with the svnadmin create command to create a Berkeley DB backed repository with DB_TXN_NOSYNC enabled (which improves speed but has some risks associated with it)." -msgstr "" +msgstr "(Berkeley DB特定)在提交数据库事务时关闭fsync。可以在svnadmin create命令创建Berkeley DB后端时开启DB_TXN_NOSYNC(可以改进速度,但是有相关的风险)。" #. (option) #: ../source/book.xml:20822 @@ -23091,7 +23082,7 @@ msgstr "--force-uuid" #: ../source/book.xml:20842 #, fuzzy msgid "By default, when loading data into repository that already contains revisions, svnadmin will ignore the UUID from the dump stream. This option will cause the repository's UUID to be set to the UUID from the stream." -msgstr "缺省情况下,当版本库加载已经包含修订版本的数据时svnadmin会忽略流中的UUID,这个选项会导致版本库的UUID设置为流的UUID。" +msgstr "缺省情况下,当版本库加载已经包含修订版本的数据时svnadmin会忽略流中的UUID,这个选项会导致版本库的UUID设置为流的UUID。" #. (option) #: ../source/book.xml:20852 @@ -23102,7 +23093,7 @@ msgstr "--ignore-uuid" #: ../source/book.xml:20855 #, fuzzy msgid "By default, when loading an empty repository, svnadmin will ignore the UUID from the dump stream. This option will force that UUID to be ignored (useful for overriding your configuration file if it has set)." -msgstr "缺省情况下,当加载空版本库时,svnadmin会使用来自流中的UUID,这个选项会导致忽略UUID。" +msgstr "缺省情况下,当加载空版本库时,svnadmin会使用来自流中的UUID,这个选项会导致忽略UUID。" #. (para) #: ../source/book.xml:20868 @@ -23164,7 +23155,7 @@ msgstr "当加载一个转储文件时,每次新加修订版本之前运行版 #: ../source/book.xml:20927 #, fuzzy msgid "svnadmin Subcommands" -msgstr "svnadmin 子命令" +msgstr "svnadmin 子命令" #. (tertiary) #: ../source/book.xml:20933 @@ -23191,13 +23182,13 @@ msgstr "svnadmin create REPOS_PATH" #: ../source/book.xml:20951 #, fuzzy msgid "Remember, svnadmin works only with local paths, not URLs." -msgstr "记住svnadmin只工作在本地路径,而不是URL。" +msgstr "记住svnadmin只工作在本地路径,而不是URL。" #. (para) #: ../source/book.xml:20949 #, fuzzy msgid "Create a new, empty repository at the path provided. If the provided directory does not exist, it will be created for you. As of Subversion 1.2, svnadmin creates new repositories with the fsfs filesystem backend by default." -msgstr "在提供的路径上创建一个新的空的版本库,如果提供的目录不存在,它会为你创建。对于Subversion 1.2,svnadmin缺省使用fsfs文件系统后端创建版本库。" +msgstr "在提供的路径上创建一个新的空的版本库,如果提供的目录不存在,它会为你创建。对于Subversion 1.2,svnadmin缺省使用fsfs文件系统后端创建版本库。" #. (screen) #: ../source/book.xml:20963 @@ -23270,7 +23261,7 @@ msgstr "svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH" #: ../source/book.xml:21008 #, fuzzy msgid "svnadmin deltify exists in current versions of Subversion only for historical reasons. This command is deprecated and no longer needed." -msgstr "svnadmin deltify因为历史原因只存在于1.0.x,这个命令已经废弃,不再需要。" +msgstr "svnadmin deltify因为历史原因只存在于1.0.x,这个命令已经废弃,不再需要。" #. (para) #: ../source/book.xml:21011 @@ -23330,7 +23321,7 @@ msgstr "有一对有用的选项可以改变转储文件产生的方式,第一 #: ../source/book.xml:21078 #, fuzzy msgid "The second useful option is . This option causes svnadmin dump to, instead of emitting fulltext representations of file contents and property lists, emit only deltas of those items against their previous versions. This reduces (in some cases, drastically) the size of the dumpfile that svnadmin dump creates. There are, however, disadvantages to using this option—deltified dumpfiles are more CPU intensive to create, cannot be operated on by svndumpfilter, and tend not to compress as well as their non-deltified counterparts when using third-party tools like gzip and bzip2." -msgstr "第二个有用的选项是,这个选项导致svnadmin dump不会保留修改文件的所有内容,而只是记录修改的部分。这样减少(有些情况下是非常大的)了svnadmin dump产生的转储文件的大小。然而,也有缺点—增量转储文件需要更多的CPU来创建,也不可以用svndumpfilter操作,也不如非增量文件容易被如gzipbzip2等第三方工具压缩。" +msgstr "第二个有用的选项是,这个选项导致svnadmin dump不会保留修改文件的所有内容,而只是记录修改的部分。这样减少(有些情况下是非常大的)了svnadmin dump产生的转储文件的大小。然而,也有缺点—增量转储文件需要更多的CPU来创建,也不可以用svndumpfilter操作,也不如非增量文件容易被如gzipbzip2等第三方工具压缩。" #. (screen) #: ../source/book.xml:21096 @@ -23443,7 +23434,7 @@ msgstr "svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH" #: ../source/book.xml:21183 #, fuzzy msgid "This subcommand makes a full hot backup of your repository, including all hooks, configuration files, and, of course, database files. If you pass the option, svnadmin will perform a hotcopy of your repository, and then remove unused Berkeley DB logs from the original repository. You can run this command at any time and make a safe copy of the repository, regardless of whether other processes are using the repository." -msgstr "这个子命令会制作一个版本库的完全拷贝,包括所有的钩子,配置文件,当然还有数据库文件。如果你传递选项,svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件。你可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。" +msgstr "这个子命令会制作一个版本库的完全拷贝,包括所有的钩子,配置文件,当然还有数据库文件。如果你传递选项,svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件。你可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。" #. (screen) #: ../source/book.xml:21197 @@ -23458,7 +23449,7 @@ msgstr "" #. (para) #: ../source/book.xml:21201 msgid "As described in , hot-copied Berkeley DB repositories are not portable across operating systems, nor will they work on machines with a different endianness than the machine where they were created." -msgstr "" +msgstr "就像描述的,热拷贝的Berkeley DB版本库不能跨操作系统移植,也不能在不同字节续的主机上工作。" #. (tertiary) #: ../source/book.xml:21213 @@ -23600,7 +23591,7 @@ msgstr "例子" #: ../source/book.xml:21330 #, fuzzy msgid "This shows the beginning of loading a repository from a backup file (made, of course, with svnadmin dump):" -msgstr "这里显示了加载一个备份文件到版本库(当然,使用svnadmin dump):" +msgstr "这里显示了加载一个备份文件到版本库(当然,使用svnadmin dump):" #. (screen) #: ../source/book.xml:21333 @@ -23814,7 +23805,7 @@ msgstr "" #: ../source/book.xml:21482 #, fuzzy msgid "Recovering the database requires an exclusive lock on the repository. (This is a database lock; see .) If another process is accessing the repository, then svnadmin recover will error:" -msgstr "恢复数据库需要一个版本库的独占锁(这是一个数据库锁;见),如果另一个进程访问版本库,svnadmin recover会出错:" +msgstr "恢复数据库需要一个版本库的独占锁(这是一个数据库锁;见),如果另一个进程访问版本库,svnadmin recover会出错:" #. (screen) #: ../source/book.xml:21487 @@ -23838,7 +23829,7 @@ msgstr "" #: ../source/book.xml:21494 #, fuzzy msgid "The option, however, will cause svnadmin recover to wait indefinitely for other processes to disconnect:" -msgstr "选项可以导致svnadmin recover一直等待其它进程断开连接:" +msgstr "选项可以导致svnadmin recover一直等待其它进程断开连接:" #. (screen) #: ../source/book.xml:21497 @@ -23969,7 +23960,7 @@ msgstr "" #: ../source/book.xml:21594 #, fuzzy msgid "Fortunately, the output of lstxns works great as the input for rmtxns:" -msgstr "很幸运,lstxns的输出作为rmtxns输入工作良好:" +msgstr "很幸运,lstxns的输出作为rmtxns输入工作良好:" #. (screen) #: ../source/book.xml:21596 @@ -24016,7 +24007,7 @@ msgstr "设置修订版本REVISION的日志信息为FILE的内容。" #: ../source/book.xml:21625 #, fuzzy msgid "This is similar to using svn propset --revprop to set the svn:log property on a revision, except that you can also use the option to avoid running any pre- or post-commit hooks, which is useful if the modification of revision properties has not been enabled in the pre-revprop-change hook." -msgstr "这与使用svn propset --revprop设置某一修订版本的svn:log属性效果一样,除了你也可以使用选项绕过的所有pre-或post-commit的钩子脚本,这在pre-revprop-change钩子脚本中禁止修改修订版本属性时非常有用。" +msgstr "这与使用svn propset --revprop设置某一修订版本的svn:log属性效果一样,除了你也可以使用选项绕过的所有pre-或post-commit的钩子脚本,这在pre-revprop-change钩子脚本中禁止修改修订版本属性时非常有用。" #. (para) #: ../source/book.xml:21633 @@ -24075,7 +24066,7 @@ msgstr "svnadmin verify REPOS_PATH" #. (para) #: ../source/book.xml:21680 msgid "Run this command if you wish to verify the integrity of your repository. This basically iterates through all revisions in the repository by internally dumping all revisions and discarding the output—it's a good idea to run this on a regular basis to guard against latent hard disk failures and bitrot. If this command fails—which it will do at the first sign of a problem—that means that your repository has at least one corrupted revision and you should restore the corrupted revision from a backup (you did make a backup, didn't you?)." -msgstr "" +msgstr "如果你希望验证版本库的完整性可以运行这个命令,这样会遍历版本库的所有的修订版本,导出修订版本并丢弃输出—有规律的执行这个命令来防止磁盘失败会是一个好方法,如果这个命令失败了—这是发生问题的第一个征兆—这表明你的版本库至少有一个损坏的修订版本,你必须从备份恢复损坏的修订版本(你需要备份,你没有吗?)。" #. (para) #: ../source/book.xml:21696 @@ -24098,31 +24089,31 @@ msgstr "" #: ../source/book.xml:21714 #, fuzzy msgid "svnlook is a command-line utility for examining different aspects of a Subversion repository. It does not make any changes to the repository—it's just used for peeking. svnlook is typically used by the repository hooks, but a repository administrator might find it useful for diagnostic purposes." -msgstr "svnlook是检验Subversion版本库不同方面的命令行工具,它不会对版本库有任何修改—它只是用来svnlook通常被版本库钩子使用,但是版本库管理也会发现它在诊断目的上也非常有用。" +msgstr "svnlook是检验Subversion版本库不同方面的命令行工具,它不会对版本库有任何修改—它只是用来svnlook通常被版本库钩子使用,但是版本库管理也会发现它在诊断目的上也非常有用。" #. (para) #: ../source/book.xml:21721 #, fuzzy msgid "Since svnlook works via direct repository access (and thus can only be used on the machine that holds the repository), it refers to the repository with a path, not a URL." -msgstr "因为svnlook通过直接版本库访问(因此只可以在保存版本库的机器上工作)工作,所以他通过版本库的路径访问,而不是URL。" +msgstr "因为svnlook通过直接版本库访问(因此只可以在保存版本库的机器上工作)工作,所以他通过版本库的路径访问,而不是URL。" #. (para) #: ../source/book.xml:21724 #, fuzzy msgid "If no revision or transaction is specified, svnlook defaults to the youngest (most recent) revision of the repository." -msgstr "如果没有指定修订版本或事物,svnlook缺省的是版本库最年轻的(最新的)修订版本。" +msgstr "如果没有指定修订版本或事物,svnlook缺省的是版本库最年轻的(最新的)修订版本。" #. (title) #: ../source/book.xml:21730 #, fuzzy msgid "svnlook Options" -msgstr "svnlook 选项" +msgstr "svnlook 选项" #. (para) #: ../source/book.xml:21732 #, fuzzy msgid "Options in svnlook are global, just like in svn and svnadmin; however, most options only apply to one subcommand since the functionality of svnlook is (intentionally) limited in scope." -msgstr "svnlook的选项是全局的,就像svnsvnadmin;然而,大多数选项只会应用到一个子命令,因为svnlook的功能是(有意的)限制在一定范围的。" +msgstr "svnlook的选项是全局的,就像svnsvnadmin;然而,大多数选项只会应用到一个子命令,因为svnlook的功能是(有意的)限制在一定范围的。" #. (para) #: ../source/book.xml:21744 @@ -24175,7 +24166,7 @@ msgstr "显示文件系统树中每条路径的文件系统节点修订版本ID #: ../source/book.xml:21805 #, fuzzy msgid "svnlook Subcommands" -msgstr "svnlook 子命令" +msgstr "svnlook 子命令" #. (tertiary) #: ../source/book.xml:21811 @@ -24221,7 +24212,7 @@ msgstr "" #: ../source/book.xml:21843 #, fuzzy msgid "svnlook author is handy, but not very exciting:" -msgstr "svnlook author垂手可得,但是并不令人激动:" +msgstr "svnlook author垂手可得,但是并不令人激动:" #. (screen) #: ../source/book.xml:21845 @@ -24319,8 +24310,9 @@ msgstr "打印在特定修订版本或事物修改的路径,也是在前两列 #. (term) #: ../source/book.xml:21932 +#, fuzzy msgid "'A '" -msgstr "'A '" +msgstr "'A '" #. (para) #: ../source/book.xml:21934 @@ -24329,8 +24321,9 @@ msgstr "条目添加到版本库。" #. (term) #: ../source/book.xml:21938 +#, fuzzy msgid "'D '" -msgstr "'D '" +msgstr "'D '" #. (para) #: ../source/book.xml:21940 @@ -24339,8 +24332,9 @@ msgstr "条目从版本库删除。" #. (term) #: ../source/book.xml:21944 +#, fuzzy msgid "'U '" -msgstr "'U '" +msgstr "'U '" #. (para) #: ../source/book.xml:21946 @@ -24349,8 +24343,9 @@ msgstr "文件内容改变了。" #. (term) #: ../source/book.xml:21950 +#, fuzzy msgid "' U'" -msgstr "' U'" +msgstr "'A '" #. (para) #: ../source/book.xml:21952 @@ -24360,8 +24355,9 @@ msgstr "条目属性改变了。" #. (term) #: ../source/book.xml:21956 +#, fuzzy msgid "'UU'" -msgstr "'UU'" +msgstr "'UU'" #. (para) #: ../source/book.xml:21958 @@ -24377,11 +24373,11 @@ msgstr "文件和目录可以区分,目录路径后面会显示字符'/:" -msgstr "" +msgstr "这里显示了在测试版本库中修订版本39改变的文件和目录,注意修改的第一个项目是一个目录,证据就是结尾的/:" #. (screen) #: ../source/book.xml:21983 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "$ svnlook changed -r 39 /usr/local/svn/repos\n" @@ -24401,7 +24397,7 @@ msgstr "" "A trunk/vendors/deli/sandwich.txt\n" "A trunk/vendors/deli/pickle.txt\n" "U trunk/vendors/baker/bagel.txt\n" -" U trunk/vendors/baker/croissant.txt\n" +"_U trunk/vendors/baker/croissant.txt\n" "UU trunk/vendors/baker/pretzel.txt\n" "D trunk/vendors/baker/baguette.txt\n" @@ -24606,7 +24602,7 @@ msgstr "Also svnlook -h and svnlook -?." #: ../source/book.xml:22174 #, fuzzy msgid "Displays the help message for svnlook. This command, like its brother svn help, is also your friend, even though you never call it anymore and forgot to invite it to your last party." -msgstr "显示svnlook的帮助信息,这个命令如同svn help的兄弟,也是你的朋友,即使你从不调用它,并且忘掉了邀请它加入你的上一次聚会。" +msgstr "显示svnlook的帮助信息,这个命令如同svn help的兄弟,也是你的朋友,即使你从不调用它,并且忘掉了邀请它加入你的上一次聚会。" #. (tertiary) #: ../source/book.xml:22190 @@ -25123,39 +25119,40 @@ msgstr "" #: ../source/book.xml:22641 #, fuzzy msgid "svnsync is the Subversion remote repository mirroring tool. Put simply, it allows you to replay the revisions of one repository into another one." -msgstr "运行svn commit将更改提交到版本库中。" +msgstr "运行svn commit将更改提交到版本库中。" #. (para) #: ../source/book.xml:22644 msgid "In any mirroring scenario, there are two repositories: the source repository, and the mirror (or sink) repository. The source repository is the repository from which svnsync pulls revisions. The mirror repository is the destination for the revisions pulled from the source repository. Each of the repositories may be local or remote—they are only ever addressed by their URLs." -msgstr "" +msgstr "在任何镜像场景中,有两个版本库:源版本库,镜像(或sink)版本库,源版本库就是svnsync获取修订版本的库,镜像版本库是源版本库修订版本的目标,两个版本库可以是在本地或远程—它们只是通过URL跟踪。" #. (para) #: ../source/book.xml:22651 msgid "The svnsync process requires only read access to the source repository; it never attempts to modify it. But obviously, svnsync requires both read and write access to the mirror repository." -msgstr "" +msgstr "svnsync进程只需要对源版本库有读权限;它不会尝试修改它。但是很明显,svnsync可以读写访问镜像版本库。" #. (para) #: ../source/book.xml:22656 msgid "svnsync is very sensitive to changes made in the mirror repository that weren't made as part of a mirroring operation. To prevent this from happening, it's best if the svnsync process is the only process permitted to modify the mirror repository." -msgstr "" +msgstr "svnsync对于不能作为镜像操作一部分的修改非常敏感,为了防止发生这个情况,最好保证svnsync是唯一可以修改镜像版本库的进程。" #. (title) #: ../source/book.xml:22665 #, fuzzy msgid "svnsync Options" -msgstr "svn 选项" +msgstr "svn 选项" #. (title) #: ../source/book.xml:22732 #, fuzzy msgid "svnsync Subcommands" -msgstr "svn 子命令" +msgstr "svn 子命令" #. (tertiary) #: ../source/book.xml:22739 +#, fuzzy msgid "copy-revprops" -msgstr "copy-revprops" +msgstr "--revprop" #. (refname) #: ../source/book.xml:22742 @@ -25165,7 +25162,7 @@ msgstr "svnsync copy-revprops" #. (refpurpose) #: ../source/book.xml:22743 msgid "Copy all revision properties for a given revision from the source repository to the mirror repository." -msgstr "" +msgstr "从源版本库拷贝所有的修订版本属性到镜像版本库。" #. (programlisting) #: ../source/book.xml:22751 @@ -25176,7 +25173,7 @@ msgstr "svnsync copy-revprops DEST_URL REV" #. (para) #: ../source/book.xml:22757 msgid "Because Subversion revision properties can be changed at any time, it's possible that the properties for some revision might be changed after that revision has already been synchronized to another repository. Because the svnsync synchronize command operates only on the range of revisions that have not yet been synchronized, it won't notice a revision property change outside that range. Left as is, this causes a deviation in the values of that revision's properties between the source and mirror repositories. svnsync copy-revprops is the answer to this problem. Use it to re-synchronize the revision properties for a particular revision." -msgstr "" +msgstr "因为Subversion修订版本属性可以在任何时候修改,很有可能有一些修订版本的属性会在已经同步后改变,因为svnsync synchronize不会对没有同步的修订版本范围进行操作,而不会注意修改范围之外的属性修改。这样导致了修订版本属性在源版本库与目标版本库的偏离,svnsync copy-revprops是这个问题的答案,用它可以同步特定修订版本的属性。" #. (screen) #: ../source/book.xml:22781 ../source/book.xml:22842 ../source/book.xml:22912 @@ -25199,7 +25196,7 @@ msgstr "" #. (para) #: ../source/book.xml:22793 msgid "Re-synchronize revision properties for a single revision:" -msgstr "" +msgstr "为单个修订版本重新同步修订版本属性:" #. (screen) #: ../source/book.xml:22794 @@ -25229,7 +25226,7 @@ msgstr "svnsync initialize" #. (refpurpose) #: ../source/book.xml:22809 msgid "Initialize a destination repository for synchronization from another repository." -msgstr "" +msgstr "为与另一个版本库的同步初而始化目标版本库。" #. (programlisting) #: ../source/book.xml:22816 @@ -25240,7 +25237,7 @@ msgstr "svnsync initialize DEST_URL SOURCE_URL" #. (para) #: ../source/book.xml:22822 msgid "svnsync initialize verifies that a repository meets the requirements of a new mirror repository—that it has no previous existing version history, and that it allows revision property modifications—and records the initial administrative information which associates the mirror repository with the source repository. This is the first svnsync operation you run on a would-be mirror repository." -msgstr "" +msgstr "svnsync initialize检验版本库是否满足了新镜像版本库的需求—它必须没有存在的版本历史,并允许修订版本修改—记录镜像版本库与源版本库关联的初始管理信息,这是对即将镜像的版本库的第一个svnsync操作。" #. (para) #: ../source/book.xml:22836 @@ -25250,7 +25247,7 @@ msgstr "init" #. (para) #: ../source/book.xml:22854 msgid "Fail to initialize a mirror repository due to inability to modify revision properties:" -msgstr "" +msgstr "因为无法修改修订版本属性而初始化镜像版本库失败:" #. (screen) #: ../source/book.xml:22856 @@ -25271,7 +25268,7 @@ msgstr "" #. (para) #: ../source/book.xml:22862 msgid "Initialize a repository as a mirror, having already created a pre-revprop-change hook which permits all revision property changes:" -msgstr "" +msgstr "以镜像初始化版本库,包含已创建允许所有修订版本属性修改的pre-revprop-change钩子:" #. (screen) #: ../source/book.xml:22865 @@ -25300,7 +25297,7 @@ msgstr "svnsync synchronize" #. (refpurpose) #: ../source/book.xml:22880 msgid "Transfer all pending revisions from the source repository to the mirror repository." -msgstr "" +msgstr "将所有未完成的修订版本从源版本库转移到镜像版本库。" #. (programlisting) #: ../source/book.xml:22887 @@ -25311,27 +25308,28 @@ msgstr "svnsync synchronize DEST_URL" #. (para) #: ../source/book.xml:22893 msgid "The svnsync synchronize command does all the heavy lifting of a repository mirroring operation. After consulting with the mirror repository to see which revisions have already been copied into it, it then begins copying any not-yet-mirrored revisions from the source repository." -msgstr "" +msgstr "svnsync synchronize命令做了版本库镜像工作的所有体力活,通过讯问镜像版本库来查看已经拷贝的修订版本,然后开始拷贝未镜像修订版本到镜像版本库。" #. (para) #: ../source/book.xml:22899 #, fuzzy msgid "svnsync synchronize can be gracefully cancelled and restarted." -msgstr "svn 子命令" +msgstr "svn 子命令" #. (para) #: ../source/book.xml:22906 +#, fuzzy msgid "sync" -msgstr "sync" +msgstr "svnsync" #. (para) #: ../source/book.xml:22924 msgid "Copy unsynchronized revisions from the source repository to the mirror repository:" -msgstr "" +msgstr "从源版本库拷贝未同步修订版本到镜像版本库:" #. (screen) #: ../source/book.xml:22926 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "$ svnsync synchronize file:///opt/svn/repos-mirror\n" @@ -25351,7 +25349,13 @@ msgid "" "$\n" msgstr "" "\n" -"$ svnsync synchronize file:///opt/svn/repos-mirror\n" +"$ svnsync help synchronize\n" +"synchronize (sync): usage: svnsync synchronize DEST_URL\n" +"\n" +"Transfer all pending revisions from source to destination.\n" +"…\n" +"$ svnsync synchronize http://svn.example.com/svn-mirror \\\n" +" --username syncuser --password syncpass\n" "Committed revision 1.\n" "Copied properties for revision 1.\n" "Committed revision 2.\n" @@ -25359,43 +25363,42 @@ msgstr "" "Committed revision 3.\n" "Copied properties for revision 3.\n" "…\n" -"Committed revision 45.\n" -"Copied properties for revision 45.\n" -"Committed revision 46.\n" -"Copied properties for revision 46.\n" -"Committed revision 47.\n" -"Copied properties for revision 47.\n" -"$\n" +"Committed revision 23406.\n" +"Copied properties for revision 23406.\n" +"Committed revision 23407.\n" +"Copied properties for revision 23407.\n" +"Committed revision 23408.\n" +"Copied properties for revision 23408.\n" #. (para) #: ../source/book.xml:22956 #, fuzzy msgid "svnserve allows access to Subversion repositories using Subversion's custom network protocol." -msgstr "当对远程源版本库使用svnsync时,Subversion版本库的服务器必须是Subversion1.4或更高的版本。" +msgstr "当对远程源版本库使用svnsync时,Subversion版本库的服务器必须是Subversion1.4或更高的版本。" #. (para) #: ../source/book.xml:22958 #, fuzzy msgid "You can run svnserve as a standalone server process (for clients that are using the svn:// access method); you can have a daemon such as inetd or xinetd launch it for you on demand (also for svn://), or you can have sshd launch it on demand for the svn+ssh:// access method." -msgstr "svnserve允许Subversion版本库使用svn网络协议,你可以作为独立服务器进程运行svnserve,或者是使用其它进程,如inetdxinetdsshd为你启动进程。" +msgstr "svnserve允许Subversion版本库使用svn网络协议,你可以作为独立服务器进程运行svnserve,或者是使用其它进程,如inetdxinetdsshd为你启动进程。" #. (para) #: ../source/book.xml:22966 #, fuzzy msgid "Regardless of the access method, once the client has selected a repository by transmitting its URL, svnserve reads a file named conf/svnserve.conf in the repository directory to determine repository-specific settings such as what authentication database to use and what authorization policies to apply. See for details of the svnserve.conf file." -msgstr "一旦客户端已经选择了一个版本库来传递它的URL,svnserve会读取版本库目录的conf/svnserve.conf文件,来检测版本库特定的设置,如使用哪个认证数据库和应用怎样的授权策略。关于svnserve.conf文件的详情见。" +msgstr "一旦客户端已经选择了一个版本库来传递它的URL,svnserve会读取版本库目录的conf/svnserve.conf文件,来检测版本库特定的设置,如使用哪个认证数据库和应用怎样的授权策略。关于svnserve.conf文件的详情见。" #. (title) #: ../source/book.xml:22977 #, fuzzy msgid "svnserve Options" -msgstr "svnserve 选项" +msgstr "svnserve 选项" #. (para) #: ../source/book.xml:22979 #, fuzzy msgid "Unlike the previous commands we've described, svnserve has no subcommands—svnserve is controlled exclusively by options." -msgstr "不象前面描述的例子,svnserve没有子命令—svnserve完全通过选项控制。" +msgstr "不象前面描述的例子,svnserve没有子命令—svnserve完全通过选项控制。" #. (term) #: ../source/book.xml:22985 @@ -25406,7 +25409,7 @@ msgstr " ()" #: ../source/book.xml:22987 #, fuzzy msgid "Causes svnserve to run in daemon mode. svnserve backgrounds itself and accepts and serves TCP/IP connections on the svn port (3690, by default)." -msgstr "导致svnserve以守护进程方式运行,svnserve维护本身并且接受和服务svn端口(缺省3690)的TCP/IP连接。" +msgstr "导致svnserve以守护进程方式运行,svnserve维护本身并且接受和服务svn端口(缺省3690)的TCP/IP连接。" #. (term) #: ../source/book.xml:22994 @@ -25428,7 +25431,7 @@ msgstr "=HOST" #: ../source/book.xml:23005 #, fuzzy msgid "Causes svnserve to listen on the interface specified by HOST, which may be either a hostname or an IP address." -msgstr "svnserve监听的HOST,可能是一个主机名或是一个IP地址。" +msgstr "svnserve监听的HOST,可能是一个主机名或是一个IP地址。" #. (option) #: ../source/book.xml:23012 @@ -25439,7 +25442,7 @@ msgstr "--foreground" #: ../source/book.xml:23015 #, fuzzy msgid "When used together with , this option causes svnserve to stay in the foreground. This option is mainly useful for debugging." -msgstr "当与一起使用,会导致svnserve停留在前台,主要用来调试。" +msgstr "当与一起使用,会导致svnserve停留在前台,主要用来调试。" #. (term) #: ../source/book.xml:23022 @@ -25450,7 +25453,7 @@ msgstr " ()" #: ../source/book.xml:23024 #, fuzzy msgid "Causes svnserve to use the stdin/stdout file descriptors, as is appropriate for a daemon running out of inetd." -msgstr "导致svnserve使用标准输出/标准输入文件描述符,更准确的是使用inetd作为守护进程。" +msgstr "导致svnserve使用标准输出/标准输入文件描述符,更准确的是使用inetd作为守护进程。" #. (term) #: ../source/book.xml:23030 ../source/book.xml:23177 @@ -25476,7 +25479,7 @@ msgstr "=ROOT ( ()" #: ../source/book.xml:23058 #, fuzzy msgid "Causes svnserve to run in tunnel mode, which is just like the inetd mode of operation (both modes serve one connection over stdin/stdout, then exit), except that the connection is considered to be pre-authenticated with the username of the current uid. This flag is automatically passed for you by the client when running over a tunnel agent such as ssh. That means there's rarely any need for you to pass this option to svnserve. So if you find yourself typing svnserve --tunnel on the command line, and wondering what to do next, see ." -msgstr "导致svnserve以管道模式运行,很像inetd操作的模式(服务于一个标准输入/标准输出的连接),除了连接是用当前uid的用户名预先认证过的这一点。这个选项在客户端使用如ssh之类的管道时使用。" +msgstr "导致svnserve以管道模式运行,很像inetd操作的模式(服务于一个标准输入/标准输出的连接),除了连接是用当前uid的用户名预先认证过的这一点。这个选项在客户端使用如ssh之类的管道时使用。" #. (option) #: ../source/book.xml:23076 @@ -25509,7 +25512,7 @@ msgstr " ()" #: ../source/book.xml:23091 #, fuzzy msgid "When running in daemon mode, causes svnserve to spawn a thread instead of a process for each connection (e.g. for when running on Windows). The svnserve process still backgrounds itself at startup time." -msgstr "当以守护进程模式运行,导致svnserve为每个连接产生一个线程而不是一个进程,svnserve进程本身在启动后会一直在后台。" +msgstr "当以守护进程模式运行,导致svnserve为每个连接产生一个线程而不是一个进程,svnserve进程本身在启动后会一直在后台。" #. (term) #: ../source/book.xml:23099 @@ -25520,7 +25523,7 @@ msgstr " ()" #: ../source/book.xml:23101 #, fuzzy msgid "Causes svnserve to accept one connection on the svn port, serve it, and exit. This option is mainly useful for debugging." -msgstr "导致svnserve在svn端口接受一个连接,维护完成它退出。这个选项主要用来调试。" +msgstr "导致svnserve在svn端口接受一个连接,维护完成它退出。这个选项主要用来调试。" #. (refpurpose) #: ../source/book.xml:23124 @@ -25537,12 +25540,12 @@ msgstr "svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]" #: ../source/book.xml:23137 #, fuzzy msgid "svnversion is a program for summarizing the revision mixture of a working copy. The resultant revision number, or revision range, is written to standard output." -msgstr "svnversion是用来总结工作拷贝修订版本混合的程序,结果修订版本号或范围会写到标准输出。" +msgstr "svnversion是用来总结工作拷贝修订版本混合的程序,结果修订版本号或范围会写到标准输出。" #. (para) #: ../source/book.xml:23141 msgid "It's common to use this output in your build process when defining the version number of your program." -msgstr "" +msgstr "通常在构建过程中利用其输出定义程序的版本号码。" #. (para) #: ../source/book.xml:23143 @@ -25559,7 +25562,7 @@ msgstr "当没有定义WC_PATH,会使用当前路径作为工作拷贝路径 #: ../source/book.xml:23159 #, fuzzy msgid "Like svnserve, svnversion has no subcommands, it only has options." -msgstr "像svnservesvnversion没有子命令,只有选项。" +msgstr "像svnservesvnversion没有子命令,只有选项。" #. (term) #: ../source/book.xml:23164 @@ -25590,7 +25593,7 @@ msgstr "打印帮助摘要。" #: ../source/book.xml:23187 #, fuzzy msgid "Print the version of svnversion and exit with no error." -msgstr "打印svnversion,如果没有错误退出。" +msgstr "打印svnversion,如果没有错误退出。" #. (para) #: ../source/book.xml:23197 @@ -25699,7 +25702,7 @@ msgstr "" #: ../source/book.xml:23236 #, fuzzy msgid "If invoked on a directory that is not a working copy, svnversion assumes it is an exported working copy and prints \"exported\":" -msgstr "如果从一个目录而不是工作拷贝调用,svnversion假定它是一个导出的工作拷贝并且打印\"exported\":" +msgstr "如果从一个目录而不是工作拷贝调用,svnversion假定它是一个导出的工作拷贝并且打印\"exported\":" #. (screen) #: ../source/book.xml:23239 @@ -25864,7 +25867,7 @@ msgstr "svn:ignore" #: ../source/book.xml:23430 #, fuzzy msgid "If present on a directory, the value is a list of unversioned file patterns to be ignored by svn status and other subcommands. See " -msgstr "如果出现在目录上,这是一组svn status可以忽略的未版本化文件的名称模式,见。" +msgstr "如果出现在目录上,这是一组svn status可以忽略的未版本化文件的名称模式,见。" #. (literal) #: ../source/book.xml:23439 @@ -25905,7 +25908,7 @@ msgstr "svn:special" #. (para) #: ../source/book.xml:23477 msgid "As of this writing, symbolic links are indeed the only special objects. But there might be more in future releases of Subversion." -msgstr "" +msgstr "此时,符号链是唯一的特别对象,但是以后,也许Subversion会有更多的特别对象。" #. (para) #: ../source/book.xml:23475 @@ -26324,7 +26327,7 @@ msgstr "Subversion 快速入门指南" #. (para) #: ../source/book.xml:24025 msgid "If you're eager to get Subversion up and running (and you enjoy learning by experimentation), this chapter will show you how to create a repository, import code, and then check it back out again as a working copy. Along the way, we give links to the relevant chapters of this book." -msgstr "" +msgstr "如果你渴望快速配置Subversion并运行(而且你喜欢通过实验学习),本章会展示如何创建版本库,导入代码,然后以工作拷贝检出,继续我们会给出本书的相关章节的链接。" #. (para) #: ../source/book.xml:24031 @@ -26413,7 +26416,7 @@ msgstr "这是一个非常高层次的教程,能够帮助你熟悉Subversion #: ../source/book.xml:24135 #, fuzzy msgid "The examples used in this appendix assume that you have svn, the Subversion command-line client, and svnadmin, the administrative tool, ready to go on a Unix-like operating system. (This tutorial also works at the Windows commandline prompt, assuming you make some obvious tweaks.) We also assume you are using Subversion 1.2 or later (run svn --version to check.)" -msgstr "运行下面的例子需要首先正确安装Subversion客户端程序svn以及管理工具svnadmin,并且必须为1.2或更新版本的Subversion程序(可以运行svn --version来检查Subversion的版本。)" +msgstr "运行下面的例子需要首先正确安装Subversion客户端程序svn以及管理工具svnadmin,并且必须为1.2或更新版本的Subversion程序(可以运行svn --version来检查Subversion的版本。)" #. (para) #: ../source/book.xml:24144 @@ -26483,7 +26486,7 @@ msgstr "branchessvn import command (see ):" -msgstr "准备好了数据之后,就可以使用svn import命令(参见)将其导入到版本库中:" +msgstr "准备好了数据之后,就可以使用svn import命令(参见)将其导入到版本库中:" #. (screen) #: ../source/book.xml:24201 @@ -26560,19 +26563,19 @@ msgstr "进入工作拷贝目录,编辑某个文件的内容。" #: ../source/book.xml:24245 #, fuzzy msgid "Run svn diff to see unified diff output of your changes." -msgstr "运行svn diff以标准差别格式查看修改的内容。" +msgstr "运行svn diff以标准差别格式查看修改的内容。" #. (para) #: ../source/book.xml:24249 #, fuzzy msgid "Run svn commit to commit the new version of your file to the repository." -msgstr "运行svn commit将更改提交到版本库中。" +msgstr "运行svn commit将更改提交到版本库中。" #. (para) #: ../source/book.xml:24253 #, fuzzy msgid "Run svn update to bring your working copy up-to-date with the repository." -msgstr "运行svn update更新工作拷贝。" +msgstr "运行svn update更新工作拷贝。" #. (para) #: ../source/book.xml:24257 @@ -26623,7 +26626,7 @@ msgstr "技术上讲,谈论文件foo.c/branches or /tags directories that appear at the top level of the repository, beside /trunk). In the repository as a whole, many versions of each file may be visible: the latest version on each branch, every tagged version, and of course the latest version on the trunk itself. So, to refine the terms even further, one would often say foo.c as it appears in /branches/REL1 in revision 5." -msgstr "" +msgstr "类似的,在CVS中标签或分支是文件的一种标注,或者是单个文件的版本信息,而在Subversion中,标签和分支是整个目录树的拷贝(为了方便,进入版本库顶级目录的/branches/tags子目录,/trunk旁边)。版本库作为一个整体,每个文件的许多版本可见:每个分支的最新版本,每个标签的最新版本以及trunk本身的最新版本。所以,我们再精炼一下术语,我们说foo.c在修订版本5出现在/branches/REL1" #. (para) #: ../source/book.xml:24326 @@ -26649,7 +26652,7 @@ msgstr "以下是对你这意味着什么的说明,作为一个前CVS用户: #: ../source/book.xml:24341 #, fuzzy msgid "The svn add and svn delete commands work on directories now, just as they work on files. So do svn copy and svn move. However, these commands do not cause any kind of immediate change in the repository. Instead, the working items are simply scheduled for addition or deletion. No repository changes happen until you run svn commit." -msgstr "svn addsvn delete现在也工作在目录上了,就像在文件上一样,还有svn copysvn move也一样。然而,这些命令会导致版本库即时的变化,相反,工作的项目只是预定要添加和删除,在运行svn commit之前没有版本库的修改。" +msgstr "svn addsvn delete现在也工作在目录上了,就像在文件上一样,还有svn copysvn move也一样。然而,这些命令会导致版本库即时的变化,相反,工作的项目只是预定要添加和删除,在运行svn commit之前没有版本库的修改。" #. (para) #: ../source/book.xml:24352 @@ -26672,7 +26675,7 @@ msgstr "从理论观点,我们定义目录f #: ../source/book.xml:24373 #, fuzzy msgid "Subversion deals with this problem by quietly tracking committed adds and deletes in the .svn area. When you eventually run svn update, all accounts are settled with the repository, and the directory's new revision number is set correctly. Therefore, only after an update is it truly safe to say that you have a perfect revision of a directory. Most of the time, your working copy will contain imperfect directory revisions." -msgstr "Subversion通过在.svn区域偷偷的纪录添加和删除来处理这些问题,当你最后运行svn update,所有的账目会到版本库结算,并且目录的新修订版本号会正确设置。因此,只有在更新之后才可以真正安全地说我们有了一个完美的修订版本目录。在大多数时候,你的工作拷贝会保存不完美的目录修订版本。" +msgstr "Subversion通过在.svn区域偷偷的纪录添加和删除来处理这些问题,当你最后运行svn update,所有的账目会到版本库结算,并且目录的新修订版本号会正确设置。因此,只有在更新之后才可以真正安全地说我们有了一个完美的修订版本目录。在大多数时候,你的工作拷贝会保存不完美的目录修订版本。" #. (para) #: ../source/book.xml:24382 @@ -26724,7 +26727,7 @@ msgstr "另外,原始文件的缓存允许Subversion客户端在提交时只 #: ../source/book.xml:24437 #, fuzzy msgid "The last subcommand in the list is new; it will not only remove local changes, but it will un-schedule operations such as adds and deletes. It's the preferred way to revert a file; running rm file; svn update will still work, but it blurs the purpose of updating. And, while we're on this subject…" -msgstr "列表中最后一个子命令是新的;它不仅仅删除本地修改,也会取消如增加和删除的预定操作,这是恢复文件推荐的方式;运行rm file; svn update还可以工作,但是这样侮辱了更新操作的作用,而且,我们在这个主题…" +msgstr "列表中最后一个子命令是新的;它不仅仅删除本地修改,也会取消如增加和删除的预定操作,这是恢复文件推荐的方式;运行rm file; svn update还可以工作,但是这样侮辱了更新操作的作用,而且,我们在这个主题…" #. (title) #: ../source/book.xml:24451 @@ -26735,19 +26738,19 @@ msgstr "区分状态和更新" #: ../source/book.xml:24453 #, fuzzy msgid "In Subversion, we've tried to erase a lot of the confusion between the cvs status and cvs update commands." -msgstr "在Subversion,我们已经设法抹去cvs statuscvs update之间的混乱。" +msgstr "在Subversion,我们已经设法抹去cvs statuscvs update之间的混乱。" #. (para) #: ../source/book.xml:24456 #, fuzzy msgid "The cvs status command has two purposes: first, to show the user any local modifications in the working copy, and second, to show the user which files are out-of-date. Unfortunately, because of CVS's hard-to-read status output, many CVS users don't take advantage of this command at all. Instead, they've developed a habit of running cvs update or cvs -n update to quickly see their changes. If users forget to use the option, this has the side effect of merging repository changes they may not be ready to deal with." -msgstr "cvs status命令有两个目的:第一,显示用户在工作拷贝的所有本地修改,第二,显示给用户哪些文件是最新的。很不幸,因为CVS难以阅读的状态输出,许多CVS用户并没有充分利用这个命令的好处。相反,他们慢慢习惯运行cvs updatecvs -n update来快速查看区别,如果用户忘记使用选项,副作用就是将还没有准备好处理的版本库修改合并到工作拷贝。" +msgstr "cvs status命令有两个目的:第一,显示用户在工作拷贝的所有本地修改,第二,显示给用户哪些文件是最新的。很不幸,因为CVS难以阅读的状态输出,许多CVS用户并没有充分利用这个命令的好处。相反,他们慢慢习惯运行cvs updatecvs -n update来快速查看区别,如果用户忘记使用选项,副作用就是将还没有准备好处理的版本库修改合并到工作拷贝。" #. (para) #: ../source/book.xml:24467 #, fuzzy msgid "With Subversion, we've tried to remove this muddle by making the output of svn status easy to read for both humans and parsers. Also, svn update only prints information about files that are updated, not local modifications." -msgstr "对于Subversion,我们通过修改svn status的输出使之同时满足阅读和解析的需要来努力消除这种混乱,同样,svn update只会打印将要更新的文件信息,而不是本地修改。" +msgstr "对于Subversion,我们通过修改svn status的输出使之同时满足阅读和解析的需要来努力消除这种混乱,同样,svn update只会打印将要更新的文件信息,而不是本地修改。" #. (title) #: ../source/book.xml:24474 @@ -26758,7 +26761,7 @@ msgstr "状态" #: ../source/book.xml:24476 #, fuzzy msgid "svn status prints all files that have local modifications. By default, the repository is not contacted. While this subcommand accepts a fair number of options, the following are the most commonly used ones:" -msgstr "svn status打印所有本地修改的文件,缺省情况下,不会联系版本库,然而这个命令接受一些选项,如下是一些最常用的:" +msgstr "svn status打印所有本地修改的文件,缺省情况下,不会联系版本库,然而这个命令接受一些选项,如下是一些最常用的:" #. (option) #: ../source/book.xml:24483 @@ -26794,7 +26797,7 @@ msgstr "非递归方式运行(不会访问子目录)。" #: ../source/book.xml:24509 #, fuzzy msgid "The status command has two output formats. In the default short format, local modifications look like this:" -msgstr "status命令有两种输出格式,缺省是格式,本地修改像这样:" +msgstr "status命令有两种输出格式,缺省是格式,本地修改像这样:" #. (screen) #: ../source/book.xml:24512 @@ -26852,7 +26855,7 @@ msgstr "在这个例子里,出现了两列,第二列的星号表示了文件 #. (para) #: ../source/book.xml:24544 msgid "At this point, you should take a quick look at the list of all possible status codes in . Here are a few of the more common status codes you'll see:" -msgstr "" +msgstr "此刻,你必须赶快看一下中所说的可能属性代码,下面是一些你会看到的常用状态代码:" #. (screen) #: ../source/book.xml:24548 @@ -26886,7 +26889,7 @@ msgstr "" #: ../source/book.xml:24560 #, fuzzy msgid "For a more detailed discussion of svn status, see ." -msgstr "关于svn status的详细讨论,见。" +msgstr "关于svn status的详细讨论,见。" #. (title) #: ../source/book.xml:24565 @@ -26897,7 +26900,7 @@ msgstr "更新" #: ../source/book.xml:24567 #, fuzzy msgid "svn update updates your working copy, and only prints information about files that it updates." -msgstr "svn update会更新你的工作拷贝,只打印这次更新的文件。" +msgstr "svn update会更新你的工作拷贝,只打印这次更新的文件。" #. (para) #: ../source/book.xml:24569 @@ -26909,7 +26912,7 @@ msgstr "Subversion将CVS的Psvn update, see ." -msgstr "关于svn update的详细讨论,见。" +msgstr "关于svn update的详细讨论,见。" #. (title) #: ../source/book.xml:24583 @@ -26946,7 +26949,7 @@ msgstr "Subversion的一个新特性就是你可以对文件和目录任意附 #: ../source/book.xml:24617 #, fuzzy msgid "To set or get a property name, use the svn propset and svn propget subcommands. To list all properties on an object, use svn proplist." -msgstr "为了设置或得到一个属性名称,使用svn propsetsvn propget子命令,列出对象所有的属性,使用svn proplist。" +msgstr "为了设置或得到一个属性名称,使用svn propsetsvn propget子命令,列出对象所有的属性,使用svn proplist。" #. (para) #: ../source/book.xml:24621 @@ -26968,7 +26971,7 @@ msgstr "CVS使用内联冲突标志来标记冲突,并且在更 #: ../source/book.xml:24638 #, fuzzy msgid "Subversion solves this problem by making conflicts more tangible. It remembers that a file is in a state of conflict, and won't allow you to commit your changes until you run svn resolved. See for more details." -msgstr "Subversion通过让冲突更明显来解决这个问题,它记住一个文件是处于冲突状态,在你运行svn resolved之前不会允许你提交修改,详情见。" +msgstr "Subversion通过让冲突更明显来解决这个问题,它记住一个文件是处于冲突状态,在你运行svn resolved之前不会允许你提交修改,详情见。" #. (title) #: ../source/book.xml:24648 @@ -26994,13 +26997,13 @@ msgstr "Subversion使用更加异想天开的方法—第一,如果你不明 #: ../source/book.xml:24667 #, fuzzy msgid "Second, Subversion maintains an internal notion of whether a file is text or binary data, but this notion is only extant in the working copy. During an svn update, Subversion will perform contextual merges on locally modified text files, but will not attempt to do so for binary files." -msgstr "第二,Subversion维护了一个内部的概念来区别一个文件是文本还是二进制文件,但这个概念在工作拷贝非常重要,在svn update,Subversion会对本地修改的文本文件执行上下文的合并,但是对二进制文件不会。" +msgstr "第二,Subversion维护了一个内部的概念来区别一个文件是文本还是二进制文件,但这个概念在工作拷贝非常重要,在svn update,Subversion会对本地修改的文本文件执行上下文的合并,但是对二进制文件不会。" #. (para) #: ../source/book.xml:24673 #, fuzzy msgid "To determine whether a contextual merge is possible, Subversion examines the svn:mime-type property. If the file has no svn:mime-type property, or has a mime-type that is textual (e.g. text/*), Subversion assumes it is text. Otherwise, Subversion assumes the file is binary. Subversion also helps users by running a binary-detection algorithm in the svn import and svn add commands. These commands will make a good guess and then (possibly) set a binary svn:mime-type property on the file being added. (If Subversion guesses wrong, the user can always remove or hand-edit the property.)" -msgstr "为了检测一个上下文的合并是可能的,Subversion检测svn:mime-type属性,如果没有svn:mime-type属性,或者这个属性是文本的(例如text/*),Subversion会假定它是文本的,否则Subversion认为它是二进制文件。Subversion也会在svn importsvn add命令时通过运行一个二进制检测算法来帮助用户。这些命令会做出很好的猜测,然后(如果可能)设置添加文件的svn:mime-type属性。(如果Subversion猜测错误,用户可以删除或手工编辑这个属性。)" +msgstr "为了检测一个上下文的合并是可能的,Subversion检测svn:mime-type属性,如果没有svn:mime-type属性,或者这个属性是文本的(例如text/*),Subversion会假定它是文本的,否则Subversion认为它是二进制文件。Subversion也会在svn importsvn add命令时通过运行一个二进制检测算法来帮助用户。这些命令会做出很好的猜测,然后(如果可能)设置添加文件的svn:mime-type属性。(如果Subversion猜测错误,用户可以删除或手工编辑这个属性。)" #. (title) #: ../source/book.xml:24692 @@ -27011,7 +27014,7 @@ msgstr "版本化的模块" #: ../source/book.xml:24694 #, fuzzy msgid "Unlike CVS, a Subversion working copy is aware that it has checked out a module. That means that if somebody changes the definition of a module (e.g. adds or removes components), then a call to svn update will update the working copy appropriately, adding and removing components." -msgstr "不像CVS,Subversion工作拷贝会意识到它检出了一个模块,这意味着如果有人修改了模块的定义(例如添加和删除组件),然后一个对svn update的调用会适当的更新工作拷贝,添加或删除组件。" +msgstr "不像CVS,Subversion工作拷贝会意识到它检出了一个模块,这意味着如果有人修改了模块的定义(例如添加和删除组件),然后一个对svn update的调用会适当的更新工作拷贝,添加或删除组件。" #. (para) #: ../source/book.xml:24699 @@ -27027,7 +27030,7 @@ msgstr "认证" #: ../source/book.xml:24709 #, fuzzy msgid "With CVS's pserver, you are required to login to the server before any read or write operation—you sometimes even have to login for anonymous operations. With a Subversion repository using Apache httpd or svnserve as the server, you don't provide any authentication credentials at the outset—if an operation that you perform requires authentication, the server will challenge you for your credentials (whether those credentials are username and password, a client certificate, or even both). So if your repository is world-readable, you will not be required to authenticate at all for read operations." -msgstr "通过CVS的pserver,你需要在读写操作之前登陆到服务器—即使是匿名操作。Subversion版本库使用Apache的httpdsvnserve作为服务器,你不需要开始时提供认证凭证—如果一个操作需要认证,服务器会要求你的凭证(不管这凭证是用户名与密码,客户证书还是两个都有)。所以如果你的工作拷贝是全局可读的,在所有的读操作中不需要任何认证。" +msgstr "通过CVS的pserver,你需要在读写操作之前登陆到服务器—即使是匿名操作。Subversion版本库使用Apache的httpdsvnserve作为服务器,你不需要开始时提供认证凭证—如果一个操作需要认证,服务器会要求你的凭证(不管这凭证是用户名与密码,客户证书还是两个都有)。所以如果你的工作拷贝是全局可读的,在所有的读操作中不需要任何认证。" #. (para) #: ../source/book.xml:24721 @@ -27039,7 +27042,7 @@ msgstr "相对于CVS,Subversion会一直在磁盘(在你的svnserve server over an SSH tunnel, using the svn+ssh:// URL scheme. In that case, the ssh program unconditionally demands authentication just to start the tunnel." -msgstr "这个行为也有例外,当使用SSH管道的svnserve服务器时,使用svn+ssh://的URL模式这种情况下,ssh会在通道刚开始时无条件的要求认证。" +msgstr "这个行为也有例外,当使用SSH管道的svnserve服务器时,使用svn+ssh://的URL模式这种情况下,ssh会在通道刚开始时无条件的要求认证。" #. (title) #: ../source/book.xml:24736 @@ -27054,7 +27057,7 @@ msgstr "或许让CVS用户熟悉Subversion最好的办法就是让他们的项 #. (para) #: ../source/book.xml:24751 msgid "The most popular (and likely the most mature) conversion tool is cvs2svn (http://cvs2svn.tigris.org/), a Python script originally created by members of Subversion's own development community. This tool is meant to run exactly once: it scans your CVS repository multiple times and attempts to deduce commits, branches, and tags as best it can. When it finishes, the result is a either a Subversion repository or a portable Subversion dumpfile representing your code's history. See the website for detailed instructions and caveats." -msgstr "" +msgstr "最流行的(好像是最成熟的)转化工具是cvs2svn(http://cvs2svn.tigris.org/),它是最初由Subversion自己的开发社区成员开发的一个Python脚本:它会多次扫描你的CVS版本库,并尽可能尝试推断提交,分支和标签,当它结束时,结果是可以代表代码历史的Subversion版本库或可移植的Subversion转储文件,关于指令和警告的详细信息可以看网站。" #. (title) #: ../source/book.xml:24769 @@ -27124,7 +27127,7 @@ msgstr "首先,Subversion客户端不是一个完全实现的DeltaV客户端 #: ../source/book.xml:24846 #, fuzzy msgid "Second, mod_dav_svn is not a fully-realized DeltaV server. Many portions of the DeltaV specification were irrelevant to Subversion, and thus left unimplemented." -msgstr "其次,mod_dav_svn不是一个完全的DeltaV服务,许多与Subversion不相关的DeltaV规范还没有实现。" +msgstr "其次,mod_dav_svn不是一个完全的DeltaV服务,许多与Subversion不相关的DeltaV规范还没有实现。" #. (para) #: ../source/book.xml:24850 @@ -27158,7 +27161,7 @@ msgstr "因为有许多操作系统已经集成了WebDAV客户端,这个特性 #: ../source/book.xml:24897 #, fuzzy msgid "This scenario isn't fiction: it's real and it works, as of Subversion 1.2 and later. To activate autoversioning in mod_dav_svn, use the SVNAutoversioning directive within the httpd.conf Location block, like so:" -msgstr "这个场景不是小说:对于Subversion 1.2来说,是真实的和有效的。为了激活mod_dav_svn的自动版本化,需要使用httpd.conf中Location区块的SVNAutoversioning指示,例如:" +msgstr "这个场景不是小说:对于Subversion 1.2来说,是真实的和有效的。为了激活mod_dav_svn的自动版本化,需要使用httpd.conf中Location区块的SVNAutoversioning指示,例如:" #. (screen) #: ../source/book.xml:24903 @@ -27193,7 +27196,7 @@ msgstr "然而,在激活这个特性之前,需要理解你做的事情。Web #: ../source/book.xml:24923 #, fuzzy msgid "If you have a post-commit hook program that sends email, you may want to disable email generation either altogether, or on certain sections of the repository; it depends on whether you think the influx of emails will still prove to be valuable notifications or not. Also, a smart post-commit hook program can distinguish between a transaction created via autoversioning and one created through a normal svn commit. The trick is to look for a revision property named svn:autoversioned. If present, the commit was made by a generic WebDAV client." -msgstr "如果你有发送邮件的post-commit钩子程序,例如,你会根据是否有价值来开启和关闭邮件通知,另外,一个聪明的post-commit钩子也应该能够区分自动版本化和svn commit产生的事务。技巧就是检查修订版本的svn:autoversioned属性,如果有,则提交来自一个原始的WebDAV客户端。" +msgstr "如果你有发送邮件的post-commit钩子程序,例如,你会根据是否有价值来开启和关闭邮件通知,另外,一个聪明的post-commit钩子也应该能够区分自动版本化和svn commit产生的事务。技巧就是检查修订版本的svn:autoversioned属性,如果有,则提交来自一个原始的WebDAV客户端。" #. (para) #: ../source/book.xml:24933 @@ -27460,7 +27463,7 @@ msgstr "使用cadaver就像使用命令行的FTP程序,因此它很适合基 #. (para) #: ../source/book.xml:25153 msgid "Using cadaver is similar to using a commandline FTP program, and thus it's extremely useful for basic WebDAV debugging. It can be used to upload or download files in a pinch, and also to examine properties, and to copy, move, lock or unlock files:" -msgstr "" +msgstr "使用cadaver与命令行FTP程序类似,因此它在基本的WebDAV调试中非常有用,它可以用来在紧急情况下上传或下载文件,也可以用来验证属性,并拷贝、移动、锁定或解锁文件:" #. (screen) #: ../source/book.xml:25158 @@ -27620,7 +27623,7 @@ msgstr "WebDrive和NetDrive都是完美的商业产品,允许将WebDAV绑定 #: ../source/book.xml:25342 #, fuzzy msgid "Apple's OS X operating system has an integrated filesystem-level WebDAV client. From the Finder, select the Connect to Server item from the Go menu. Enter a WebDAV URL, and it appears as a disk on the desktop, just like any other mounted volume. You can also mount a WebDAV share from the Darwin terminal by using the webdav filesystem type with the mount command:" -msgstr "Apple的OS X操作系统是集成的文件系统级的WebDAV客户端,通过Finder,选择Go menuConnect to Server条目,输入WebDAV的URL,会在桌面显示一个磁盘,就像其他装载的卷。你也可以从Darwin终端通过mount类型为webdav的文件系统实现。" +msgstr "Apple的OS X操作系统是集成的文件系统级的WebDAV客户端,通过Finder,选择Go menuConnect to Server条目,输入WebDAV的URL,会在桌面显示一个磁盘,就像其他装载的卷。你也可以从Darwin终端通过mount类型为webdav的文件系统实现。" #. (screen) #: ../source/book.xml:25350 @@ -27638,7 +27641,7 @@ msgstr "" #: ../source/book.xml:25354 #, fuzzy msgid "Note that if your mod_dav_svn is older than version 1.2, OS X will refuse to mount the share as read-write; it will appear as read-only. This is because OS X insists on locking support for read-write shares, and the ability to lock files first appeared in Subversion 1.2." -msgstr "注意如果mod_dav_svn是1.2之前的版本,OS X不能按照可读写装载,而是会成为只读。这是因为,OS X坚持要读写共享支持锁定,而锁定文件出现在Subversion 1.2。" +msgstr "注意如果mod_dav_svn是1.2之前的版本,OS X不能按照可读写装载,而是会成为只读。这是因为,OS X坚持要读写共享支持锁定,而锁定文件出现在Subversion 1.2。" #. (para) #: ../source/book.xml:25360 @@ -27695,7 +27698,7 @@ msgstr "Copyright" #. (programlisting) #: ../source/book.xml:25410 -#, no-wrap +#, fuzzy, no-wrap msgid "" "\n" "\n" @@ -27998,7 +28001,7 @@ msgid "" msgstr "" "\n" "\n" -"Copyright (c) 2002-2007\n" +"Copyright (c) 2002-2006\n" "Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. \n" "\n" "This work is licensed under the Creative Commons Attribution License.\n" @@ -28006,294 +28009,6 @@ msgstr "" "http://creativecommons.org/licenses/by/2.0/ or send a letter to\n" "Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305,\n" "USA.\n" -"\n" -"A summary of the license is given below, followed by the full legal\n" -"text.\n" -"\n" -"--------------------------------------------------------------------\n" -"\n" -"You are free:\n" -"\n" -" * to copy, distribute, display, and perform the work\n" -" * to make derivative works\n" -" * to make commercial use of the work\n" -"\n" -"Under the following conditions:\n" -"\t\n" -"Attribution. You must give the original author credit.\n" -"\n" -" * For any reuse or distribution, you must make clear to others the\n" -" license terms of this work.\n" -"\n" -" * Any of these conditions can be waived if you get permission from\n" -" the author.\n" -"\n" -"Your fair use and other rights are in no way affected by the above.\n" -"\n" -"The above is a summary of the full license below.\n" -"\n" -"====================================================================\n" -"\n" -"Creative Commons Legal Code\n" -"Attribution 2.0\n" -"\n" -"CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n" -"LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN\n" -"ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS\n" -"INFORMATION ON AN \"AS-IS\" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES\n" -"REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR\n" -"DAMAGES RESULTING FROM ITS USE.\n" -"\n" -"License\n" -"\n" -"THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS\n" -"CREATIVE COMMONS PUBLIC LICENSE (\"CCPL\" OR \"LICENSE\"). THE WORK IS\n" -"PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE\n" -"WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS\n" -"PROHIBITED.\n" -"\n" -"BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND\n" -"AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS\n" -"YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF\n" -"SUCH TERMS AND CONDITIONS.\n" -"\n" -"1. Definitions\n" -"\n" -" a. \"Collective Work\" means a work, such as a periodical issue,\n" -" anthology or encyclopedia, in which the Work in its entirety in\n" -" unmodified form, along with a number of other contributions,\n" -" constituting separate and independent works in themselves, are\n" -" assembled into a collective whole. A work that constitutes a\n" -" Collective Work will not be considered a Derivative Work (as\n" -" defined below) for the purposes of this License.\n" -"\n" -" b. \"Derivative Work\" means a work based upon the Work or upon the\n" -" Work and other pre-existing works, such as a translation,\n" -" musical arrangement, dramatization, fictionalization, motion\n" -" picture version, sound recording, art reproduction, abridgment,\n" -" condensation, or any other form in which the Work may be recast,\n" -" transformed, or adapted, except that a work that constitutes a\n" -" Collective Work will not be considered a Derivative Work for the\n" -" purpose of this License. For the avoidance of doubt, where the\n" -" Work is a musical composition or sound recording, the\n" -" synchronization of the Work in timed-relation with a moving\n" -" image (\"synching\") will be considered a Derivative Work for the\n" -" purpose of this License.\n" -"\n" -" c. \"Licensor\" means the individual or entity that offers the Work\n" -" under the terms of this License.\n" -"\n" -" d. \"Original Author\" means the individual or entity who created the Work.\n" -"\n" -" e. \"Work\" means the copyrightable work of authorship offered under\n" -" the terms of this License.\n" -"\n" -" f. \"You\" means an individual or entity exercising rights under this\n" -" License who has not previously violated the terms of this\n" -" License with respect to the Work, or who has received express\n" -" permission from the Licensor to exercise rights under this\n" -" License despite a previous violation.\n" -"\n" -"2. Fair Use Rights. Nothing in this license is intended to reduce,\n" -" limit, or restrict any rights arising from fair use, first sale or\n" -" other limitations on the exclusive rights of the copyright owner\n" -" under copyright law or other applicable laws.\n" -"\n" -"3. License Grant. Subject to the terms and conditions of this License,\n" -" Licensor hereby grants You a worldwide, royalty-free,\n" -" non-exclusive, perpetual (for the duration of the applicable\n" -" copyright) license to exercise the rights in the Work as stated\n" -" below:\n" -"\n" -" a. to reproduce the Work, to incorporate the Work into one or more\n" -" Collective Works, and to reproduce the Work as incorporated in\n" -" the Collective Works;\n" -"\n" -" b. to create and reproduce Derivative Works;\n" -"\n" -" c. to distribute copies or phonorecords of, display publicly,\n" -" perform publicly, and perform publicly by means of a digital\n" -" audio transmission the Work including as incorporated in\n" -" Collective Works;\n" -"\n" -" d. to distribute copies or phonorecords of, display publicly,\n" -" perform publicly, and perform publicly by means of a digital\n" -" audio transmission Derivative Works.\n" -"\n" -" e.\n" -"\n" -" For the avoidance of doubt, where the work is a musical composition:\n" -"\n" -" i. Performance Royalties Under Blanket Licenses. Licensor\n" -" waives the exclusive right to collect, whether\n" -" individually or via a performance rights society\n" -" (e.g. ASCAP, BMI, SESAC), royalties for the public\n" -" performance or public digital performance (e.g. webcast)\n" -" of the Work.\n" -"\n" -" ii. Mechanical Rights and Statutory Royalties. Licensor waives\n" -" the exclusive right to collect, whether individually or\n" -" via a music rights agency or designated agent (e.g. Harry\n" -" Fox Agency), royalties for any phonorecord You create from\n" -" the Work (\"cover version\") and distribute, subject to the\n" -" compulsory license created by 17 USC Section 115 of the US\n" -" Copyright Act (or the equivalent in other jurisdictions).\n" -"\n" -" f. Webcasting Rights and Statutory Royalties. For the avoidance of\n" -" doubt, where the Work is a sound recording, Licensor waives the\n" -" exclusive right to collect, whether individually or via a\n" -" performance-rights society (e.g. SoundExchange), royalties for\n" -" the public digital performance (e.g. webcast) of the Work,\n" -" subject to the compulsory license created by 17 USC Section 114\n" -" of the US Copyright Act (or the equivalent in other\n" -" jurisdictions).\n" -"\n" -"The above rights may be exercised in all media and formats whether now\n" -"known or hereafter devised. The above rights include the right to make\n" -"such modifications as are technically necessary to exercise the rights\n" -"in other media and formats. All rights not expressly granted by\n" -"Licensor are hereby reserved.\n" -"\n" -"4. Restrictions.The license granted in Section 3 above is expressly\n" -" made subject to and limited by the following restrictions:\n" -"\n" -" a. You may distribute, publicly display, publicly perform, or\n" -" publicly digitally perform the Work only under the terms of this\n" -" License, and You must include a copy of, or the Uniform Resource\n" -" Identifier for, this License with every copy or phonorecord of\n" -" the Work You distribute, publicly display, publicly perform, or\n" -" publicly digitally perform. You may not offer or impose any\n" -" terms on the Work that alter or restrict the terms of this\n" -" License or the recipients' exercise of the rights granted\n" -" hereunder. You may not sublicense the Work. You must keep intact\n" -" all notices that refer to this License and to the disclaimer of\n" -" warranties. You may not distribute, publicly display, publicly\n" -" perform, or publicly digitally perform the Work with any\n" -" technological measures that control access or use of the Work in\n" -" a manner inconsistent with the terms of this License\n" -" Agreement. The above applies to the Work as incorporated in a\n" -" Collective Work, but this does not require the Collective Work\n" -" apart from the Work itself to be made subject to the terms of\n" -" this License. If You create a Collective Work, upon notice from\n" -" any Licensor You must, to the extent practicable, remove from\n" -" the Collective Work any reference to such Licensor or the\n" -" Original Author, as requested. If You create a Derivative Work,\n" -" upon notice from any Licensor You must, to the extent\n" -" practicable, remove from the Derivative Work any reference to\n" -" such Licensor or the Original Author, as requested.\n" -"\n" -" b. If you distribute, publicly display, publicly perform, or\n" -" publicly digitally perform the Work or any Derivative Works or\n" -" Collective Works, You must keep intact all copyright notices for\n" -" the Work and give the Original Author credit reasonable to the\n" -" medium or means You are utilizing by conveying the name (or\n" -" pseudonym if applicable) of the Original Author if supplied; the\n" -" title of the Work if supplied; to the extent reasonably\n" -" practicable, the Uniform Resource Identifier, if any, that\n" -" Licensor specifies to be associated with the Work, unless such\n" -" URI does not refer to the copyright notice or licensing\n" -" information for the Work; and in the case of a Derivative Work,\n" -" a credit identifying the use of the Work in the Derivative Work\n" -" (e.g., \"French translation of the Work by Original Author,\" or\n" -" \"Screenplay based on original Work by Original Author\"). Such\n" -" credit may be implemented in any reasonable manner; provided,\n" -" however, that in the case of a Derivative Work or Collective\n" -" Work, at a minimum such credit will appear where any other\n" -" comparable authorship credit appears and in a manner at least as\n" -" prominent as such other comparable authorship credit.\n" -"\n" -"5. Representations, Warranties and Disclaimer\n" -"\n" -"UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING,\n" -"LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR\n" -"WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED,\n" -"STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF\n" -"TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE,\n" -"NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY,\n" -"OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT\n" -"DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED\n" -"WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.\n" -"\n" -"6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY\n" -" APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY\n" -" LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE\n" -" OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE\n" -" WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\n" -" DAMAGES.\n" -"\n" -"7. Termination\n" -"\n" -" a. This License and the rights granted hereunder will terminate\n" -" automatically upon any breach by You of the terms of this\n" -" License. Individuals or entities who have received Derivative\n" -" Works or Collective Works from You under this License, however,\n" -" will not have their licenses terminated provided such\n" -" individuals or entities remain in full compliance with those\n" -" licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any\n" -" termination of this License.\n" -"\n" -" b. Subject to the above terms and conditions, the license granted\n" -" here is perpetual (for the duration of the applicable copyright\n" -" in the Work). Notwithstanding the above, Licensor reserves the\n" -" right to release the Work under different license terms or to\n" -" stop distributing the Work at any time; provided, however that\n" -" any such election will not serve to withdraw this License (or\n" -" any other license that has been, or is required to be, granted\n" -" under the terms of this License), and this License will continue\n" -" in full force and effect unless terminated as stated above.\n" -"\n" -"8. Miscellaneous\n" -"\n" -" a. Each time You distribute or publicly digitally perform the Work\n" -" or a Collective Work, the Licensor offers to the recipient a\n" -" license to the Work on the same terms and conditions as the\n" -" license granted to You under this License.\n" -"\n" -" b. Each time You distribute or publicly digitally perform a\n" -" Derivative Work, Licensor offers to the recipient a license to\n" -" the original Work on the same terms and conditions as the\n" -" license granted to You under this License.\n" -"\n" -" c. If any provision of this License is invalid or unenforceable\n" -" under applicable law, it shall not affect the validity or\n" -" enforceability of the remainder of the terms of this License,\n" -" and without further action by the parties to this agreement,\n" -" such provision shall be reformed to the minimum extent necessary\n" -" to make such provision valid and enforceable.\n" -"\n" -" d. No term or provision of this License shall be deemed waived and\n" -" no breach consented to unless such waiver or consent shall be in\n" -" writing and signed by the party to be charged with such waiver\n" -" or consent.\n" -"\n" -" e. This License constitutes the entire agreement between the\n" -" parties with respect to the Work licensed here. There are no\n" -" understandings, agreements or representations with respect to\n" -" the Work not specified here. Licensor shall not be bound by any\n" -" additional provisions that may appear in any communication from\n" -" You. This License may not be modified without the mutual written\n" -" agreement of the Licensor and You.\n" -"\n" -"Creative Commons is not a party to this License, and makes no warranty\n" -"whatsoever in connection with the Work. Creative Commons will not be\n" -"liable to You or any party on any legal theory for any damages\n" -"whatsoever, including without limitation any general, special,\n" -"incidental or consequential damages arising in connection to this\n" -"license. Notwithstanding the foregoing two (2) sentences, if Creative\n" -"Commons has expressly identified itself as the Licensor hereunder, it\n" -"shall have all rights and obligations of Licensor.\n" -"\n" -"Except for the limited purpose of indicating to the public that the\n" -"Work is licensed under the CCPL, neither party will use the trademark\n" -"\"Creative Commons\" or any related trademark or logo of Creative\n" -"Commons without the prior written consent of Creative Commons. Any\n" -"permitted use will be in compliance with Creative Commons'\n" -"then-current trademark usage guidelines, as may be published on its\n" -"website or otherwise made available upon request from time to time.\n" -"\n" -"Creative Commons may be contacted at http://creativecommons.org/.\n" -"\n" -"====================================================================\n" #. Put one translator per line, in the form of NAME , YEAR1, YEAR2. #. (None) -- 2.11.4.GIT