svn 的非 LF 行结束问题 svn:ignore on dump load

Posted

技术标签:

【中文标题】svn 的非 LF 行结束问题 svn:ignore on dump load【英文标题】:Svn non-LF line ending problems with svn:ignore on dump load 【发布时间】:2012-07-24 19:57:31 【问题描述】:

我正在尝试使用转储文件将运行 svn 版本 1.2.3 的系统上的存储库(具有完整的历史记录)迁移到运行 1.7.1 的系统上。由于原始存储库是这么早的版本,因此不能直接使用svnrdump。我使用了svnadmin dump,然后将(8 GB)转储文件移动到了 1.7.1 系统。但是,当我从那里使用 svnrdump load 命令时,经过 231 次修订后,出现以下错误

svnrdump: E125005: Cannot accept non-LF line endings in 'svn:ignore' property

我尝试从修订版 231 中删除 svn:ignore 属性,但无济于事,以及多个第三方应用程序,如 svn2svn(我们使用身份验证,所以没有骰子)。和svndumptool eolfix/svndumptool copy(显然只适用于.txt文件)。

最初我在 'svn:log' revprop 上进行了 11 次修订后遇到了类似的错误,我通过运行 dos2unix 修复了该错误(更糟糕的是),然后使用脚本/手动修复了 svnadmin dump 失败的每个文件在。

我对两个系统(unix,不确定是什么发行版)都具有 repos/root 访问权限的管理员访问权限。这是一个旧的,目前被认为是未使用的存储库,我们希望保存它以防万一某些项目再次需要。此外,使用svnadmin load 布局新存储库的方式非常复杂。 svn:ignore 错误有简单的修复方法吗?或者更简单的方法来移动整个东西?

谢谢

【问题讨论】:

你能从源代码编译颠覆吗?似乎有一种简单的方法可以修补“svnrdump load”代码,以便以与 svn:mergeinfo 相同的方式即时将 CRLF 转换为 LF。 编译颠覆当然是可能的,但相当困难。我整个上午都在尝试它,但收效甚微。此外,SVN 1.7.5 中的svnrdump,我可以访问但不包含存储库的另一台机器上的版本,应该具有将非 LF 结尾转换为 LF 的功能(至少,源中有 cmets代码),但似乎并非如此...... 是的,如果你不知道一个秘密的方法,颠覆编译会变得复杂:vcs.atspace.co.uk/2012/06/29/… 我无法重现你的问题,无论我做什么,SVN 都会自动将 svn:ignore 转换为 LFs。但是你可以做的 --- 只需编辑 subversion/svnrdump/load_editor.c 的 'set_node_property' 函数来处理 svn:ignore 与在这个函数中处理 svn:mergeinfo 的方式完全相同(我的意思是 'svn_subst_translate_cstring2' 调用)。我相信这应该会有所帮助,尽管我没有尝试,因为我无法复制。 感谢您的帮助,我同意这确实是一个奇怪的问题。我也想知道为什么 SVN 不自动转换它,它就在源代码中,但它可能与旧版本有关。我已将 1.6.x 安装在不同的目录中,并试图查看通过较新版本转储文件是否会消除问题的原因,而不是事后修复它。我还将它们放入一个压缩包中,并可能在另一台机器上解压缩,转储,然后加载。我们拭目以待。再次感谢您的帮助,如果需要,我一定会尝试一下。 我在尝试使用svnadmin 的 v1.8.10 加载 repo 时遇到了同样的问题。实际上,转储是在同一台 PC 上使用相同的实用程序创建的——我只是从备份中恢复转储。我个人认为这是一个错误,因为创建的转储是一种“不可用”的方式。幸运的是,实用程序提供了一个“修复”:使用--bypass-prop-validation 选项,这对我有用。但同样,这种转换不能即时应用(例如,通过额外的--fix-crlf-prop-value)?因为现在在导入之后,我相信转储仍然会有那个“隐藏”的问题。 【参考方案1】:

您应该使用: svndumptool eolfix-prop svn:ignore

而不是: svndumptool eolfix

【讨论】:

以上是关于svn 的非 LF 行结束问题 svn:ignore on dump load的主要内容,如果未能解决你的问题,请参考以下文章

[No000098]SVN学习笔记5-分支,合并,属性,补丁,锁,分支图

StreamWriter 以 Lf 而不是 CrLf 结束行

[git] warning: LF will be replaced by CRLF | fatal: CRLF would be replaced by LF[ git 处理和修改行结束符(CRLF

vscode 中的LF CRLF

goland新建的文件默认是lf

git LF 和 CRLF换行的问题