在git svn中使用二进制文件处理大型存储库
在我的工作场所,有一个大型svn存储库(+80.000修订版),其中包含大量二进制文件。我正在用git svn进行试验,但克隆整个历史似乎是不切实际的(完成这个过程需要100 GB以上的内存,几乎一周的时间) 我尝试过克隆修订的一个子集(最后10.0000次),效果相当不错。这种方法的主要缺点是,错误只会出现在我获取的最旧版本上在git svn中使用二进制文件处理大型存储库,git,svn,git-svn,binaries,Git,Svn,Git Svn,Binaries,在我的工作场所,有一个大型svn存储库(+80.000修订版),其中包含大量二进制文件。我正在用git svn进行试验,但克隆整个历史似乎是不切实际的(完成这个过程需要100 GB以上的内存,几乎一周的时间) 我尝试过克隆修订的一个子集(最后10.0000次),效果相当不错。这种方法的主要缺点是,错误只会出现在我获取的最旧版本上 理想情况下,我希望克隆源文件的整个历史记录,而仅克隆二进制文件的最后一千个修订版本。这有可能吗?还有其他建议吗?我在工作场所遇到了同样的问题,因此我将分享我的解决方案
理想情况下,我希望克隆源文件的整个历史记录,而仅克隆二进制文件的最后一千个修订版本。这有可能吗?还有其他建议吗?我在工作场所遇到了同样的问题,因此我将分享我的解决方案 不幸的是,解决办法不是按照你的设想去做(尽管我最初也这么想)。解决方案是重构存储库,将二进制文件与源文件分离。这说起来容易做起来难,因为你需要让你的部门参与进来,这会影响你团队的工作流程,但如果你能做到这一点,这将是值得的 实际上有三种类型的文件需要考虑:
- 应在存储库中隔离源。这很容易理解李>
- 第三方二进制文件也可以提交到存储库,尽管通过
svn:externals导入它们可以避免大量潜在的重复。这些二进制文件并没有那么糟糕,因为它们不会有太多的历史记录李>
- 生成的二进制文件(编译的输出)是迄今为止最糟糕的!这些都会随着每次编译而改变,维护历史是没有意义的。VCS系统并不打算处理这个问题。一些公司喜欢提交二进制文件,因为他们可以在不编译的情况下查看最新的加载,但这会带来巨大的成本李>
我一直在实现的解决方案是从一个命令生成主要产品构建和包中的所有二进制文件。然后,我将从构建机器构建、打包和归档夜间(或按需)构建。人们可以从构建机器获取最新的二进制文件,只要软件包安装友好,这比执行
svn up
更容易,因为您不会有太多更新/冲突/合并。这使生成的二进制文件完全脱离SVN。我在工作场所遇到了同样的问题,因此我将分享我的解决方案
不幸的是,解决办法不是按照你的设想去做(尽管我最初也这么想)。解决方案是重构存储库,将二进制文件与源文件分离。这说起来容易做起来难,因为你需要让你的部门参与进来,这会影响你团队的工作流程,但如果你能做到这一点,这将是值得的
实际上有三种类型的文件需要考虑:
- 应在存储库中隔离源。这很容易理解李>
- 第三方二进制文件也可以提交到存储库,尽管通过
svn:externals导入它们可以避免大量潜在的重复。这些二进制文件并没有那么糟糕,因为它们不会有太多的历史记录李>
- 生成的二进制文件(编译的输出)是迄今为止最糟糕的!这些都会随着每次编译而改变,维护历史是没有意义的。VCS系统并不打算处理这个问题。一些公司喜欢提交二进制文件,因为他们可以在不编译的情况下查看最新的加载,但这会带来巨大的成本李>
我一直在实现的解决方案是从一个命令生成主要产品构建和包中的所有二进制文件。然后,我将从构建机器构建、打包和归档夜间(或按需)构建。人们可以从构建机器获取最新的二进制文件,只要软件包安装友好,这比执行
svn up
更容易,因为您不会有太多更新/冲突/合并。这使生成的二进制文件完全脱离SVN。您应该研究Git LFS。可能是@OliverCharlesworth和@PeterReid的重复。您读过这个问题吗?这是关于git svn的git svn
,原则上不是关于git中的二进制文件。是的,我错过了一个重要的三个字母的单词:)git不是为此而设计的,git lfs不会有多大帮助。你应该研究git lfs。可能是@OliverCharlesworth和@PeterReid的重复。你读过这个问题吗?这是关于git svn的git svn
,原则上不是关于git中的二进制文件。是的,我错过了一个重要的三个字母的单词:)git不是为此而设计的,git lfs不会有多大帮助。