SVN 到 Git 迁移 - 未定义作者,但确实如此

问题描述 投票:0回答:5

类似的问题之前曾被问过(比如this),但答案并没有为我解决。我的作者文件如下所示:

cmannett85 = cmannett85 <cmannett85@###>
cbamber85 = cmannett85 <cmannett85@###>
www-data = cmannett85 <cmannett85@###>

我得到的错误是;

Author: cmannett85 not defined in users.txt file

此错误发生在大约第 1500 次提交时,其他作者条目都很好,因此条目的基本结构必须正确。我在 SO 上看到的大多数问题都集中在 SVN 用户名前面/附加了一个空格,但正如您从粘贴的错误中看到的那样 - 没有多余的空格。

我还认为可能是我将一个用户名映射为一个相同的用户名,所以我更改了 Git 用户名,但没有什么区别。我什至尝试在 Windows 和 Unix 格式之间切换行尾,但同样没有改变。

我使用以下方法调用该操作:

$ git svn clone https://subversion.assembla.com/svn/#### --authors-file=users.txt --no-metadata -s ####

我尝试删除

--no-metadata
arg,但没有区别。谁能看出我哪里出了问题吗?

更新

按照Lazy Badger的建议,我跑了:

$ svn log --xml | grep author | sort -u | perl -pe 's/.>(.?)<./$1 = /'

它返回这个:

<author>cbamber85</author>
<author>cmannett85</author>
<author>www-data</author>
git svn git-svn
5个回答
5
投票

刚刚偶然发现了这个问题,最终通过从以UTF-8文件编码的authors.txt文件中删除字节顺序标记来解决这个问题,从而使Linux将其视为纯文本ASCII文件而不是UTF-8。

由于我的文件在 Windows 上开始作为 Powershell 输出,更普遍的正确答案是简单文本永远不是简单文本,这使得 Lazy Badger 的答案成为最好的,因为它避免了掩盖这些差异的麻烦。


3
投票

我想我找到了问题和解决方案:

我的author.txt在转换为ANSI后被编码为UCS2 Little Endian,文件大小下降到50%并且它有效。

文件大小从 70KB 下降到 35KB,但我认为这不是解决方案。

我的author.txt是使用Windows Active Directory中的powershell脚本创建的。

我还将行尾从 CR LF 更改为 LF,但你提到,你也已经尝试过这个。所以我认为这是一个字符编码问题。


2
投票

我确信 - 在克隆之前从纯 SVN 数据准备用户列表将是更安全的方式

我是这样的:

svn log --xml URL | grep "author" | sort -u | ...strip xml-tags here...
    

2
投票
我刚刚遇到了与此处描述的相同的问题,事实证明,通过在记事本++中创建一个新的.txt文件(原始作者文件是由我在其他地方找到的powershell命令生成的),然后复制原始文件的内容文件写入新的 .txt 文件,然后提取工作。

原来原始文件被编码为 UCS-2 Little Endian(如上所述),但 UTF-8 的默认编码有效。我不需要更改行结尾。


0
投票
确保列表中的最后一个用户以 LF(换行)结尾!我的没有以 LF 结尾,并且得到了同样的错误:

Author: SYSTEM not defined in authors-transform.txt file

除此之外,还需要使用无 BOM 的 UTF8,并使用 LF 而不是 CRLF。
如果列表中的最后一个用户不是以 LF 结尾,您也可能会收到此错误。

© www.soinside.com 2019 - 2024. All rights reserved.