将 SVN 存储库导入 Git 时未定义作者

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

我正在尝试将 SVN 存储库导入到 Git 中。当我运行此命令时:

git svn --authors-file=/path/to/authors --trunk=trunk clone https://my-repo/project .

或者这个命令:

svn2git https://my-repo/project --no-minimize-url -v --authors /path/to/authors

两者都返回此错误:

Author: patrick  not defined in /path/to/authors file

..但据我所知,我的作者文件没有任何问题:

$ grep patrick /path/to/authors
patrick = Patrick <[email protected]>

该错误直到版本 8700 才会发生,因此它必须正确获取其他作者姓名。

这里可能发生了什么?谢谢。

git git-svn
10个回答
53
投票

我在 Windows 上尝试执行此操作时遇到了同样的问题。结果发现,我存储作者的文件的编码设置为UTF-8,而不是无BOM的UTF-8。由于“with BOM”版本在文件开头添加了一些额外的字节,因此从未找到列表中的第一作者。


17
投票

我遇到了同样的问题,但原因实际上相当不同:我使用 Powershell 从 SVN 转储作者列表,但我没有意识到它将结果保存为 UTF-16 文件。

事实证明 git (至少,直到 git for windows 版本 2.16.1)无法使用 UTF-16 文件。将文件转换为 UTF-8 对我来说很有效。


6
投票

我也有同样的问题。 authors.txt的格式严格遵守form

svn name = user name &#8249;email&#8250;

如:

cruise-control = Cruise Control &#8249;[email protected]&#8250;
user1 = User1 Lastname1 &#8249;[email protected]&#8250;
user2 = User2 Lastname2 &#8249;[email protected]&#8250;

例如,这种格式不起作用:

user1 = [email protected]

4
投票

我看到了同样的错误,但原因不同。我将在这里发布我的解决方案作为“答案”,因为它可能是找到这个问题的其他人的答案(即使它不是OP问题/问题的解决方案/答案):

我正在项目结账时运行

svn log
。但我只检查了
trunk
,因此只包含对主干进行更改的作者。这显然是大多数作者的想法,因此克隆会运行很长时间(超过 90 分钟),然后才会因错误而崩溃。

由于检查整个项目根目录不是一个可行的选择(它有超过 500 个分支和标签,转储超过 600 GB),我发现我可以在远程存储库上运行

svn log
,如下所示:

svn log -q svn://server/path-to-project-root

实际命令还对输出进行了一些过滤和格式化:

svn log -q svn://server-url/path-to-project-root | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt

2
投票

有两个问题:

我通过为每个作者分配唯一的电子邮件地址解决了第一个问题。

此外,用户名是“patrick”。我不知道这是怎么发生的,但通过使用 svnadmin 我能够将该昵称的所有实例更改为“patrick”。


1
投票

查找作者姓名开头的空格并删除空格。 如果这没有帮助,请尝试将作者姓名移至文件顶部。


1
投票

我遇到了与问题相同的错误,对于我的解决方案来说,记事本中没有显示额外的换行符或回车符。我的条目

john = John <[email protected]>
在记事本中显示得很好。虽然在 Notepad++ 中打开时我注意到它的格式如下:

john =
John <[email protected]>

我在 Notepad++ 中将其修复为一行后,它似乎对我来说工作得很好。


1
投票

我的文件中有 2 个用户,一个接一个,编码默认设置为 Ucs-2 LE BOM。将编码更改为 UTF-8 对我有用。


0
投票

当心你的终点线。 我的文件采用 UTF-8 格式,但结尾是“mac 风格”,尽管我使用的是 Windows。

现在,有了良好的结束线 (cr + lf) 文件就被接受了


0
投票

以上解决方案都不适合我。 但删除作者使其有效:

svn2git svn://<hosts>/path/to/repo --username <username>

或者运行以下命令(对于我的情况):

git svn init --prefix=svn/ --username='<username>' --no-metadata --trunk='trunk' --tags='tags' --branches='branches' svn://<hosts>/path/to/repo
git svn fetch
© www.soinside.com 2019 - 2024. All rights reserved.