我有一个Subversion服务器,其中有几个不同的项目,采用标准布局,如下所示:
ProjectA/
trunk/
branches/
tags/
ProjectB/
trunk/
FolderOfBinaries/
SourceFolderA/
SourceFolderB/
SourceFolderC/
branches/
tags/
v1.0/
v1.1/
v2.0/
ProjectC/
trunk/
branches/
tags/
ProjectB将要迁移到Git,但不是使用标准的克隆方式。我想把项目分成两个Git仓库 - 一个用于存放变化相对频繁的大型二进制文件夹,另一个用于存放其他所有内容。我已经完整地克隆了该仓库,它有几GB大小,但二进制文件夹可能占据了其中90%,并且运行git gc
需要很长时间。如果开发人员需要,我宁愿拥有一个小而快速的仓库,然后将二进制文件夹作为子模块添加到其中。
到目前为止,我找到了两个潜在的选项。首先,我可以像Git Book中所示使用git branch-filter
尝试从历史记录中删除二进制文件夹。其次,我可以使用svndumpfilter
将当前的Subversion仓库分成两个部分,然后分别使用git svn clone
。
我的问题是,所有的历史记录,特别是分支和标签,会发生什么?即使在两个标签之间二进制文件夹可能没有发生变化,我仍然想知道该文件夹在每个标签中是什么样子的。这是否可能?
编辑:二进制文件夹不是构建工件(*.class,*.o,*.dll等),因此我不能仅剥离它并将其作为外部文件。它充满了需要进行版本控制的第三方程序输出的二进制文件(例如OpenOffice文档,Photoshop文件等)。
--include
和--exclude
参数中也要包括 branches 和 tags 目录。我没有包括它们,因为我不想让语法变得过于复杂。您可以使用svn2git
的参数来指定标签和分支目录的位置。 - David W.