我有一个repo git的问题,我想迁移到svn。 在这个仓库中,一些分支是在名称中创建的。当我启动命令git svn cloneI有错误
fatal: Not a valid object name refs/remotes/origin/My branch
cat-file commit refs/remotes/origin/My branch: command returned error: 128
我用svndumpfilter排除了我的回购,但问题是一样的。 我尝试克隆使用ignore-path选项,但是一样!!
git svn clone --trunk=/Projet/trunk --branches=/Projet/branches --tags=/Projet/tags --authors-file=authors.txt file:///home/repo_svn/nom ../temp --ignore-path=".*(?:refs/remotes/origin/My branch|refs/remotes/origin/My%20branch)"
你有解决方案吗? 最好的问候
答案 0 :(得分:0)
这对您来说可能为时已晚,但是在其他任何人无法访问此页面的情况下,我们也遇到了这个问题。崩溃的原因确实是由于分支名称中的空格所致,特别是git-svn.perl中的cmt_metadata()
子调用具有未转义分支名称的cat-file
。我以为调整这种方法变得更健壮并不难。
但是。
虽然这是崩溃的原因,但事实证明,即使碰到了这段代码也表明我们有其他问题。具体来说,在git配置中有多个branches
条目时,某些规则的右侧存在冲突。我们有类似
branches=/branches/a*:/refs/remotes/origin/*
branches=/branches/b*:/refs/remotes/origin/*
如果您在--branches=/branches/a* --branches=/branches/b*
或init
命令行中使用clone
,则我认为是默认配置。事实证明,这些规则的右手侧和左手侧都非常喜欢区分。因此,从头开始使用git svn init
,然后编辑.git/config
,然后添加:
branches=/branches/a*:/refs/remotes/origin/a/*
branches=/branches/b*:/refs/remotes/origin/b/*
并启动git svn fetch
似乎已经解决了它。分支仍然有空格,但是不再点击不喜欢它们的代码。
答案 1 :(得分:0)
在我的 Mac 上,我编辑过:
/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/git-svn
去了这个 sub 并添加了对quotemeta的调用,似乎已经为我解决了这个问题,ymmv。
sub cmt_metadata {
return extract_metadata((grep(/^git-svn-id: /,
command(qw/cat-file commit/, quotemeta(shift))))[-1]);
}
然后 git svn clone 工作正常。