将凌乱的svn存储库转换为git
我正在尝试将稍微混乱的svn存储库转换为git。我试着读了一些指南和其他一些问题,但对于什么是最好的方法,我有点不知所措 SVN存储库具有顶级文件夹结构,其中包含文件夹,如:将凌乱的svn存储库转换为git,git,svn,merge,Git,Svn,Merge,我正在尝试将稍微混乱的svn存储库转换为git。我试着读了一些指南和其他一些问题,但对于什么是最好的方法,我有点不知所措 SVN存储库具有顶级文件夹结构,其中包含文件夹,如: |- client |- server |- website |- misc 大多数文件夹具有“标准”svn结构:即主干、分支和标记。然而,有些只是平面文件夹 |- client |- trunk |- branches |- tags |- server |- trunk
|- client
|- server
|- website
|- misc
大多数文件夹具有“标准”svn结构:即主干
、分支
和标记
。然而,有些只是平面文件夹
|- client
|- trunk
|- branches
|- tags
|- server
|- trunk
|- branches
|- tags
|- website
|- misc
不同文件夹之间的分支和标记可能具有相同的名称。例如,客户端和服务器文件夹都可能有一个名为1.0
的分支
我设法使用转换单个文件夹,它似乎可以很好地获取历史记录和分支。我可以为每个文件夹创建一个单独的git存储库。但是,我希望最终将所有内容都保存在一个存储库中
在维护每个文件夹的分支、标记和历史记录的同时,将这些文件夹(现在是git存储库)合并为一个文件夹的最佳方式是什么?使用,我似乎丢失了提交历史和合并自存储库的分支。。。或者我只是错过了一些重要的步骤或者做错了什么
否则,在每个文件夹上分别使用
svn2git
可能不是从svn迁移到git的最佳方法?在转换为git之前,我会将svn存储库重写为以下结构:
- trunk
|-client
|-server
|-website
`-misc
- branches
|-client
|-server
|-website
`-misc
- tags
|-client
|-server
|-website
`-misc
要重组您的svn存储库,您必须svnadmin dump
将存储库转储到一个文件中,更新该文件中的所有路径,然后svnadmin将更新的转储文件加载到一个新的存储库中
查看转储文件的结构—使用支持搜索/替换的编辑器可以轻松完成实际的重构。但它需要二进制安全,因为除了ascii元数据之外,转储文件还包含原始二进制数据(存储库中的二进制文件)。我最终选择了上的方法
基本上:
- 为svn存储库中的每个子文件夹创建git项目(使用svn2git)
- 创建新的git存储库将所有存储库合并到
- 将每个项目(包括所有分支)添加为远程:
git remote add alpha <url/path-to-alpha-repo>
git remote add bravo <url/path-to-bravo-repo>
git remote add charlie <url/path-to-charlie-repo>
for r in $(git remote); do
git config remote.$r.fetch \
"$(git config remote.$r.fetch | sed -e 's.remotes.heads/all.')"
git config --add remote.$r.fetch \
"$(git config remote.$r.fetch | sed -e 's.heads.tags.g')"
git config remote.$r.tagopt --no-tags
done
git remote update
git远程添加alpha
git远程添加bravo
git远程添加charlie
对于r,单位为美元(吉特远程);做
git config remote.$r.fetch\
“$(git config remote.$r.fetch | sed-e's.remotes.heads/all.””
git config--添加远程。$r.fetch\
“$(git config remote.$r.fetch | sed-e's.heads.tags.g')”
git config remote.$r.tagopt--无标记
完成
git远程更新
- 将合并的存储库推送到远程存储库(从现在起,这将是“官方”存储库)
谢谢。听起来这是一种有趣的方法,但您是否知道有哪些资源/工具可以帮助您安全地完成此任务?我快速查看了一个svn转储文件,但不知道从哪里开始(更不用说处理合并问题了,例如客户端和服务器同名的两个分支…)-在转储文件中搜索节点路径。如果您执行了复制/移动操作,Node copyfrom path
可能也与此相关。老实说,这件事似乎超出了我的想象。。。在如此大规模的情况下进行一些正则表达式搜索/替换,在svn内部转储格式上乱搞并不是我所希望的解决方案。谢谢你建议这个方向!