如何使用git svn将具有非法分支名称的svn repository转换为git?

如何使用git svn将具有非法分支名称的svn repository转换为git?,svn,git,git-svn,Svn,Git,Git Svn,我试图使用git svn将公司svn repo加载到git中,但遗憾的是,我的一位同事创建了一个分支,分支名称中包含非法字符(\)。现在,当我尝试导入整个历史记录时,git退出时出现一个错误: fatal: Cannot lock the ref 'refs/remotes/feature-\\-bar'. update-ref -m r4 refs/remotes/feature-\\-bar 471d9622546803b3712a436c2e2ed6b1490c829a: command

我试图使用git svn将公司svn repo加载到git中,但遗憾的是,我的一位同事创建了一个分支,分支名称中包含非法字符(\)。现在,当我尝试导入整个历史记录时,git退出时出现一个错误:

fatal: Cannot lock the ref 'refs/remotes/feature-\\-bar'.
update-ref -m r4 refs/remotes/feature-\\-bar 471d9622546803b3712a436c2e2ed6b1490c829a: command returned error: 128
我可以不使用分支,因为它已经是过去的事情了,但是我不想丢失所有的历史,直到分支被合并为止。我尝试了--ignore path选项,但我无法让它工作,主要是因为我怀疑它只处理分支/主干路径(?)内的路径。
有人知道解决这个问题的方法吗?

我会在任何当前分支机构的负责人处启动git回购——手动使分支机构的名称对git友好。对于较旧的历史记录,请在需要时以这种方式导入。有时,导入遵循完全不同的机制的svn历史记录是不值得的。

我也不得不忽略一些分支,因为它们使用非法字符,我无法使用
git svn
获取它们(在我的例子中,字符是
/

解决方案1:为每个分支手动添加其他svn存储库

使用
git svn init-s[svn repository url]
初始化存储库后,我在
.git/config
中对分支配置进行了注释:

[svn-remote "svn"]
    url = [svn-base-url]
    fetch = [project-name]/trunk:refs/remotes/trunk
    #branches = [project-name]/branches/*:refs/remotes/*
    tags = [project-name]/tags/*:refs/remotes/tags/*
为了以后添加分支,我将为每个分支添加新的svn位置,例如

[svn-remote "svn-your-branch"]
    url = [svn-base-url]
    fetch = [project-name]/branches/your-branch:refs/remotes/your-branch
来源:或具有某些实际配置,例如

解决方案2:在配置中明确说明您喜欢的分支

您可以定义要在
.git/config
中获取的分支:

[svn-remote "svn"]
    url = [svn-base-url]
    fetch = [project-name]/trunk:refs/remotes/trunk
    branches = [project-name]/branches/{your-branch-1|your-branch-2}:refs/remotes/*
    tags = [project-name]/tags/*:refs/remotes/tags/*
如果在签出svn中的所有内容后再添加分支是安全的,我更喜欢这个解决方案

资料来源:

为什么忽略路径不起作用?

根据git svn--ignore path只忽略提交的内容。因此,它仍然会为分支名称创建一个ref。如果分支名称包含非法字符,则此操作失败。(此外,与您的假设相反,
忽略路径
匹配除URL部分之外的所有内容,例如,与上面的配置相匹配,例如
项目名称/branchs/your-branch-1