4

我正在尝试使用 git-svn 创建一个 svn 分支。存储库是用--stdlayout. 不幸的是,它会生成一个错误,指出“源和目标似乎不在同一个存储库中”。该错误似乎是由于它不包括源网址中的用户名。

$ git svn branch foo-as-bar -m "尝试把 Foo 变成 Bar。"

将 r1173 处的 svn+ssh://my.foo.company/r/sandbox/foo/trunk 复制到 svn+ssh://svnuser@my.foo.company/r/sandbox/foo/branches/foo-as-bar ...

尝试使用不受支持的功能:Source 和 dest 似乎不在同一个存储库中(src: ' svn+ssh://my.foo.company /r/sandbox/foo/trunk'; dst: ' svn+ssh: //svnuser@my.foo.company /r/sandbox/foo/branches/foo-as-bar') 在 /home/me/.install/git/libexec/git-core/git-svn 第 610 行

我最初认为这只是一个配置问题,检查.git/config并没有表明任何不正确的地方。

 [svn-remote "svn"]
     url = svn+ssh://svnuser@my.foo.company/r
     fetch = sandbox/foo/trunk:refs/remotes/trunk
     branches = sandbox/foo/branches/*:refs/remotes/*
     tags = sandbox/foo/tags/*:refs/remotes/tags/*

我正在使用git version 1.6.3.3.

谁能解释为什么会发生这种情况,以及如何最好地解决它?

4

2 回答 2

4

我认为这是 git-svn 中的一个错误,如果您在错误中观察到源存储库,则它缺少 url 的 svnuser@ 部分。这是因为 git-svn 使用来自提交消息的 svn 存储库?我不知道。我能够通过修改 git-svn perl 脚本以包含第 609 行上的硬编码 url 来使其工作。在您的情况下,第 609 行看起来像这样......

$src = "svn+ssh://svnuser@my.foo.company/r/sandbox/foo/trunk";

请注意,如果您的 git-svn 比我的更新/旧,这可能会有所不同。成功分支后,我删除了该行(因为我只需要分支两次。)我要提交错误报告。

另请注意,如果您使用的是非 svn+ssh 类型的存储库,例如 file:////home/r/sandbox/foo/trunk,这不是问题。

于 2009-08-13T19:33:41.023 回答
1

对此的实际修复在此补丁中,从邮件列表线程中获得:

diff --git a/git-svn.perl b/git-svn.perl
index dba0d12..650c9e5 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -663,7 +663,8 @@ sub cmd_branch {
        }
        $head ||= 'HEAD';

-   my ($src, $rev, undef, $gs) = working_head_info($head);
+   my (undef, $rev, undef, $gs) = working_head_info($head);
+   my $src = $gs->full_url;

        my $remote = Git::SVN::read_all_remotes()->{$gs->{repo_id}};
        my $allglobs = $remote->{ $_tag ? 'tags' : 'branches' };

请注意,对于 Danny 使用的同一修订版 1.6.3.3,我在 588 处找到了此特定行。在 Ubuntu Karmic 9.10 中,此脚本为/usr/lib/git-core/git-svn.

于 2010-05-06T00:51:34.523 回答