作者姓名为 "/CN=myname"的 Git svn 克隆

标签 git git-svn

我正在尝试使用 git svn clone 命令在 Windows 7 上从 svn 切换到 git。

在我的一个存储库中,我尝试这样做:

git svn clone --stdlayout --no-metadata -A users.txt --username=/CN=john https://path/to/my/repo ./

这是我的users.txt 文件:

/CN=john = John Doe <john.doe@myself.com>

当我执行 git svn clone 时,没有任何显示,就像一切正常但没有文件被克隆一样。所以在 C:/Users/John/.suversion/servers 中,我设置了 neon-debug-mask = 256 来显示日志错误。

现在显示我的错误:Author:/CN=john not defined in users.txt file 所以我认为因为我的用户名中有一个相等的 git clone 命令无法正确解析数据。

我试过转义 /CN\=john 并引用 '/CN=john' "/CN=john" 但没有似乎有效。

有没有人知道处理这个问题的好方法?

谢谢

最佳答案

git-svn当前无法处理用户名中包含等号“=”的 SVN 用户。

Here is来自内部的相关代码 git-svn :

# '<svn username> = real-name <email address>' mapping based on git-svnimport:
sub load_authors {
            open my $authors, '<', $_authors or die "Can't open $_authors $!\n";
            my $log = $cmd eq 'log';
            while (<$authors>) {
                            chomp;
                            next unless /^(.+?|\(no author\))\s*=\s*(.+?)\s*<(.+)>\s*$/;
                            my ($user, $name, $email) = ($1, $2, $3);
                            if ($log) {
                                            $Git::SVN::Log::rusers{"$name <$email>"} = $user;
                            } else {
                                            $users{$user} = [$name, $email];
                            }
            }
            close $authors or croak $!;
}

...如您所见,用于从文件中提取用户名的正则表达式将仅考虑第一个“=”之前的文本作为 SVN 用户名的一部分。之后的所有内容都被视为 git 用户名的一部分。

这是 git-svn 中的错误.

我想到的可能的解决方法:

  • 我认为第一个.+?在那个正则表达式中应该是贪婪的,最后一个 .+非贪婪,即 next unless /^(.+|\(no author\))\s*=\s*(.+?)\s*<(.+?)>\s*$/;
    • 您可以向 git 项目提交修复补丁吗?
    • 您现在可以修补本地 git 脚本,并将其包含在项目的设置说明中
  • 您可以为 git svn 添加别名命令包括 --authors-prog每次选项,在你的.bash_profile
  • 你能在每个 git-svn 命令之前运行一个 perl 脚本吗?如果是这样,您可以编写 perl 代码来设置 $Git::SVN::Log::rusers$users{$user}直接?

关于作者姓名为 "/CN=myname"的 Git svn 克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16687094/

相关文章:

git - 克隆成功,但由于路径无效, check out 失败。路径问题是什么?

git - 将正则表达式语法转换为 glob(从 Mercurial 切换到 Git)

git - 如何实现不允许的 `git --no-ff --ff-only`

netbeans - 在 netbeans 中使用 git-svn

svn - git-svn 不提交给分支机构,只提交给主干

svn - 将 git-svn 与缺少 .git/svn/的现有仓库一起使用

git commit -a --file message.txt; git format-patch 从 message.txt 中删除换行符

git - 将主分支设置为最新标签

git-svn - 使用命令 "git svn clone -s svn+ssh://repo_url"克隆 repo 失败

git - TortoiseGit 克隆的 SVN 仓库是空的