如何更改Git-Svn存储库中的前缀映射?

时间:2011-02-13 19:36:04

标签: git-svn prefix

我使用git-svn创建了一个SVN存储库的Git Clone。执行此操作时,我指定--prefix选项为我的远程分支添加前缀。我现在想摆脱这个前缀。

有没有办法在不重新克隆存储库的情况下更新或删除前缀?

基本上我使用--prefix=Project进行了初始克隆,因此我最终使用Project/trunkProject/feature-branch作为我的远程跟踪分支。我想要的是让trunk被称为trunkfeature-branch被称为svn/feature-branch

2 个答案:

答案 0 :(得分:9)

我已经完成了以下似乎有效的工作。

.git/config中,我更新了提取,分支和标记设置以更新本地引用。那是:

[svn-remote "svn"]
        url = http://subversion/......
        fetch = trunk:refs/remotes/Project/trunk
        branches = branches/*:refs/remotes/Project/*
        tags = tags/*:refs/remotes/Project/tags/*

我改为

[svn-remote "svn"]
        url = http://subversion/......
        fetch = trunk:refs/remotes/trunk
        branches = branches/*:refs/remotes/svn/*
        tags = tags/*:refs/remotes/svn/tags/*

.git/refs/remotesProject我将Project文件夹中的主干和svn内的其余引文移动到名为.git/svn/refs/remotes/的新文件夹中。结构是:

  • 遥控器
    • 项目
      • 躯干
      • 特征分支

我改为:

  • 遥控器
    • 躯干
    • SVN
      • 特征分支

我还在git svn fetch内对文件夹进行了同样的重组。

最后我触发了{{1}}。我必须指定-r参数来限制我用于初始克隆的相同起始修订版,但它似乎没有重新获取旧修订版。

答案 1 :(得分:3)

注意:当前的解决方案可能不再适用于git 2.0+(2014年4月)

通过commit fe191fc查看Johan Herland (jherland,其中突出显示您现在假设拥有前缀的事实(并且具有svn分支没有前缀,如' trunk'):

Git 2.0:git svn:如果未提供--prefix='origin/',请设置默认--prefix

默认情况下没有前缀是有问题的:

  默认情况下,

git-svn会将其Subversion跟踪引用直接放在refs/remotes/*中   这违背了Git使用 refs/remotes/$remote/* 存储远程跟踪分支的惯例。

     

此外,将git-svn与常规git遥控器相结合可能会在refs / remotes下冒犯refs的风险(例如,如果你有git remote名为" tags"使用" v1"分支,它将与来自Subversion的" v1"标记的git-svn跟踪分支重叠。