我正在尝试将git与具有以下粗略布局的svn存储库一起使用:
RepositoryHone
- ->文档
- -> ExtraDocuments
- ->游乐场
- -> Playground_dev
- -> Playground_balance_change
- ->工具
其中Playground包含主要开发分支(主干),而Playground_dev,playground_balance_change和其他未显示的是分支。
在分支中,布局是这样的:
- ->构建
- -> lib
- -> bin
- -> src
我主要是想和Playground和Playground_dev一起工作,所以我跑了:
git svn init svn :: //server.address:port / RepositoryHome -T操场-b操场_dev
git svn提取
但是,当我运行git branch -r
检查分支的导入方式时,我感到越来越恐惧,发现除了“起源/树干”之外,还有“分支”(例如“起源/ bin”,“ origin / lib”,“ origin / src”等等。
如何确保本地工作副本/ git存储库与服务器之间的分支正确映射?
由于过程需要大量时间(大约16个小时),是否有可能在不完全获取的情况下解决问题?
答案 0 :(得分:0)
对于git svn
选项-b
并不意味着“这是一个分支”,它的意思是“这是所有子目录都是分支的目录”,因此git svn init -b playground_dev
接受{{ 1}}作为分支。
我没有克服任何简单的方法。我建议将两次克隆到单独的存储库中并合并这些存储库。像这样:
playground_dev
最后一条命令从目录git svn clone svn::/server.address:port/RepositoryHome -T playground playground
git svn clone svn::/server.address:port/RepositoryHome -T playground_dev playground_dev
cd playground
git fetch ../playground_dev trunk:playground_dev
cd ..
rm -rf playground_dev
提取分支“ trunk”到当前目录中的新分支“ playground_dev”。
答案 1 :(得分:0)
可以通过两个步骤解决问题。
首先,删除所有错误跟踪的分支。
向存储库添加正确的分支。
要删除有问题的远程引用,可以使用git branch -r
找到它们,然后使用git branch -D
删除它们。
我还没有找到用于第二步的基于“适当”命令行的解决方案,但是幸运的是git-svn文档,更具体地说Configuration section提供了足够的细节来手动执行操作。
最重要的是,不能仅仅设置一个分支来跟踪svn remote;在配置中,只能识别“分支”键,这需要使用通配符替换。
因此,您可以手动添加另一个svn远程-在.git/config
中,复制一个已经存在的svn远程,更改远程名称和“ fetch”键的值。这样一来,您可以设置一个分支,该分支对应一个远程svn分支,然后照常工作。