我正在尝试创建svn branch using git-svn。存储库是使用--stdlayout
创建的。不幸的是,它会生成一个错误,指出“Source和dest似乎不在同一个存储库中”。该错误似乎是因为它不包括源URL中的用户名。
$ 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 /沙箱/富/躯干'; DST: '的 SVN + SSH://svnuser@my.foo.company / R /沙箱/富/分支/富-作为杆') at /home/me/.install/git/libexec/git-core/git-svn line 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
。
任何人都可以阐明为什么会出现这种情况,以及如何最好地解决这个问题?
答案 0 :(得分:4)
我认为这是git-svn中的一个错误,如果您在错误中观察到源存储库,则错过了url的svnuser @部分。这是因为git-svn使用了commit messsage中的svn repo?我不确定。我能够通过修改git-svn perl脚本来使其工作,以在609行包含硬编码的URL。在你的情况下,行609看起来像这样......
$ src =“svn + ssh://svnuser@my.foo.company/r/sandbox/foo/trunk”;
请注意,如果您的git-svn比我的更新/更旧,则可能会有所不同。在我成功分支后,我删除了该行(因为我只需要分支两次。)我要去提交错误报告。
另请注意,如果您使用的是非svn + ssh类型的repo,例如file://// home / r / sandbox / foo / trunk这不是问题。
答案 1 :(得分:1)
此修补程序的实际修复程序是从the mailing list thread获得的
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
。