Git 当分支不';不要排队
我怀疑这可能只是因为Git 当分支不';不要排队,git,svn,git-svn,Git,Svn,Git Svn,我怀疑这可能只是因为git和svn之间的阻抗不匹配,但我想征求SO社区的意见 我正在从事一个使用svn进行版本控制的项目。这不会改变,我也无法控制。我一直很高兴使用gitsvn在我的分支上进行工作。然而,我遇到了一个奇怪的问题,与SVN项目的奇怪设置方式有关 在SVN中,项目如下所示: 项目根 分支机构 我的分行 Dir1 Dir2 等等 树干 项目主管 Dir1 Dir2 等等 .git/config: [core] repositoryformatversio
git
和svn
之间的阻抗不匹配,但我想征求SO社区的意见
我正在从事一个使用svn
进行版本控制的项目。这不会改变,我也无法控制。我一直很高兴使用gitsvn
在我的分支上进行工作。然而,我遇到了一个奇怪的问题,与SVN项目的奇怪设置方式有关
在SVN中,项目如下所示:
- 项目根
- 分支机构
- 我的分行
- Dir1
- Dir2
- 等等
- 我的分行
- 树干
- 项目主管
- Dir1
- Dir2
- 等等
- 项目主管
- 分支机构
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[svn-remote "svn"]
url = http://svn-repo
fetch = project/trunk:refs/remotes/trunk
branches = project/branches/*:refs/remotes/*
tags = project/tags/*:refs/remotes/tags/*
创建分支时,它们是在trunk
下一级创建的。我也无法控制这一切
当我尝试从MyBranch
合并到trunk
时,我的树会向上合并一级。也就是说,MyBranch/Dir1
与trunk/Proj_Main/Dir1
没有关系。在本机的svn
中,它确实理解这种关系,我可以使用svn
工具进行合并,但是git
丢失了
是否有一种方法可以告诉
git
,master
指向trunk/Proj_Main
,而不仅仅是trunk
fetch = project/trunk/Proj_Main:refs/remotes/trunk
那应该可以。。。。但是,我不知道您是否需要再次从修订版1中提取,这样的更改才能正常工作。将提取行编辑为类似以下内容:
fetch = project/trunk/Proj_Main:refs/remotes/trunk
那应该可以。。。。但是,我不知道您是否需要再次从修订版1中获取,这样的更改才能正常工作。@eftshift0采用了正确的方法。有时候,挽救一个糟糕的局面是不可能的。我确保一切都与SVN同步,然后重新开始
git svn clone -r<start>:HEAD http://svn-repo/project \
--prefix=mine/ \
--trunk=trunk/Proj_Main --branches=branches --tags=tags \
--no-minimize-url
git svn克隆-r:HEADhttp://svn-repo/project \
--前缀=我的/\
--trunk=trunk/Proj_Main--branchs=branchs--tags=tags\
--没有最小化url
因为这是一个非常成熟的SVN回购协议,我不关心5年前的历史,为了时间,我限制了我克隆的范围
--前缀
基于中的建议
我没有使用-s
或-stdlayout
,而是明确指定了SVN中的布局方式。请注意,早期应用此方法的尝试遇到了抓取,可能与已删除的SVN分支有关。这是限制获取范围的另一个原因
--no minimize url
是由于服务器上存在其他回购协议。如果没有这个开关,git svn会提升一个级别,并在尝试解决分支、合并等问题时考虑所有回购协议。这对我来说不是一件好事。@eftshift0的方法是正确的。有时候,挽救一个糟糕的局面是不可能的。我确保一切都与SVN同步,然后重新开始
git svn clone -r<start>:HEAD http://svn-repo/project \
--prefix=mine/ \
--trunk=trunk/Proj_Main --branches=branches --tags=tags \
--no-minimize-url
git svn克隆-r:HEADhttp://svn-repo/project \
--前缀=我的/\
--trunk=trunk/Proj_Main--branchs=branchs--tags=tags\
--没有最小化url
因为这是一个非常成熟的SVN回购协议,我不关心5年前的历史,为了时间,我限制了我克隆的范围
--前缀
基于中的建议
我没有使用-s
或-stdlayout
,而是明确指定了SVN中的布局方式。请注意,早期应用此方法的尝试遇到了抓取,可能与已删除的SVN分支有关。这是限制获取范围的另一个原因
--no minimize url
是由于服务器上存在其他回购协议。如果没有这个开关,git svn会提升一个级别,并在尝试解决分支、合并等问题时考虑所有回购协议。这对我来说不是一件好事。在svn和git之间映射分支时,对于特定的分支,您可以指定分支的确切位置。如果您在初始化git svn时指定了-s
,那么它假定有一个名为trunk的分支。。。但是,如果适合您的环境,您可以指定trunk/whatever。也许您还可以添加.git/config中与svn相关的部分?至少设置为分支
或获取
的行。我使用了-s来初始化repo。问题是,事后我如何修复它?你的评论表明我想要的是可能的,我只是不够成熟,无法自己解决:)在svn和git之间映射分支时,对于特定的分支,你可以指定分支的确切位置。如果您在初始化git svn时指定了-s
,那么它假定有一个名为trunk的分支。。。但是,如果适合您的环境,您可以指定trunk/whatever。也许您还可以添加.git/config中与svn相关的部分?至少设置为分支
或获取
的行。我使用了-s来初始化repo。问题是,事后我如何修复它?你的评论表明,我想要的是可能的,我只是不够成熟,无法自己解决:)我可以简单地编辑.git/config,还是需要运行一些命令?在任何像样的文本编辑器上编辑文件都可以。。。。然后您可以尝试git svn fetch
。。祝你好运,我遇到了麻烦。。。上的服务器实际上承载许多SVN存储库。把整个东西放到我的git里会耗尽磁盘空间。当我按照您的建议编辑.git/config并运行git svn fetch
时,它会尝试拉取所有的repo,而不仅仅是project
,听起来更像是您应该花时间用适当的分支/fetch
行设置svn repo的布局,而不仅仅是使用git svn init-s
c