You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2011/02/07 20:18:33 UTC
svn commit: r1068059 [4/7] - in /subversion/branches/ignore-mergeinfo-log:
./ build/ notes/ notes/commit-access-templates/ subversion/include/
subversion/include/private/ subversion/libsvn_client/
subversion/libsvn_delta/ subversion/libsvn_diff/ subver...
Modified: subversion/branches/ignore-mergeinfo-log/subversion/po/zh_CN.po
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/po/zh_CN.po?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/po/zh_CN.po [UTF-8] (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/po/zh_CN.po [UTF-8] Mon Feb 7 19:18:29 2011
@@ -55,8 +55,8 @@ msgid ""
msgstr ""
"Project-Id-Version: subversion 1.7\n"
"Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
-"POT-Creation-Date: 2011-01-03 22:24+0800\n"
-"PO-Revision-Date: 2011-01-03 22:27+0800\n"
+"POT-Creation-Date: 2011-02-04 14:37+0800\n"
+"PO-Revision-Date: 2011-02-04 14:34+0800\n"
"Last-Translator: Subversion Developers <de...@subversion.apache.org>\n"
"Language-Team: Simplified Chinese <de...@subversion.apache.org>\n"
"Language: \n"
@@ -938,6 +938,10 @@ msgid "GNOME Keyring is locked and we ar
msgstr "GNOME Keyring 被锁定,并且我们处于非交互方式"
#, c-format
+msgid "'%s' prevents creating parent of '%s'"
+msgstr "'%s' 阻止创建 '%s' 的父亲"
+
+#, c-format
msgid "'%s' not found"
msgstr "找不到 “%s”"
@@ -1353,10 +1357,6 @@ msgstr "服务器不支持取得版本� msgid "URL '%s' non-existent in revision %ld"
msgstr "URL “%s” 不在版本 %ld 中"
-#, c-format
-msgid "URL '%s' non-existent in that revision"
-msgstr "该版本没有 URL “%s”"
-
msgid "No common parent found, unable to operate on disjoint arguments"
msgstr "没有找到公共父节点,不能在分离的参数上操作"
@@ -1504,6 +1504,14 @@ msgid "strip count must be positive"
msgstr "修剪计数取值必须为正"
#, c-format
+msgid "'%s' is not a file"
+msgstr "“%s”不是一个文件"
+
+#, c-format
+msgid "'%s' is not a directory"
+msgstr "“%s”不是目录"
+
+#, c-format
msgid "'%s' is a wcprop, thus not accessible to clients"
msgstr "“%s” 是一个工作副本属性,应此不能被客户端存取"
@@ -1592,6 +1600,10 @@ msgid "'%s' is not a versioned directory
msgstr "'%s' 不是已版本控制的目录"
#, c-format
+msgid "Unable to parse URL '%s'"
+msgstr "不能解析 URL “%s”"
+
+#, c-format
msgid "Path '%s' has no committed revision"
msgstr "路径 “%s” 没有提交过"
@@ -2261,10 +2273,6 @@ msgid "Cannot compare file contents betw
msgstr "不能在两个不同的文件系统间比较文件内容"
#, c-format
-msgid "'%s' is not a file"
-msgstr "“%s”不是一个文件"
-
-#, c-format
msgid "Node-revision '%s' claims to have mergeinfo but doesn't"
msgstr "节点版本“%s”声称自己有合并信息,实际上却没有"
@@ -2745,10 +2753,6 @@ msgid "The CHECKOUT response did not con
msgstr "检出(CHECKOUT)响应没有包含“Location:”头信息"
#, c-format
-msgid "Unable to parse URL '%s'"
-msgstr "不能解析 URL “%s”"
-
-#, c-format
msgid "File '%s' already exists"
msgstr "文件“%s”已存在"
@@ -3076,7 +3080,7 @@ msgid "'%s' path not found"
msgstr "找不到路径 “%s”"
#, c-format
-msgid "access to '%s' forbidden"
+msgid "Access to '%s' forbidden"
msgstr "禁止访问 '%s'"
#, c-format
@@ -3294,9 +3298,9 @@ msgid "Unspecified error message: %d %s"
msgstr "未指明的错误信息: %d %s"
msgid ""
-"The OPTIONS response did not include the requested version-controlled-"
+"The PROPFIND response did not include the requested version-controlled-"
"configuration value"
-msgstr "OPTIONS 响应中没有包含请求的 version-controlled-configuration 值。"
+msgstr "PROPFIND 响应中没有包含请求的 version-controlled-configuration 值。"
#, c-format
msgid "'%s': no lock token available"
@@ -3838,8 +3842,9 @@ msgstr "不完整或未结束的属性� msgid "Unexpected EOF writing contents"
msgstr "写内容时意外结束"
-msgid "Malformed dumpfile header"
-msgstr "非法的转存文件头"
+#, c-format
+msgid "Malformed dumpfile header '%s'"
+msgstr "非法的转存文件头 '%s'"
#, c-format
msgid "Unsupported dumpfile version: %d"
@@ -4147,8 +4152,8 @@ msgid "Can't recode error string from AP
msgstr "无法重新编码 APR 的错误信息"
#, c-format
-msgid "%swarning: %s\n"
-msgstr "%s 警告: %s\n"
+msgid "%swarning: W%06d: %s\n"
+msgstr "%s 警告: W%06d: %s\n"
#, c-format
msgid "In file '%s' line %d: assertion failed (%s)"
@@ -5442,8 +5447,12 @@ msgid "Invalid source URL prefix: '%s' (
msgstr "非法源 URL 前缀: '%s' (不与目标的 URL '%s' 交叠)"
#, c-format
-msgid "Invalid destination URL: '%s'"
-msgstr "目标 URL 非法: '%s'"
+msgid "Invalid relocation destination: '%s' (not a URL)"
+msgstr "非法迁移目标: '%s' (不是 URL)"
+
+#, c-format
+msgid "Invalid relocation destination: '%s' (does not point to target)"
+msgstr "非法迁移目标: '%s' (没有指向目标)"
msgid "Unknown enumeration value in tree conflict description"
msgstr "树冲突描述中有未知的枚举值"
@@ -5598,10 +5607,6 @@ msgid "Cannot upgrade '%s' as it is not
msgstr "不能升级 '%s',因为它不是 1.7 之前的工作副本根目录"
#, c-format
-msgid "'%s' is not a directory"
-msgstr "“%s”不是目录"
-
-#, c-format
msgid "No REPOSITORY table entry for id '%ld'"
msgstr "对于标识 '%ld' 没有 REPOSITORY 表入口"
@@ -5614,24 +5619,6 @@ msgid "The node '%s' has a corrupt check
msgstr "节点 '%s' 的校验和损坏。"
#, c-format
-msgid "Pristine text not found"
-msgstr "找不到原始内容"
-
-#, c-format
-msgid "The pristine text with checksum '%s' was not found"
-msgstr "找不到校验和为“%s”的原始内容"
-
-#, c-format
-msgid "The pristine text with MD5 checksum '%s' was not found"
-msgstr "找不到 MD5 校验和为“%s”的原始内容"
-
-#, c-format
-msgid ""
-"The pristine text with checksum '%s' was found in the DB or on disk but not "
-"both"
-msgstr "在数据库或磁盘找到了校验和为“%s”的原始内容,但是没有同时存在"
-
-#, c-format
msgid "Cannot copy '%s' excluded by server"
msgstr "不能复制被服务器排除的 '%s'"
@@ -5723,6 +5710,24 @@ msgid "'%s' is not a working copy root"
msgstr "'%s' 不是工作副本根目录"
#, c-format
+msgid "Pristine text not found"
+msgstr "找不到原始内容"
+
+#, c-format
+msgid "The pristine text with checksum '%s' was not found"
+msgstr "找不到校验和为“%s”的原始内容"
+
+#, c-format
+msgid "The pristine text with MD5 checksum '%s' was not found"
+msgstr "找不到 MD5 校验和为“%s”的原始内容"
+
+#, c-format
+msgid ""
+"The pristine text with checksum '%s' was found in the DB or on disk but not "
+"both"
+msgstr "在数据库或磁盘找到了校验和为“%s”的原始内容,但是没有同时存在"
+
+#, c-format
msgid "Missing a row in WCROOT."
msgstr "WCROOT 中丢失了一行。"
@@ -6213,22 +6218,6 @@ msgstr "源 左边"
msgid "Source right"
msgstr "源 右边"
-#, c-format
-msgid ""
-"%s: (Not a versioned resource)\n"
-"\n"
-msgstr ""
-"%s: (不是受版本控制的资源)\n"
-"\n"
-
-#, c-format
-msgid ""
-"%s: (Not a valid URL)\n"
-"\n"
-msgstr ""
-"%s: (不是有效的URL)\n"
-"\n"
-
msgid "%b %d %H:%M"
msgstr "%b %d %H:%M"
@@ -6324,11 +6313,31 @@ msgstr "向下递归,与 --depth=infin
msgid "obsolete; try --depth=files or --depth=immediates"
msgstr "过时;尝试 --depth=files 或 --depth=immediates"
-msgid "the change made by revision ARG (like -r ARG-1:ARG)\n"
-msgstr "版本 ARG (等同于 -r ARG-1:ARG) 引起的改变\n"
+msgid ""
+"the change made by revision ARG (like -r ARG-1:ARG)\n"
+" If ARG is negative this is like -r ARG:ARG-1"
+msgstr ""
+"在ARG版本(如同 -r ARG-1:ARG)作的修改\n"
+" 如果ARG为负数则等价于 -r ARG:ARG-1"
-msgid "ARG (some commands also take ARG1:ARG2 range)\n"
-msgstr "ARG (部分命令也接受 ARG1:ARG2 范围)\n"
+msgid ""
+"ARG (some commands also take ARG1:ARG2 range)\n"
+" A revision argument can be one of:\n"
+" NUMBER revision number\n"
+" '{' DATE '}' revision at start of the date\n"
+" 'HEAD' latest in repository\n"
+" 'BASE' base rev of item's working copy\n"
+" 'COMMITTED' last commit at or before BASE\n"
+" 'PREV' revision just before COMMITTED"
+msgstr ""
+"ARG (一些命令也接受ARG1:ARG2范围)\n"
+" 版本参数可以是如下之一: \n"
+" NUMBER 版本号\n"
+" '{' DATE '}' 在指定时间以后的版本\n"
+" 'HEAD' 版本库中的最新版本\n"
+" 'BASE' 工作副本的基线版本\n"
+" 'COMMITTED' 最后提交或基线之前\n"
+" 'PREV' COMMITTED的前一版本"
msgid "read log message from file ARG"
msgstr "从文件ARG读取日志信息"
@@ -6354,18 +6363,57 @@ msgstr "指定用户名称 ARG"
msgid "specify a password ARG"
msgstr "指定密码 ARG"
-msgid "Default: '-u'. When Subversion is invoking an\n"
-msgstr "默认: '-u'。当 Subversion 正在调用\n"
+msgid ""
+"Default: '-u'. When Subversion is invoking an\n"
+" external diff program, ARG is simply passed "
+"along\n"
+" to the program. But when Subversion is using "
+"its\n"
+" default internal diff implementation, or when\n"
+" Subversion is displaying blame annotations, ARG\n"
+" could be any of the following:\n"
+" -u (--unified):\n"
+" Output 3 lines of unified context.\n"
+" -b (--ignore-space-change):\n"
+" Ignore changes in the amount of white "
+"space.\n"
+" -w (--ignore-all-space):\n"
+" Ignore all white space.\n"
+" --ignore-eol-style:\n"
+" Ignore changes in EOL style.\n"
+" -p (--show-c-function):\n"
+" Show C function name in diff output."
+msgstr ""
+"缺省: “-u”。当 Subversion 调用外部比较程序时,ARG 直接传给它。但是当\n"
+" Subversion 使用缺省的内置比较实现,或者正\n"
+" 显示追溯时, ARG 可以是: \n"
+" -u (--unified):\n"
+" 输出三行统一上下文。\n"
+" -b (--ignore-space-change):\n"
+" 忽略空白数量的修改。\n"
+" -w (--ignore-all-space):\n"
+" 忽略所有的空白。\n"
+" --ignore-eol-style:\n"
+" 忽略行尾样式的改"
+"变。 -p (--show-c-function):\n"
+" 在比较输出中显示 C 函数名称。"
msgid "pass contents of file ARG as additional args"
msgstr "传递文件 ARG 内容为附件参数"
-#, fuzzy
-msgid "limit operation by depth ARG ('empty', 'files',\n"
-msgstr "受深度参数 ARG(“empty”,“files”,“immediates”,或“infinity”) 约束的操作"
+msgid ""
+"limit operation by depth ARG ('empty', 'files',\n"
+" 'immediates', or 'infinity')"
+msgstr ""
+"限制操作深度是 ARG ('empty', 'files',\n"
+" 'immediates', 或 'infinity')"
-msgid "set new working copy depth to ARG ('exclude',\n"
-msgstr "设置新工作副本深度到 ARG ('exclude',\n"
+msgid ""
+"set new working copy depth to ARG ('exclude',\n"
+" 'empty', 'files', 'immediates', or 'infinity')"
+msgstr ""
+"设置工作副本的新深度为 ARG('exclude',\n"
+" 'empty', 'files', 'immediates', 或 'infinity')"
msgid "output in XML"
msgstr "输出为 XML"
@@ -6382,8 +6430,10 @@ msgstr "忽略默认值和 svn:ignore � msgid "do not cache authentication tokens"
msgstr "不要缓存用户认证令牌"
-msgid "accept unknown SSL server certificates without\n"
-msgstr "接受未知的 SSL 服务器证书,没有\n"
+msgid ""
+"accept unknown SSL server certificates without\n"
+" prompting (but only with '--non-interactive')"
+msgstr "不提示的接受未知的 SSL 服务器证书(只用于选项 “--non-interactive”)"
msgid "do no interactive prompting"
msgstr "不要交互提示"
@@ -6430,9 +6480,16 @@ msgstr "通过URL改写重新定位"
msgid "read user configuration files from directory ARG"
msgstr "从目录 ARG 读取用户配置文件"
-#, fuzzy
-msgid "set user configuration option in the format:\n"
-msgstr "从目录 ARG 读取用户配置文件"
+msgid ""
+"set user configuration option in the format:\n"
+" FILE:SECTION:OPTION=[VALUE]\n"
+" For example:\n"
+" servers:global:http-library=serf"
+msgstr ""
+"以下属格式设置用户配置选项:\n"
+" FILE:SECTION:OPTION=[VALUE]\n"
+" 例如:\n"
+" servers:global:http-library=serf"
msgid "enable automatic properties"
msgstr "启用自动属性"
@@ -6440,8 +6497,15 @@ msgstr "启用自动属性"
msgid "disable automatic properties"
msgstr "关闭自动属性"
-msgid "use a different EOL marker than the standard\n"
-msgstr "使用非标准的 EOL 标记\n"
+msgid ""
+"use a different EOL marker than the standard\n"
+" system marker for files with the svn:eol-style\n"
+" property set to 'native'.\n"
+" ARG may be one of 'LF', 'CR', 'CRLF'"
+msgstr ""
+"使用非标准的 EOL 标记\n"
+" 系统中立的文件标记 svn:eol-style 属性取值为 “native”。\n"
+" ARG 可以是以下之一“LF”,“CR”,“CRLF”"
msgid "maximum number of log entries"
msgstr "日值项最大值"
@@ -6470,26 +6534,59 @@ msgstr "获取所有版本属性"
msgid "retrieve no revision properties"
msgstr "没有找回版本属性"
-msgid "set revision property ARG in new revision\n"
-msgstr "在新版本设置版本属性 ARG\n"
+msgid ""
+"set revision property ARG in new revision\n"
+" using the name[=value] format"
+msgstr ""
+"在新版本设置版本属性 ARG\n"
+" 使用格式 name[=value]"
msgid "make intermediate directories"
msgstr "创建中间目录"
-msgid "use/display additional information from merge\n"
-msgstr "从合并历史使用/显示额外信息\n"
+msgid ""
+"use/display additional information from merge\n"
+" history"
+msgstr "从合并历史使用/显示额外信息"
-msgid "specify automatic conflict resolution action\n"
-msgstr "指定自动解决冲突的动作\n"
+msgid ""
+"specify automatic conflict resolution action\n"
+" ('postpone', 'base', 'mine-conflict',\n"
+" 'theirs-conflict', 'mine-full', 'theirs-full',\n"
+" 'edit', 'launch')"
+msgstr ""
+"指定自动解决冲突动作\n"
+" ('postpone', 'base', 'mine-conflict',\n"
+" 'theirs-conflict', 'mine-full', 'theirs-full',\n"
+" 'edit', 'launch')"
-msgid "specify which collection of revisions to display\n"
-msgstr "指定显示的版本集合\n"
+msgid ""
+"specify which collection of revisions to display\n"
+" ('merged', 'eligible')"
+msgstr ""
+"指定显示哪个版本集合\n"
+" ('merged', 'eligible')"
msgid "merge a branch back into its parent branch"
msgstr "合并分支回父分支"
-msgid "number of leading path components to strip from\n"
-msgstr "要修剪的前导路径组件数目\n"
+msgid ""
+"number of leading path components to strip from\n"
+" paths parsed from the patch file. --strip 0\n"
+" is the default and leaves paths unmodified.\n"
+" --strip 1 would change the path\n"
+" 'doc/fudge/crunchy.html' to 'fudge/crunchy."
+"html'.\n"
+" --strip 2 would leave just 'crunchy.html'\n"
+" The expected component separator is '/' on all\n"
+" platforms. A leading '/' counts as one component."
+msgstr ""
+"需要从补丁文件中的路径中裁剪的前导路径组件数量。\n"
+" 默认 --strip 0 不修改路径。指定 --strip 1 会将\n"
+" 路径 'doc/fudge/crunchy.html' 转换为\n"
+" 'fudge/crunchy.html'。指定 --strip 2 会得到\n"
+" 'crunchy.html' 。在所有平台中期望的组件分隔符\n"
+" 都是 '/'。前导 '/' 被计算为一个组件。"
msgid "don't diff copied or moved files with their source"
msgstr "请不要将复制或移动的文件与其源文件比较"
@@ -6512,8 +6609,14 @@ msgstr "覆盖配置文件中指定的 d
msgid "use git's extended diff format"
msgstr "使用 git 的扩展差异格式"
-msgid "Allow merge into mixed-revision working copy.\n"
-msgstr "允许合并到混合工作副本。\n"
+msgid ""
+"Allow merge into mixed-revision working copy.\n"
+" Use of this option is not recommended!\n"
+" Please run 'svn update' instead."
+msgstr ""
+"允许合并到含有混合版本的工作副本.\n"
+" 不建议使用此选项!\n"
+" 请先执行 'svn update' 。"
msgid ""
"Put files and directories under version control, scheduling\n"
@@ -6667,7 +6770,6 @@ msgstr ""
"操作不会与版本库通信。同样地,在缺省情况下,不能从复制源到目的地传播合\n"
"并跟踪信息。\n"
-#, fuzzy
msgid ""
"Remove files and directories from version control.\n"
"usage: 1. delete PATH...\n"
@@ -6689,8 +6791,9 @@ msgstr ""
"\n"
" 1、每个 PATH 指定的项目会被调度到下次提交时从版本库删除。除非给出\n"
" --keep-local 参数,工作副本中没有提交的文件和目录会被立即删除。\n"
-" 如果 PATH 是未版本控制或者已修改的项目,或者包含这些项目,那么仅当\n"
-" 给出 --force 参数时这些项目才会被删除。\n"
+" 如果 PATH 未版本控制或者包含未版本控制的项目,或者包含已修改的\n"
+" 项目,那么仅当给出 --force 或 --keep-local 参数时这些项目才会被\n"
+" 删除。\n"
"\n"
" 2、每个 URL 指定的项目会通过立即提交从版本库中删除。\n"
@@ -6950,35 +7053,235 @@ msgstr "获取版本属性 ARG"
msgid "the change made in revision ARG"
msgstr "版本 ARG 引起的改变"
-#, fuzzy
msgid ""
"Apply the differences between two sources to a working copy path.\n"
-"usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]\n"
-" 2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]\n"
-" 3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]\n"
-"\n"
-" 1. In the first form, the source URLs are specified at revisions\n"
-" N and M. These are the two sources to be compared. The revisions\n"
-" default to HEAD if omitted.\n"
-"\n"
-" 2. In the second form, the URLs corresponding to the source working\n"
-" copy paths define the sources to be compared. The revisions must\n"
-" be specified.\n"
-"\n"
-" 3. In the third form, SOURCE can be either a URL or a working copy\n"
-" path (in which case its corresponding URL is used). SOURCE (in\n"
-" revision REV) is compared as it existed between revisions N and M\n"
-" for each revision range provided. If REV is not specified, HEAD\n"
-" is assumed. '-c M' is equivalent to '-r <M-1>:M', and '-c -M'\n"
-" does the reverse: '-r M:<M-1>'. If no revision ranges are\n"
-" specified, the default range of 0:REV is used. Multiple '-c'\n"
-" and/or '-r' options may be specified, and mixing of forward\n"
-" and reverse ranges is allowed.\n"
-"\n"
-" WCPATH is the working copy path that will receive the changes.\n"
-" If WCPATH is omitted, a default value of '.' is assumed, unless\n"
-" the sources have identical basenames that match a file within '.':\n"
-" in which case, the differences will be applied to that file.\n"
+"usage: 1. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+" 2. merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
+" 3. merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
+"\n"
+" 1. The first form is called a \"sync\", or \"cherry-pick\", merge:\n"
+" svn merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+"\n"
+" A sync merge is used to merge into a branch any unmerged changes\n"
+" made on its immediate ancestor branch.\n"
+"\n"
+" A cherry-picking merge is used to merge specific revisions from\n"
+" one branch to another.\n"
+"\n"
+" SOURCE is usually a URL. The source of a cherry-picking merge can\n"
+" also be a working copy path, in which case the corresponding URL\n"
+" of the path is used.\n"
+"\n"
+" If REV is specified, it is used as the peg revision for SOURCE,\n"
+" i.e. SOURCE is looked up in the repository at revision REV.\n"
+" If REV is not specified, the HEAD revision is assumed.\n"
+"\n"
+" TARGET_WCPATH is a working copy of the branch the changes will\n"
+" be applied to.\n"
+"\n"
+" '-r N:M' specifies a revision range to be merged. The difference\n"
+" between SOURCE@REV as it existed at revision N, and SOURCE@REV at\n"
+" it existed at revision M, is merged into TARGET_WCPATH. If no\n"
+" revision range is specified, the default range of 0:REV is used.\n"
+" \n"
+" If mergeinfo within TARGET_WCPATH indicates that revisions within\n"
+" the range were already merged, changes made in those revisions\n"
+" are not merged again. If needed, the range is broken into multiple\n"
+" sub-ranges, and each sub-range is merged separately.\n"
+"\n"
+" If N is greater than M, the range is a \"reverse range\".\n"
+" A reverse range can be used to undo changes made to SOURCE\n"
+" between revisions N and M.\n"
+"\n"
+" '-c M' is equivalent to the range '-r <M-1>:M'.\n"
+" '-c -M' does the reverse: '-r M:<M-1>'.\n"
+" \n"
+" Multiple '-c' and/or '-r' options may be specified and mixing of\n"
+" forward and reverse ranges is allowed.\n"
+"\n"
+" - Sync Merge Example -\n"
+"\n"
+" A feature is being developed on a branch called \"feature\".\n"
+" The feature branch is regularly synced with trunk to keep up with\n"
+" changes made there.\n"
+"\n"
+" feature +------------------------o-----\n"
+" / ^\n"
+" / /\n"
+" / .............../\n"
+" trunk ------+------------L--------------R------\n"
+" r100 r200\n"
+" \n"
+" In the above diagram, L marks the \"left\" side of the merge\n"
+" (trunk@100), and R marks the \"right\" side of the merge (trunk@200).\n"
+" The difference between the left and right side is merged into the "
+"target.\n"
+"\n"
+" To perform the merge, check out a working copy of the feature\n"
+" branch and run the following command in the top-level directory\n"
+" of the working copy:\n"
+"\n"
+" svn merge ^/trunk\n"
+"\n"
+" The default revision range is -r0:HEAD, so any unmerged changes\n"
+" will be merged.\n"
+"\n"
+" - Cherry-picking Merge Example -\n"
+"\n"
+" A bug has been fixed on trunk on revision 50. This fix needs to\n"
+" be merged from the trunk into the release branch.\n"
+"\n"
+" 1.x-release +-----------------------o-----\n"
+" / ^\n"
+" / |\n"
+" / |\n"
+" trunk ------+--------------------------LR-----\n"
+" r50\n"
+" \n"
+" In the above diagram, L marks the left side of the merge (trunk@49)\n"
+" and R marks the right side of the merge (trunk@50).\n"
+" The difference between the left and right side is merged into the "
+"target.\n"
+"\n"
+" To perform the merge, check out a working copy of the feature\n"
+" branch and run the following command in the top-level directory\n"
+" of the working copy:\n"
+"\n"
+" svn merge -c50 ^/trunk\n"
+"\n"
+" If several commits to trunk were related to the fix, multiple\n"
+" revisions can be merged:\n"
+"\n"
+" svn merge -c50,54,60 ^/trunk\n"
+"\n"
+"\n"
+" 2. The second form is called a \"reintegrate merge\":\n"
+" svn merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
+"\n"
+" SOURCE is the URL of a branch to be merged back into (usually) its\n"
+" immediate ancestor branch. If REV is specified, it is used a\n"
+" the peg revision for SOURCE, i.e. SOURCE is looked up in the\n"
+" repository at revision REV. If REV is not specified, the HEAD\n"
+" revision is assumed.\n"
+"\n"
+" TARGET_WCPATH is a working copy of the branch the changes will\n"
+" be applied to.\n"
+"\n"
+" - Reintegrate Merge Example -\n"
+"\n"
+" A feature has been developed on a branch called \"feature\".\n"
+" The feature branch started as a copy of trunk@W. Work on the\n"
+" feature has completed and it should be merged back into the trunk.\n"
+" \n"
+" The feature branch was last synced with its immediate ancestor,\n"
+" the trunk, in revision X. So the difference between trunk@X and\n"
+" feature@HEAD contains the complete set of changes that implement\n"
+" the feature, and no other changes. These changes are applied to\n"
+" the trunk.\n"
+"\n"
+" feature +-------------------------------R\n"
+" / . \\\n"
+" / .............. \\\n"
+" / . v\n"
+" trunk ------+--------------------L------------------o\n"
+" rW rX\n"
+"\n"
+" In the diagram above, L marks the left side of the merge (trunk@X),\n"
+" and R marks the right side of the merge (feature@HEAD). The difference\n"
+" between the left and right side is merged into the target.\n"
+"\n"
+" To perform the merge, check out a working copy of the trunk, and run\n"
+" the following command in the top-level directory of the working copy:\n"
+"\n"
+" svn merge --reintegrate ^/feature\n"
+"\n"
+" To prevent unnecessary merge conflicts, reintegrate merges require\n"
+" that TARGET_WCPATH is not a mixed-revision working copy, has no\n"
+" local modifications, and has no switched subtrees.\n"
+"\n"
+" Reintegrate merges also require that the reintegrate source be fully\n"
+" synced with the target since their common branch point.\n"
+" In the above example this means that all of the changes made\n"
+" on trunk between revision W and revision X are fully merged to\n"
+" the feature branch before it can be reintegrated back to trunk.\n"
+"\n"
+" After the reintegrate merge, the feature branch cannot be synced\n"
+" to the trunk again without merge conflicts. If further work must\n"
+" be done on the feature branch, it should be deleted and then re-"
+"created.\n"
+"\n"
+"\n"
+" 3. The third form is called a \"2-URL merge\":\n"
+" svn merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
+"\n"
+" Two source URLs are specified, together with two revisions N and M.\n"
+" The two sources to be compared at the specified revisions, and the\n"
+" difference is applied to TARGET_WCPATH, which is a path to a working\n"
+" copy of another branch.\n"
+"\n"
+" The revisions default to HEAD if omitted.\n"
+"\n"
+" If TARGET_WCPATH is omitted, a default value of '.' is assumed,\n"
+" unless the sources have identical basenames that match a file\n"
+" within '.'; In which case, the differences will be applied to\n"
+" that file.\n"
+"\n"
+" The sources can also be specified as working copy paths, in which\n"
+" case the URLs of the merge sources are derived from the working copies.\n"
+"\n"
+" This is the most flexible type of merge, but also the most difficult\n"
+" to use. It can be used to merge the differences between two (possibly\n"
+" ancestrally unrelated) branches into a working copy of another branch.\n"
+" This type of merge should be used very carefully because the "
+"probability\n"
+" of merge conflicts is quite high. In most use cases, a sync, cherry-"
+"pick,\n"
+" or reintegrate merge is sufficient and reduces the chances of mistakes.\n"
+"\n"
+" - 2-URL Merge Example -\n"
+"\n"
+" A feature has been developed on a branch called \"feature\".\n"
+" Development for the upcoming 3.0 release has happened in parallel on\n"
+" the \"3.x-release\" branch. The work on the feature branch must be\n"
+" merged to the 3.x-release branch. However, the feature branch and\n"
+" the 3.x-release branch are not directly related, so a 2-URL merge\n"
+" is needed.\n"
+" The feature branch was last synced with its immediate ancestor,\n"
+" the trunk, up to revision 500. So the difference between trunk@500\n"
+" and feature@HEAD contains the complete set of changes related to\n"
+" the feature, and no other changes. These changes are applied to\n"
+" the 3.x-release branch.\n"
+"\n"
+" 3.x-release +-----------------------------------o\n"
+" / ^\n"
+" / /\n"
+" / r500 /\n"
+" trunk ------+------+-----------------L---------> /\n"
+" \\ . /\n"
+" \\ ........... /\n"
+" \\ . /\n"
+" feature +-----------------------------------R\n"
+"\n"
+" In the diagram above, L marks the left side of the merge (trunk@500),\n"
+" and R marks the right side of the merge is (feature@HEAD).\n"
+" The difference between the left and right side is merged into the "
+"target.\n"
+"\n"
+" To perform the merge, check out a working copy of the 3.x-release\n"
+" branch and run the following command in the top-level directory\n"
+" of the working copy:\n"
+" \n"
+" svn merge ^/trunk@500 ^/feature\n"
+"\n"
+" Before performing a 2-UL merge, it is a good idea to preview the\n"
+" changes which will be merged, because there is no guarantee that\n"
+" the merge will be free of conflicts. The preview can be done with\n"
+" the svn diff command:\n"
+"\n"
+" svn diff ^/trunk@500 ^/feature@HEAD\n"
+"\n"
+"\n"
+" The following applies to all types of merges:\n"
"\n"
" For each merged item a line will be printed with characters reporting\n"
" the action taken. These characters have the following meaning:\n"
@@ -6997,42 +7300,16 @@ msgid ""
" the first and second columns indicate textual conflicts in files\n"
" and in property values, respectively.\n"
"\n"
-" NOTE: Subversion will only record metadata to track the merge\n"
-" if the two sources are on the same line of history -- if the\n"
-" first source is an ancestor of the second, or vice-versa. This is\n"
-" guaranteed to be the case when using the third form listed above.\n"
-" The --ignore-ancestry option overrides this, forcing Subversion to\n"
-" regard the sources as unrelated and not to track the merge.\n"
-msgstr ""
-"将两个源差异应用至工作副本。\n"
-"用法: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]\n"
-" 2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]\n"
-" 3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]\n"
-"\n"
-" 1、第一种形式中,源 URL 的版本 N 与 M 作为比较的来源。如果没有指定版本,默"
-"认\n"
-" 为 HEAD。\n"
-"\n"
-" 2、在第二种形式中,两个源工作副本路径对应的版本库中的 URL 作为比较的来源。"
-"这\n"
-" 里必须指定版本。\n"
-"\n"
-" 3、第三种形式中,SOURCE 可为 URL 或工作副本中的路径(后者会使用版本库中对应\n"
-" 的 URL)。比较版本为 REV 的 SOURCE,就像它在版本 N 到 M 存在一样。如果没\n"
-" 有给出 REV,默认为 HEAD。选项 “-c M” 等价于 “-r <M-1>:M”,“-c -M” 与之\n"
-" 相反,等价于 “-r M:<M-1>”。如果没有指定版本范围,默认为 0:REV。可以指定\n"
-" 多个 “-c” 或 “-r”,并且可以混合使用向前范围或向后范围。\n"
-"\n"
-" WCPATH 是接收修改的工作副本路径。如果省略了 WCPATH,默认为 “.”,除非来源中\n"
-" 有与当前目录内同名的文件,这时修改会直接应用至该文件。\n"
-"\n"
-" 注意: Subversion 只有当两个合并源有继承关系的时候才会内部跟踪合并操作的源"
-"数\n"
-" 据 -- 即如果第一个合并源是第二个的祖先,或者相反。在上述的第三种形式中,已"
-"经\n"
-" 保证了满足条件。选项 --ignore-ancestry 忽略继承关系,强制 Subversion 认为合"
-"并\n"
-" 源之间没有关系,不跟踪本次合并。\n"
+" NOTE: Subversion uses the svn:mergeinfo property to track merge\n"
+" history. This property is considered at the start of a merge to\n"
+" determine what to merge and it is updated at the conclusion of the\n"
+" merge to describe the merge that took place. Mergeinfo is used only\n"
+" if the two sources are on the same line of history -- if the first\n"
+" source is an ancestor of the second, or vice-versa. This is guaranteed\n"
+" to be the case when using sync merges and reintegrate merges.\n"
+" The --ignore-ancestry option prevents merge tracking and thus\n"
+" ignores mergeinfo, neither considering it nor recording it.\n"
+msgstr ""
msgid ""
"Display merge-related information.\n"
@@ -7387,6 +7664,23 @@ msgid ""
" svn relocate http://www.example.com/repo/project \\\n"
" svn://svn.example.com/repo/project\n"
msgstr ""
+"重新定位工作副本,指向不同的版本库根 URL。\n"
+"用法: 1. relocate FROM-PREFIX TO-PREFIX [PATH...]\n"
+" 2. relocate TO-URL [PATH]\n"
+"\n"
+" 改写工作副本 URL 元数据,以反映仅版本库根 URL 的改变。这用于仅版本库根\n"
+" URL 改变(例如方案或主机名称),但是工作副本内容仍旧与版本库对应的情况。\n"
+"\n"
+" 1. FROM-PREFIX 和 TO-PREFIX 分别对应工作副本的旧 URL 与新 URL 的子串\n"
+" (如果你喜欢,可以执行完整的 URL)。请使用 'svn info' 来确定当前工作\n"
+" 副本的 URL。\n"
+"\n"
+" 2. TO-URL 是用于 PATH 的(完整的)新版本库 URL。\n"
+"\n"
+" 例如:\n"
+" svn relocate http:// svn:// project1 project2\n"
+" svn relocate http://www.example.com/repo/project \\\n"
+" svn://svn.example.com/repo/project\n"
msgid ""
"Resolve conflicts on working copy files or directories.\n"
@@ -7399,8 +7693,14 @@ msgstr ""
"\n"
" 注意: 当前需要选项 --accept 。\n"
-msgid "specify automatic conflict resolution source\n"
-msgstr "指定自动冲突解决源\n"
+msgid ""
+"specify automatic conflict resolution source\n"
+" ('base', 'working', 'mine-conflict',\n"
+" 'theirs-conflict', 'mine-full', 'theirs-full')"
+msgstr ""
+"指定自动解决冲突动作的源\n"
+" ('base', 'working', 'mine-conflict',\n"
+" 'theirs-conflict', 'mine-full', 'theirs-full')"
msgid ""
"Remove 'conflicted' state on working copy files or directories.\n"
@@ -9650,17 +9950,6 @@ msgid "display this help"
msgstr "显示本帮助"
msgid ""
-"set user configuration option in the format:\n"
-" FILE:SECTION:OPTION=[VALUE]\n"
-" For example:\n"
-" servers:global:http-library=serf"
-msgstr ""
-"以下属格式设置用户配置选项:\n"
-" FILE:SECTION:OPTION=[VALUE]\n"
-" 例如:\n"
-" servers:global:http-library=serf"
-
-msgid ""
"general usage: svnrdump SUBCOMMAND URL [-r LOWER[:UPPER]]\n"
"Type 'svnrdump help <subcommand>' for help on a specific subcommand.\n"
"Type 'svnrdump --version' to see the program version and RA modules.\n"
@@ -9916,7 +10205,6 @@ msgid ""
"service"
msgstr "发生内部错误,启动服务失败"
-#, fuzzy
msgid ""
"usage: svnsync initialize DEST_URL SOURCE_URL\n"
"\n"
@@ -9945,11 +10233,13 @@ msgstr ""
"\n"
"初始化一个目标版本库以从另一个版本库同步。\n"
"\n"
-"DEST_URL 必须指向版本库的根目录,这个版本库必须没有提交过版本,并且允许\n"
-"修改版本属性。\n"
-"\n"
"如果源 URL 不是版本库的根,只有版本库中指定的部分会被同步。\n"
"\n"
+"目标 URL 必须指向版本库的根目录,并且允许修改版本属性。一般来说,\n"
+"目标版本库不能包含已经提交的版本。可使用 --allow-non-empty 来越\n"
+"过此限制,它导致 svnsync 假定目标版本库中的版本是源版本库中对应\n"
+"版本的镜像(例如,这对于从源版本库的副本初始化镜像特别有用)。\n"
+"\n"
"除了 svnsync 外,你不应该在目标版本库中提交,或者修改版本属性。也就是说,\n"
"目标版本库应该是源版本库的只读镜像。\n"
@@ -9965,6 +10255,13 @@ msgid ""
"if untrusted users/administrators may have write access to the\n"
"DEST_URL repository.\n"
msgstr ""
+"用法: svnsync synchronize DEST_URL [SOURCE_URL]\n"
+"\n"
+"从源版本库复制所有挂起的版本到目标版本库。\n"
+"\n"
+"如果提供了 SOURCE_URL,就用作源版本库的 URL,从而忽略在目标版本库中记录的\n"
+"源 URL。如果有不信任的用户/管理员可以写入位于 DEST_URL 的版本库,那么特别\n"
+"推荐指定 SOURCE_URL。\n"
msgid ""
"usage:\n"
@@ -9986,6 +10283,20 @@ msgid ""
"\n"
"Form 2 is deprecated syntax, equivalent to specifying \"-rREV[:REV2]\".\n"
msgstr ""
+"用法:\n"
+"\n"
+" 1. svnsync copy-revprops DEST_URL [SOURCE_URL]\n"
+" 2. svnsync copy-revprops DEST_URL REV[:REV2]\n"
+"\n"
+"从源版本库复制指定版本范围的版本属性到目标版本库。如果没有头指定版本范围,\n"
+"就复制全部版本到位于 DEST_URL 的版本库。请注意,'HEAD' 是位于 DEST_URL\n"
+"的最新版本,不需要是位于 SOURCE_URL 的最新版本。\n"
+"\n"
+"如果提供了 SOURCE_URL,就用作源版本库的 URL,从而忽略在目标版本库中记录的\n"
+"源 URL。如果有不信任的用户/管理员可以写入位于 DEST_URL 的版本库,那么特别\n"
+"推荐指定 SOURCE_URL。\n"
+"\n"
+"格式 2 是已经废弃的语法,等价于指定 \"-rREV[:REV2]\" 。\n"
msgid ""
"usage: svnsync info DEST_URL\n"
@@ -10037,11 +10348,6 @@ msgstr ""
"指定密码 ARG (已经过时;\n"
" 参看 --source-password 和 --sync-password)"
-msgid ""
-"accept unknown SSL server certificates without\n"
-" prompting (but only with '--non-interactive')"
-msgstr "不提示的接受未知的 SSL 服务器证书(只用于选项 “--non-interactive”)"
-
msgid "connect to source repository with username ARG"
msgstr "使用用户名称 ARG 连接源版本库"
@@ -10223,7 +10529,7 @@ msgstr "请使用 “svnsync help” 以
msgid "Type 'svnversion --help' for usage.\n"
msgstr "使用 “svnversion --help” 得到用法。\n"
-#, fuzzy, c-format
+#, c-format
msgid ""
"usage: svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]\n"
"\n"
@@ -10276,7 +10582,9 @@ msgstr ""
" 4123P 局部工作副本,没有全部检出。\n"
" 4123:4168MS 混合版本,有修改,工作副本已切换\n"
"\n"
-" 如果在非工作副本的目录上运行,例如导出的目录,那么它会输出“已导出”。\n"
+" 如果 WC_PATH 不是工作副本,那么它会输出 '未版本控制的目录'\n"
+" 或者 '未版本控制的文件'。如果 WC_PATH 是新增,复制或移动后\n"
+" 的路径,那么它会输出 '未提交的本地增加,复制或移动'。\n"
"\n"
" 如果调用时没有参数,则 WC_PATH 默认为当前目录。\n"
"\n"
@@ -10308,485 +10616,3 @@ msgstr "“%s” 的类型未知\n"
#, c-format
msgid "Uncommitted local addition, copy or move%s"
msgstr "未提交的本地增加,复制或移动 %s"
-
-#~ msgid "post-commit hook failed with no error message."
-#~ msgstr "调用 post-commit 钩子失败,没有错误信息"
-
-#~ msgid "Parent(s) of '%s' should have repository information."
-#~ msgstr "'%s' 的父亲应该包含版本库的信息。"
-
-#~ msgid "Entry '%s' has illegal schedule"
-#~ msgstr "条目“%s”有非法调度"
-
-#~ msgid ""
-#~ "set new working copy depth to ARG ('exclude',\n"
-#~ " 'empty', 'files', 'immediates', or "
-#~ "'infinity')\n"
-#~ " [alias: --sd]"
-#~ msgstr ""
-#~ "设置工作副本的新深度为 ARG(“exclude”,\n"
-#~ " “empty”,“files”,“immediates” 或“infinity”)\n"
-#~ " [alias: --sd]"
-
-#~ msgid "Can't create pipe for hook '%s'"
-#~ msgstr "无法为钩子“%s”创建管道"
-
-#~ msgid "Given source URL invalid"
-#~ msgstr "提供的源 URL 非法"
-
-#~ msgid "Can't make pipe write handle non-inherited for hook '%s'"
-#~ msgstr "无法为钩子“%s”创建非继承的管道写句柄"
-
-#~ msgid "Error comparing '%s' and '%s'"
-#~ msgstr "比较“%s”与“%s”出错"
-
-#~ msgid "Could not find node '%s' for recording file information."
-#~ msgstr "不能为记录文件信息找到节点“%s”"
-
-#~ msgid "Non-numeric strip argument given"
-#~ msgstr "提供的修剪参数不是数字"
-
-#~ msgid "\"svnrdump load\"'s lock was stolen; can't remove it"
-#~ msgstr "\"svnrdump load\" 的锁被窃;不能删除"
-
-#~ msgid ""
-#~ "specify automatic conflict resolution action\n"
-#~ " ('postpone', 'base', 'mine-conflict',\n"
-#~ " 'theirs-conflict', 'mine-full', 'theirs-"
-#~ "full',\n"
-#~ " 'edit', 'launch')"
-#~ msgstr ""
-#~ "指定自动解决冲突动作\n"
-#~ " ('postpone', 'base', 'mine-conflict',\n"
-#~ " 'theirs-conflict', 'mine-full', 'theirs-"
-#~ "full',\n"
-#~ " 'edit', 'launch')"
-
-#~ msgid "Unrecognized logfile element '%s' in '%s'"
-#~ msgstr "有无法识别的日志文件元素 “%s” 在 “%s” 中"
-
-#~ msgid "Failed to add directory '%s': copyfrom arguments not yet supported"
-#~ msgstr "无法增加目录“%s”:尚不支持 copyfrom 参数"
-
-#~ msgid "Error modifying entry of '%s'"
-#~ msgstr "修改“%s”的入口出错"
-
-#~ msgid "Error modifying entry for '%s'"
-#~ msgstr "修改“%s”的入口出错"
-
-#~ msgid ""
-#~ "Failed to add file '%s': a file from another repository with the same name "
-#~ "already exists"
-#~ msgstr "无法新增文件“%s”: 来自其它版本库的同名文件对象已存在"
-
-#~ msgid "No WC table entry"
-#~ msgstr "没有 WC 表入口"
-
-#~ msgid "Error removing lock from entry for '%s'"
-#~ msgstr "删除条目“%s”的锁出错"
-
-#~ msgid ""
-#~ "Default: '-u'. When Subversion is invoking an\n"
-#~ " external diff program, ARG is simply passed "
-#~ "along\n"
-#~ " to the program. But when Subversion is using "
-#~ "its\n"
-#~ " default internal diff implementation, or "
-#~ "when\n"
-#~ " Subversion is displaying blame annotations, "
-#~ "ARG\n"
-#~ " could be any of the following:\n"
-#~ " -u (--unified):\n"
-#~ " Output 3 lines of unified context.\n"
-#~ " -b (--ignore-space-change):\n"
-#~ " Ignore changes in the amount of white "
-#~ "space.\n"
-#~ " -w (--ignore-all-space):\n"
-#~ " Ignore all white space.\n"
-#~ " --ignore-eol-style:\n"
-#~ " Ignore changes in EOL style.\n"
-#~ " -p (--show-c-function):\n"
-#~ " Show C function name in diff output."
-#~ msgstr ""
-#~ "缺省: “-u”。当 Subversion 调用外部比较程序时,ARG 直接传给它。但是当\n"
-#~ " Subversion 使用缺省的内置比较实现,或者正\n"
-#~ " 显示追溯时, ARG 可以是: \n"
-#~ " -u (--unified):\n"
-#~ " 输出三行统一上下文。\n"
-#~ " -b (--ignore-space-change):\n"
-#~ " 忽略空白数量的修改。\n"
-#~ " -w (--ignore-all-space):\n"
-#~ " 忽略所有的空白。\n"
-#~ " --ignore-eol-style:\n"
-#~ " 忽略行尾样式的改"
-#~ "变。 -p (--show-c-function):\n"
-#~ " 在比较输出中显示 C 函数名称。"
-
-#~ msgid "Can't chmod '%s'"
-#~ msgstr "无法修改“%s”的存取权限"
-
-#~ msgid "Can't close directory '%s'"
-#~ msgstr "无法关闭目录 “%s”"
-
-#~ msgid "In directory '%s'"
-#~ msgstr "在目录“%s”中"
-
-#~ msgid ""
-#~ "do not print differences for deleted files\n"
-#~ " [alias: --ndd]"
-#~ msgstr ""
-#~ "对于已经删除的文件,不要显示差异\n"
-#~ " [alias: --ndd]"
-
-#~ msgid ""
-#~ "Failed to add file '%s': a non-file object of the same name already exists"
-#~ msgstr "无法新增文件“%s”: 同名非文件对象已存在"
-
-#~ msgid ""
-#~ "do not cache authentication tokens\n"
-#~ " [alias: --nac]"
-#~ msgstr ""
-#~ "不要缓存认证令牌\n"
-#~ " [alias: --nac]"
-
-#~ msgid "Path '%s' is now a member of changelist '%s'.\n"
-#~ msgstr "路径“%s”现在是修改列表“%s”的成员。\n"
-
-#~ msgid "Unknown or unexpected kind for path '%s'"
-#~ msgstr "路径“%s”的种类未知或意外"
-
-#~ msgid "There is no work queue for '%s'."
-#~ msgstr "没有 '%s' 的工作队列。"
-
-#~ msgid "'svn upgrade' can only be run from the root of the working copy."
-#~ msgstr "只能在工作副本的根目录执行 'svn upgrade'"
-
-#~ msgid "'%s' has no WORKING_NODE"
-#~ msgstr "“%s” 没有 WORKING_NODE"
-
-#~ msgid "Entry '%s' is already under version control"
-#~ msgstr "条目“%s”已纳入版本控制"
-
-#~ msgid "Did not expect '%s' to be a working copy root"
-#~ msgstr "不期望 “%s” 是工作副本根目录"
-
-#~ msgid "'%s' is not a valid revision range"
-#~ msgstr "“%s”不是有效的版本范围"
-
-#~ msgid "Error in post-commit clean-up (details follow):"
-#~ msgstr "清理 post-commit 出错 (细节如下): "
-
-#, fuzzy
-#~ msgid ""
-#~ "apply the unidiff in reverse\n"
-#~ " [alias: --rd]"
-#~ msgstr ""
-#~ "忽略外部定义\n"
-#~ " [aliases: --ie]"
-
-#~ msgid ""
-#~ "Can't add '%s' to deleted directory; try undeleting its parent directory "
-#~ "first"
-#~ msgstr "无法增加“%s”至已删除的目录;请先恢复其父目录"
-
-#~ msgid "Added: %s\n"
-#~ msgstr "已增加: %s\n"
-
-#~ msgid "Error getting 'affected time' of '%s'"
-#~ msgstr "取得“%s”的“affected time”出错"
-
-#~ msgid "Stream doesn't support resetting"
-#~ msgstr "流不支持重置操作"
-
-#, fuzzy
-#~ msgid ""
-#~ "lump-merge all of source URL's unmerged changes\n"
-#~ " [alias: --ri]"
-#~ msgstr ""
-#~ "只能对修改列表 ARG 成员操作\n"
-#~ " [aliases: --cl]"
-
-#~ msgid "Error getting 'affected time' on '%s'"
-#~ msgstr "取得“%s”的“affected time”出错"
-
-#~ msgid ""
-#~ "Failed to add file '%s': an unversioned file of the same name already "
-#~ "exists"
-#~ msgstr "增加文件 '%s' 失败: 同名未版本控制的文件已存在"
-
-#~ msgid ""
-#~ "Can't replace '%s' with a node of a differing type; the deletion must be "
-#~ "committed and the parent updated before adding '%s'"
-#~ msgstr ""
-#~ "无法以不同类型的节点来替换 “%s”;在增加 “%s” 前必须提交删除操作并更新父目录"
-
-#~ msgid "Error parsing diff options"
-#~ msgstr "解析 diff 参数出错"
-
-#~ msgid "No fetch_func supplied to update_editor"
-#~ msgstr "没有为 update_editor 提供 fetch_func"
-
-#~ msgid "Revision file '%s' does not exist, and r%ld is not packed"
-#~ msgstr "版本文件 “%s” 不存在,并且 r%ld 没有被打包"
-
-#~ msgid "Can't move source to dest"
-#~ msgstr "无法移动源至目的"
-
-#~ msgid "Error closing write end of stderr pipe"
-#~ msgstr "关闭写标准错误管道出错"
-
-#~ msgid "Error during add of '%s'"
-#~ msgstr "增加 “%s” 时出错"
-
-#~ msgid "LOWER cannot be greater than UPPER.\n"
-#~ msgstr "LOWER 不能大于 UPPER。\n"
-
-#~ msgid ""
-#~ "set revision property ARG in new revision\n"
-#~ " using the name[=value] format"
-#~ msgstr ""
-#~ "在新版本设置版本属性 ARG\n"
-#~ " 使用格式 name[=value]"
-
-#~ msgid ""
-#~ "Entry for '%s' is marked as 'copied' but is not itself scheduled\n"
-#~ "for addition. Perhaps you're committing a target that is\n"
-#~ "inside an unversioned (or not-yet-versioned) directory?"
-#~ msgstr ""
-#~ "条目 “%s” 被标记为“已复制”,但是本身尚未加入增加调度。也许您提交的\n"
-#~ "目标在未纳入版本控制的目录中?"
-
-#~ msgid "Path '%s' is no longer a member of a changelist.\n"
-#~ msgstr "路径“%s”不再是修改列表的成员。\n"
-
-#~ msgid ""
-#~ "Cannot revert addition of current directory; please try again from the "
-#~ "parent directory"
-#~ msgstr "无法恢复增加的当前目录;请从父目录重试"
-
-#, fuzzy
-#~ msgid ""
-#~ "specify which collection of revisions to display\n"
-#~ " ('merged', 'eligible')\n"
-#~ " [alias: --sr]"
-#~ msgstr ""
-#~ "指定显示哪个版本集合\n"
-#~ " ('merged', 'eligible')"
-
-#~ msgid "Error recording tree conflict on '%s'"
-#~ msgstr "在 '%s' 中记录树冲突出错"
-
-#~ msgid ""
-#~ "Only SHA1 checksums can be used as keys in the pristine file storage.\n"
-#~ msgstr "在原始的文件存储中,只有 SHA1 校验和才能用作键。\n"
-
-#~ msgid ""
-#~ "the change made by revision ARG (like -r ARG-1:ARG)\n"
-#~ " If ARG is negative this is like -r ARG:ARG-1"
-#~ msgstr ""
-#~ "在ARG版本(如同 -r ARG-1:ARG)作的修改\n"
-#~ " 如果ARG为负数则等价于 -r ARG:ARG-1"
-
-#~ msgid "Cannot reintegrate into a working copy not entirely at infinite depth"
-#~ msgstr "不能复兴到非全部无限制深度的工作副本"
-
-#~ msgid ""
-#~ "Failed to add directory '%s': an unversioned directory of the same name "
-#~ "already exists"
-#~ msgstr "无法新增目录“%s”: 同名未版本控制目录对象已存在"
-
-#~ msgid "Error getting 'affected time' for '%s'"
-#~ msgstr "取得“%s”的“affected time”出错"
-
-#, fuzzy
-#~ msgid ""
-#~ "keep path in working copy\n"
-#~ " [alias: --kl]"
-#~ msgstr ""
-#~ "忽略外部定义\n"
-#~ " [aliases: --ie]"
-
-#~ msgid ""
-#~ "ARG (some commands also take ARG1:ARG2 range)\n"
-#~ " A revision argument can be one of:\n"
-#~ " NUMBER revision number\n"
-#~ " '{' DATE '}' revision at start of the "
-#~ "date\n"
-#~ " 'HEAD' latest in repository\n"
-#~ " 'BASE' base rev of item's working "
-#~ "copy\n"
-#~ " 'COMMITTED' last commit at or before "
-#~ "BASE\n"
-#~ " 'PREV' revision just before COMMITTED"
-#~ msgstr ""
-#~ "ARG (一些命令也接受ARG1:ARG2范围)\n"
-#~ " 版本参数可以是如下之一: \n"
-#~ " NUMBER 版本号\n"
-#~ " '{' DATE '}' 在指定时间以后的版本\n"
-#~ " 'HEAD' 版本库中的最新版本\n"
-#~ " 'BASE' 工作副本的基线版本\n"
-#~ " 'COMMITTED' 最后提交或基线之前\n"
-#~ " 'PREV' COMMITTED的前一版本"
-
-#~ msgid "Modified: %s\n"
-#~ msgstr "已修改: %s\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "don't expand keywords\n"
-#~ " [alias: --ik]"
-#~ msgstr ""
-#~ "忽略外部定义\n"
-#~ " [aliases: --ie]"
-
-#~ msgid "URL '%s' is not properly URI-encoded"
-#~ msgstr "URL“%s”不是正确的URI编码"
-
-#~ msgid "Can't make pipe read handle non-inherited for hook '%s'"
-#~ msgstr "无法为钩子“%s”创建非继承的管道读句柄"
-
-#~ msgid ""
-#~ "number of leading path components to strip\n"
-#~ " from pathnames. Specifying -p0 gives the "
-#~ "entire\n"
-#~ " path unmodified. Specifying -p1 causes the "
-#~ "path\n"
-#~ " doc/fudge/crunchy.html\n"
-#~ " to be interpreted as\n"
-#~ " fudge/crunchy.html\n"
-#~ " while -p2 would give just crunchy.html"
-#~ msgstr ""
-#~ "需要从路径中裁剪的前导路径组件数量。\n"
-#~ " 指定 -p0 不修改路径。指定 -p1 会将路径 doc/fudge/crunchy."
-#~ "html\n"
-#~ " 被转换为 fudge/crunchy.html。指定 -p2 会得到 crunchy."
-#~ "html 。"
-
-#~ msgid "Target lists to diff may not contain both working copy paths and URLs"
-#~ msgstr "差异比较目标不可同时包含工作副本路径与URL"
-
-#~ msgid ""
-#~ "usage: svnsync synchronize DEST_URL\n"
-#~ "\n"
-#~ "Transfer all pending revisions to the destination from the source\n"
-#~ "with which it was initialized.\n"
-#~ msgstr ""
-#~ "用法: svnsync synchronize DEST_URL\n"
-#~ "\n"
-#~ "从已经初始化的源版本库传输所有未决的版本到目标版本库。\n"
-
-#~ msgid ""
-#~ "specify automatic conflict resolution source\n"
-#~ " ('base', 'working', 'mine-conflict',\n"
-#~ " 'theirs-conflict', 'mine-full', 'theirs-full')"
-#~ msgstr ""
-#~ "指定自动解决冲突动作的源\n"
-#~ " ('base', 'working', 'mine-conflict',\n"
-#~ " 'theirs-conflict', 'mine-full', 'theirs-full')"
-
-#~ msgid "Error replacing text-base of '%s'"
-#~ msgstr "替换“%s”的文件参考基础出错"
-
-#~ msgid "Deleted: %s\n"
-#~ msgstr "已删除: %s\n"
-
-#~ msgid ""
-#~ "use a different EOL marker than the standard\n"
-#~ " system marker for files with the svn:eol-"
-#~ "style\n"
-#~ " property set to 'native'.\n"
-#~ " ARG may be one of 'LF', 'CR', 'CRLF'"
-#~ msgstr ""
-#~ "使用非标准的 EOL 标记\n"
-#~ " 系统中立的文件标记 svn:eol-style 属性取值为 “native”。\n"
-#~ " ARG 可以是以下之一“LF”,“CR”,“CRLF”"
-
-#~ msgid "Path '%s' is not a child of '%s'"
-#~ msgstr "路径 '%s' 不是 '%s' 的孩子"
-
-#~ msgid ""
-#~ "read user configuration files from directory ARG\n"
-#~ " [alias: --cd]"
-#~ msgstr ""
-#~ "从目录 ARG 读取用户配置文件\n"
-#~ " [alias: --cd]"
-
-#~ msgid ""
-#~ "Can't replace '%s' in deleted directory; try undeleting its parent "
-#~ "directory first"
-#~ msgstr "无法在已删除的目录中替换“%s”;请先恢复其父目录"
-
-#~ msgid "'%s' is marked as absent, so it cannot be scheduled for addition"
-#~ msgstr "“%s”被标记为不存在,所以无法加入增加调度"
-
-#~ msgid ""
-#~ "ignore externals definitions\n"
-#~ " [alias: --ie]"
-#~ msgstr ""
-#~ "忽略外部定义\n"
-#~ " [alias: --ie]"
-
-#~ msgid "Missing 'timestamp' attribute in '%s'"
-#~ msgstr "“%s”丢失“timestamp”属性"
-
-#~ msgid ""
-#~ "usage: svnsync copy-revprops DEST_URL [REV[:REV2]]\n"
-#~ "\n"
-#~ "Copy the revision properties in a given range of revisions to the\n"
-#~ "destination from the source with which it was initialized.\n"
-#~ "\n"
-#~ "If REV and REV2 are provided, copy properties for the revisions\n"
-#~ "specified by that range, inclusively. If only REV is provided,\n"
-#~ "copy properties for that revision alone. If REV is not provided,\n"
-#~ "copy properties for all revisions previously transferred to the\n"
-#~ "destination.\n"
-#~ "\n"
-#~ "REV and REV2 must be revisions which were previously transferred\n"
-#~ "to the destination. You may use \"HEAD\" for either revision to\n"
-#~ "mean \"the last revision transferred\".\n"
-#~ msgstr ""
-#~ "用法: svnsync copy-revprops DEST_URL [REV[:REV2]]\n"
-#~ "\n"
-#~ "从已经初始化的源版本库复制指定版本范围的版本属性到目的版本库。\n"
-#~ "\n"
-#~ "如果给出了 REV 和 REV2,那么复制给定的版本范围,包含边界。如果\n"
-#~ "只给出了 REV,那么单独复制此版本属性。如果没有给出 REV,那么就\n"
-#~ "复制已经传输的所有版本的属性。\n"
-#~ "\n"
-#~ "REV 和 REV2 必须是已经传输到目的版本库的版本。你可以使用 \"HEAD\" \n"
-#~ "来指代最后一个传输的版本。\n"
-
-#~ msgid "Missing path argument"
-#~ msgstr "丢失路径参数"
-
-#~ msgid "Parent(s) of '%s' should have been present."
-#~ msgstr "'%s' 的父亲应该存在。"
-
-#~ msgid "Unable to make any directories"
-#~ msgstr "无法创建任何目录"
-
-#~ msgid ""
-#~ "merge only mergeinfo differences\n"
-#~ " [alias: --ro]"
-#~ msgstr ""
-#~ "只合并修改信息的差异\n"
-#~ " [alias: --ro]"
-
-#~ msgid "Error getting file size on '%s'"
-#~ msgstr "取得“%s”的文件大小出错"
-
-#~ msgid "Removing '%s' from changelist '%s'."
-#~ msgstr "删除 “%s”,从修改列表 “%s”。"
-
-#, fuzzy
-#~ msgid ""
-#~ "general usage: svnrdump SUBCOMMAND URL [-r LOWER[:UPPER]]\n"
-#~ "Type 'svnrdump help <subcommand>' for help on a specific subcommand.\n"
-#~ "\n"
-#~ "Available subcommands:\n"
-#~ msgstr ""
-#~ "一般用法: svndumpfilter SUBCOMMAND [ARGS & OPTIONS ...]\n"
-#~ "请使用 “svndumpfilter help <subcommand>”获得指定子命令的帮助信息。\n"
-#~ "请使用 “svndumpfilter --version”获得本程序版本。\n"
-#~ "\n"
-#~ "可用的子命令: \n"
Modified: subversion/branches/ignore-mergeinfo-log/subversion/svn/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/svn/main.c?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/svn/main.c (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/svn/main.c Mon Feb 7 19:18:29 2011
@@ -677,32 +677,227 @@ const svn_opt_subcommand_desc2_t svn_cl_
{ "merge", svn_cl__merge, {0}, N_
("Apply the differences between two sources to a working copy path.\n"
- "usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]\n"
- " 2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]\n"
- " 3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]\n"
- "\n"
- " 1. In the first form, the source URLs are specified at revisions\n"
- " N and M. These are the two sources to be compared. The revisions\n"
- " default to HEAD if omitted.\n"
- "\n"
- " 2. In the second form, the URLs corresponding to the source working\n"
- " copy paths define the sources to be compared. The revisions must\n"
- " be specified.\n"
- "\n"
- " 3. In the third form, SOURCE can be either a URL or a working copy\n"
- " path (in which case its corresponding URL is used). SOURCE (in\n"
- " revision REV) is compared as it existed between revisions N and M\n"
- " for each revision range provided. If REV is not specified, HEAD\n"
- " is assumed. '-c M' is equivalent to '-r <M-1>:M', and '-c -M'\n"
- " does the reverse: '-r M:<M-1>'. If no revision ranges are\n"
- " specified, the default range of 0:REV is used. Multiple '-c'\n"
- " and/or '-r' options may be specified, and mixing of forward\n"
- " and reverse ranges is allowed.\n"
- "\n"
- " WCPATH is the working copy path that will receive the changes.\n"
- " If WCPATH is omitted, a default value of '.' is assumed, unless\n"
- " the sources have identical basenames that match a file within '.':\n"
- " in which case, the differences will be applied to that file.\n"
+ "usage: 1. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+ " 2. merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
+ " 3. merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
+ "\n"
+ " 1. The first form is called a \"sync\", or \"cherry-pick\", merge:\n"
+ " svn merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+ "\n"
+ " A sync merge is used to merge into a branch any unmerged changes\n"
+ " made on its immediate ancestor branch.\n"
+ "\n"
+ " A cherry-picking merge is used to merge specific revisions from\n"
+ " one branch to another.\n"
+ "\n"
+ " SOURCE is usually a URL. The source of a cherry-picking merge can\n"
+ " also be a working copy path, in which case the corresponding URL\n"
+ " of the path is used.\n"
+ "\n"
+ " If REV is specified, it is used as the peg revision for SOURCE,\n"
+ " i.e. SOURCE is looked up in the repository at revision REV.\n"
+ " If REV is not specified, the HEAD revision is assumed.\n"
+ "\n"
+ " TARGET_WCPATH is a working copy of the branch the changes will\n"
+ " be applied to.\n"
+ "\n"
+ " '-r N:M' specifies a revision range to be merged. The difference\n"
+ " between SOURCE@REV as it existed at revision N, and SOURCE@REV at\n"
+ " it existed at revision M, is merged into TARGET_WCPATH. If no\n"
+ " revision range is specified, the default range of 0:REV is used.\n"
+ " \n"
+ " If mergeinfo within TARGET_WCPATH indicates that revisions within\n"
+ " the range were already merged, changes made in those revisions\n"
+ " are not merged again. If needed, the range is broken into multiple\n"
+ " sub-ranges, and each sub-range is merged separately.\n"
+ "\n"
+ " If N is greater than M, the range is a \"reverse range\".\n"
+ " A reverse range can be used to undo changes made to SOURCE\n"
+ " between revisions N and M.\n"
+ "\n"
+ " '-c M' is equivalent to the range '-r <M-1>:M'.\n"
+ " '-c -M' does the reverse: '-r M:<M-1>'.\n"
+ " \n"
+ " Multiple '-c' and/or '-r' options may be specified and mixing of\n"
+ " forward and reverse ranges is allowed.\n"
+ "\n"
+ " - Sync Merge Example -\n"
+ "\n"
+ " A feature is being developed on a branch called \"feature\".\n"
+ " The feature branch is regularly synced with trunk to keep up with\n"
+ " changes made there.\n"
+ "\n"
+ " feature +------------------------o-----\n"
+ " / ^\n"
+ " / /\n"
+ " / .............../\n"
+ " trunk ------+------------L--------------R------\n"
+ " r100 r200\n"
+ " \n"
+ " In the above diagram, L marks the \"left\" side of the merge\n"
+ " (trunk@100), and R marks the \"right\" side of the merge (trunk@200).\n"
+ " The difference between the left and right side is merged into the target.\n"
+ "\n"
+ " To perform the merge, check out a working copy of the feature\n"
+ " branch and run the following command in the top-level directory\n"
+ " of the working copy:\n"
+ "\n"
+ " svn merge ^/trunk\n"
+ "\n"
+ " The default revision range is -r0:HEAD, so any unmerged changes\n"
+ " will be merged.\n"
+ "\n"
+ " - Cherry-picking Merge Example -\n"
+ "\n"
+ " A bug has been fixed on trunk on revision 50. This fix needs to\n"
+ " be merged from the trunk into the release branch.\n"
+ "\n"
+ " 1.x-release +-----------------------o-----\n"
+ " / ^\n"
+ " / |\n"
+ " / |\n"
+ " trunk ------+--------------------------LR-----\n"
+ " r50\n"
+ " \n"
+ " In the above diagram, L marks the left side of the merge (trunk@49)\n"
+ " and R marks the right side of the merge (trunk@50).\n"
+ " The difference between the left and right side is merged into the target.\n"
+ "\n"
+ " To perform the merge, check out a working copy of the feature\n"
+ " branch and run the following command in the top-level directory\n"
+ " of the working copy:\n"
+ "\n"
+ " svn merge -c50 ^/trunk\n"
+ "\n"
+ " If several commits to trunk were related to the fix, multiple\n"
+ " revisions can be merged:\n"
+ "\n"
+ " svn merge -c50,54,60 ^/trunk\n"
+ "\n"
+ "\n"
+ " 2. The second form is called a \"reintegrate merge\":\n"
+ " svn merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
+ "\n"
+ " SOURCE is the URL of a branch to be merged back into (usually) its\n"
+ " immediate ancestor branch. If REV is specified, it is used a\n"
+ " the peg revision for SOURCE, i.e. SOURCE is looked up in the\n"
+ " repository at revision REV. If REV is not specified, the HEAD\n"
+ " revision is assumed.\n"
+ "\n"
+ " TARGET_WCPATH is a working copy of the branch the changes will\n"
+ " be applied to.\n"
+ "\n"
+ " - Reintegrate Merge Example -\n"
+ "\n"
+ " A feature has been developed on a branch called \"feature\".\n"
+ " The feature branch started as a copy of trunk@W. Work on the\n"
+ " feature has completed and it should be merged back into the trunk.\n"
+ " \n"
+ " The feature branch was last synced with its immediate ancestor,\n"
+ " the trunk, in revision X. So the difference between trunk@X and\n"
+ " feature@HEAD contains the complete set of changes that implement\n"
+ " the feature, and no other changes. These changes are applied to\n"
+ " the trunk.\n"
+ "\n"
+ " feature +-------------------------------R\n"
+ " / . \\\n"
+ " / .............. \\\n"
+ " / . v\n"
+ " trunk ------+--------------------L------------------o\n"
+ " rW rX\n"
+ "\n"
+ " In the diagram above, L marks the left side of the merge (trunk@X),\n"
+ " and R marks the right side of the merge (feature@HEAD). The difference\n"
+ " between the left and right side is merged into the target.\n"
+ "\n"
+ " To perform the merge, check out a working copy of the trunk, and run\n"
+ " the following command in the top-level directory of the working copy:\n"
+ "\n"
+ " svn merge --reintegrate ^/feature\n"
+ "\n"
+ " To prevent unnecessary merge conflicts, reintegrate merges require\n"
+ " that TARGET_WCPATH is not a mixed-revision working copy, has no\n"
+ " local modifications, and has no switched subtrees.\n"
+ "\n"
+ " Reintegrate merges also require that the reintegrate source be fully\n"
+ " synced with the target since their common branch point.\n"
+ " In the above example this means that all of the changes made\n"
+ " on trunk between revision W and revision X are fully merged to\n"
+ " the feature branch before it can be reintegrated back to trunk.\n"
+ "\n"
+ " After the reintegrate merge, the feature branch cannot be synced\n"
+ " to the trunk again without merge conflicts. If further work must\n"
+ " be done on the feature branch, it should be deleted and then re-created.\n"
+ "\n"
+ "\n"
+ " 3. The third form is called a \"2-URL merge\":\n"
+ " svn merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
+ "\n"
+ " Two source URLs are specified, together with two revisions N and M.\n"
+ " The two sources to be compared at the specified revisions, and the\n"
+ " difference is applied to TARGET_WCPATH, which is a path to a working\n"
+ " copy of another branch.\n"
+ "\n"
+ " The revisions default to HEAD if omitted.\n"
+ "\n"
+ " If TARGET_WCPATH is omitted, a default value of '.' is assumed,\n"
+ " unless the sources have identical basenames that match a file\n"
+ " within '.'; In which case, the differences will be applied to\n"
+ " that file.\n"
+ "\n"
+ " The sources can also be specified as working copy paths, in which\n"
+ " case the URLs of the merge sources are derived from the working copies.\n"
+ "\n"
+ " This is the most flexible type of merge, but also the most difficult\n"
+ " to use. It can be used to merge the differences between two (possibly\n"
+ " ancestrally unrelated) branches into a working copy of another branch.\n"
+ " This type of merge should be used very carefully because the probability\n"
+ " of merge conflicts is quite high. In most use cases, a sync, cherry-pick,\n"
+ " or reintegrate merge is sufficient and reduces the chances of mistakes.\n"
+ "\n"
+ " - 2-URL Merge Example -\n"
+ "\n"
+ " A feature has been developed on a branch called \"feature\".\n"
+ " Development for the upcoming 3.0 release has happened in parallel on\n"
+ " the \"3.x-release\" branch. The work on the feature branch must be\n"
+ " merged to the 3.x-release branch. However, the feature branch and\n"
+ " the 3.x-release branch are not directly related, so a 2-URL merge\n"
+ " is needed.\n"
+ " The feature branch was last synced with its immediate ancestor,\n"
+ " the trunk, up to revision 500. So the difference between trunk@500\n"
+ " and feature@HEAD contains the complete set of changes related to\n"
+ " the feature, and no other changes. These changes are applied to\n"
+ " the 3.x-release branch.\n"
+ "\n"
+ " 3.x-release +-----------------------------------o\n"
+ " / ^\n"
+ " / /\n"
+ " / r500 /\n"
+ " trunk ------+------+-----------------L---------> /\n"
+ " \\ . /\n"
+ " \\ ........... /\n"
+ " \\ . /\n"
+ " feature +-----------------------------------R\n"
+ "\n"
+ " In the diagram above, L marks the left side of the merge (trunk@500),\n"
+ " and R marks the right side of the merge is (feature@HEAD).\n"
+ " The difference between the left and right side is merged into the target.\n"
+ "\n"
+ " To perform the merge, check out a working copy of the 3.x-release\n"
+ " branch and run the following command in the top-level directory\n"
+ " of the working copy:\n"
+ " \n"
+ " svn merge ^/trunk@500 ^/feature\n"
+ "\n"
+ " Before performing a 2-UL merge, it is a good idea to preview the\n"
+ " changes which will be merged, because there is no guarantee that\n"
+ " the merge will be free of conflicts. The preview can be done with\n"
+ " the svn diff command:\n"
+ "\n"
+ " svn diff ^/trunk@500 ^/feature@HEAD\n"
+ "\n"
+ "\n"
+ " The following applies to all types of merges:\n"
"\n"
" For each merged item a line will be printed with characters reporting\n"
" the action taken. These characters have the following meaning:\n"
@@ -712,6 +907,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
" U Updated\n"
" C Conflict\n"
" G Merged\n"
+ " E Existed\n"
" R Replaced\n"
"\n"
" Characters in the first column report about the item itself.\n"
@@ -720,12 +916,15 @@ const svn_opt_subcommand_desc2_t svn_cl_
" the first and second columns indicate textual conflicts in files\n"
" and in property values, respectively.\n"
"\n"
- " NOTE: Subversion will only record metadata to track the merge\n"
- " if the two sources are on the same line of history -- if the\n"
- " first source is an ancestor of the second, or vice-versa. This is\n"
- " guaranteed to be the case when using the third form listed above.\n"
- " The --ignore-ancestry option overrides this, forcing Subversion to\n"
- " regard the sources as unrelated and not to track the merge.\n"),
+ " NOTE: Subversion uses the svn:mergeinfo property to track merge\n"
+ " history. This property is considered at the start of a merge to\n"
+ " determine what to merge and it is updated at the conclusion of the\n"
+ " merge to describe the merge that took place. Mergeinfo is used only\n"
+ " if the two sources are on the same line of history -- if the first\n"
+ " source is an ancestor of the second, or vice-versa. This is guaranteed\n"
+ " to be the case when using sync merges and reintegrate merges.\n"
+ " The --ignore-ancestry option prevents merge tracking and thus\n"
+ " ignores mergeinfo, neither considering it nor recording it.\n"),
{'r', 'c', 'N', opt_depth, 'q', opt_force, opt_dry_run, opt_merge_cmd,
opt_record_only, 'x', opt_ignore_ancestry, opt_accept, opt_reintegrate,
opt_allow_mixed_revisions} },
Modified: subversion/branches/ignore-mergeinfo-log/subversion/svnserve/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/svnserve/main.c?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/svnserve/main.c (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/svnserve/main.c Mon Feb 7 19:18:29 2011
@@ -189,6 +189,16 @@ static const apr_getopt_option_t svnserv
"at the same time is not supported in daemon mode.\n"
" "
"Use inetd mode or tunnel mode if you need this.]")},
+ {"memory-cache-size", 'M', 1,
+ N_("size of the extra in-memory cache in MB used to\n"
+ " "
+ "minimize redundant operations.\n"
+ " "
+ "Default is 128 for threaded and 16 for non-\n"
+ " "
+ "threaded mode.\n"
+ " "
+ "[used for FSFS repositories only]")},
#ifdef CONNECTION_HAVE_THREAD_OPTION
/* ### Making the assumption here that WIN32 never has fork and so
* ### this option never exists when --service exists. */
@@ -437,6 +447,7 @@ int main(int argc, const char *argv[])
params.authzdb = NULL;
params.log_file = NULL;
params.username_case = CASE_ASIS;
+ params.memory_cache_size = (apr_uint64_t)-1;
while (1)
{
@@ -549,6 +560,10 @@ int main(int argc, const char *argv[])
handling_mode = connection_mode_thread;
break;
+ case 'M':
+ params.memory_cache_size = 0x100000 * apr_strtoi64(arg, NULL, 0);
+ break;
+
#ifdef WIN32
case SVNSERVE_OPT_SERVICE:
if (run_mode != run_mode_service)
@@ -802,6 +817,39 @@ int main(int argc, const char *argv[])
winservice_running();
#endif
+ /* Configure FS caches for maximum efficiency with svnserve.
+ * For pre-forked (i.e. multi-processed) mode of operation,
+ * keep the per-process caches smaller than the default.
+ * Also, apply the respective command line parameters, if given. */
+ {
+ svn_fs_cache_config_t settings = *svn_fs_get_cache_config();
+
+ if (params.memory_cache_size != -1)
+ settings.cache_size = params.memory_cache_size;
+ else if (handling_mode != connection_mode_thread)
+ settings.cache_size = 0x1000000;
+
+ settings.cache_fulltexts = TRUE;
+ settings.cache_txdeltas = FALSE;
+ settings.single_threaded = TRUE;
+
+ if (handling_mode == connection_mode_thread)
+ {
+#ifdef APR_HAS_THREADS
+ settings.single_threaded = FALSE;
+#else
+ /* No requests will be processed at all
+ * (see "switch (handling_mode)" code further down).
+ * But if they were, some other synchronization code
+ * would need to take care of securing integrity of
+ * APR-based structures. That would include our caches.
+ */
+#endif
+ }
+
+ svn_fs_set_cache_config(&settings);
+ }
+
while (1)
{
#ifdef WIN32
Modified: subversion/branches/ignore-mergeinfo-log/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/svnserve/serve.c?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/svnserve/serve.c (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/svnserve/serve.c Mon Feb 7 19:18:29 2011
@@ -259,8 +259,8 @@ svn_error_t *load_configs(svn_config_t *
proceed without it anyway.
### Not entirely sure why SVN_ERR_BAD_FILENAME is checked
- ### for here. That seems to have been introduced in r16840,
- ### and only in r30868 was the APR_EACCES check introduced. */
+ ### for here. That seems to have been introduced in r856914,
+ ### and only in r870942 was the APR_EACCES check introduced. */
if (err->apr_err != SVN_ERR_BAD_FILENAME
&& ! APR_STATUS_IS_EACCES(err->apr_err))
{
Modified: subversion/branches/ignore-mergeinfo-log/subversion/svnserve/server.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo-log/subversion/svnserve/server.h?rev=1068059&r1=1068058&r2=1068059&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo-log/subversion/svnserve/server.h (original)
+++ subversion/branches/ignore-mergeinfo-log/subversion/svnserve/server.h Mon Feb 7 19:18:29 2011
@@ -109,6 +109,9 @@ typedef struct serve_params_t {
/* Username case normalization style. */
enum username_case_type username_case;
+ /* Size of the in-memory cache (used by FSFS only). */
+ apr_uint64_t memory_cache_size;
+
} serve_params_t;
/* Serve the connection CONN according to the parameters PARAMS. */