10

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

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

本质上,我使用了最初的克隆,--prefix=Project所以我最终使用了Project/trunkProject/feature-branch作为我的远程跟踪分支。我想要的是trunkjust be calledtrunkfeature-branchbe called svn/feature-branch

4

2 回答 2

9

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

.git/config我更新了 fetch、branchs 和 tags 设置以更新本地 refs。它是:

[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/remotes我将主干从文件夹中移出,并将Project剩余的引用Project移到一个名为svn. 结构是:

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

我改为:

  • 遥控器
    • 树干
    • svn
      • 特征分支

我还在.git/svn/refs/remotes/.

最后我触发了git svn fetch. 我必须指定 -r 参数以限制为我用于初始克隆的相同起始修订,但它似乎没有重新获取旧修订。

于 2011-02-13T20:58:37.853 回答
3

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

请参阅Johan Herland ( ) 的提交 fe191fc,它强调了您现在应该有一个前缀的事实(并且没有一个没有前缀的 svn 分支,例如 ' '):jherlandtrunk

Git 2.0: :如果没有给出则git svn设置默认值--prefix='origin/'--prefix

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

git-svn默认情况下,将其 Subversion-tracking 引用直接放在refs/remotes/*. 这与 Git用于存储远程跟踪分支
的约定背道而驰。refs/remotes/$remote/*

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

于 2014-07-12T15:14:32.673 回答