使用分支名称

时间:2018-06-07 13:32:44

标签: git svn clone space

我有一个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)"

你有解决方案吗? 最好的问候

2 个答案:

答案 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 工作正常。