我使用git-svn创建了一个SVN存储库的Git Clone。执行此操作时,我指定--prefix
选项为我的远程分支添加前缀。我现在想摆脱这个前缀。
有没有办法在不重新克隆存储库的情况下更新或删除前缀?
基本上我使用--prefix=Project
进行了初始克隆,因此我最终使用Project/trunk
和Project/feature-branch
作为我的远程跟踪分支。我想要的是让trunk
被称为trunk
而feature-branch
被称为svn/feature-branch
。
答案 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/remotes
内Project
我将Project
文件夹中的主干和svn
内的其余引文移动到名为.git/svn/refs/remotes/
的新文件夹中。结构是:
我改为:
我还在git svn fetch
内对文件夹进行了同样的重组。
最后我触发了{{1}}。我必须指定-r参数来限制我用于初始克隆的相同起始修订版,但它似乎没有重新获取旧修订版。
答案 1 :(得分:3)
注意:当前的解决方案可能不再适用于git 2.0+(2014年4月)
通过commit fe191fc查看Johan Herland (jherland
,其中突出显示您现在假设拥有前缀的事实(并且不具有svn分支没有前缀,如' trunk
'):
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跟踪分支重叠。