大型二进制文件和> 1TB存储库的版本控制?

时间:2011-03-08 15:12:54

标签: svn git version-control packaging

很抱歉再次提出此主题,因为soo many other个问题已经相关 - 但没有一个直接解决我的问题。

我正在搜索的是一个很好的版本控制系统,只能处理两个简单的要求:

  1. 存储大型二进制文件(> 1GB)
  2. 支持大于1TB的存储库(是的,那是TB)
  3. 为什么呢?我们正在为下一次大型操作系统部署重新打包几千个软件应用程序,我们希望这些软件包能够遵循版本控制。

    到目前为止,我已经有了一些SVN和CVS的经验,但是我对两个大二进制文件的性能都不太满意(一些MSI或CAB文件将> 1GB)。此外,我不确定它们是否能够很好地适应我们在未来2 - 5年内预计的数据量(就像我说的那样,估计> 1TB)

    那么,你有什么建议吗? 我目前也在研究SVN Externals以及Git Submodules,虽然这意味着每个软件包都有几个单独的存储库,但我不确定这是我们想要的......

10 个答案:

答案 0 :(得分:9)

查看Boar,“简单版本控制以及照片,视频和其他二进制文件的备份”。它可以轻松处理大型文件和大型存储库。

答案 1 :(得分:4)

版本控制系统用于源代码,而不是二进制构建。您最好只使用标准网络文件服务器备份磁带进行二进制文件备份 - 即使在您拥有源代码控制时基本上没有必要,因为您可以随时重建任何版本的任何二进制文件。试图将二进制文件放入源代码控制中是一个错误。

您真正在谈论的是一个称为配置管理的过程。如果您拥有数以千计的独特软件包,那么您的企业应该拥有一个配置管理器(一个人,而不是软件;-)),他们负责管理开发,测试,发布,每个客户发布等所有配置(也称为构建)。

答案 2 :(得分:2)

2017年5月更新:

Git,addition of GVFS (Git Virtual File System),几乎可以支持任意大小的任意数量的文件(从Windows存储库本身开始:“The largest Git repo on the planet”(3.5M文件,320GB)。
这还不是> 1TB,但它可以在那里扩展。

GVFS的工作在上游慢慢提出(即Git本身),但这仍然是一项正在进行中的工作。
GVFS是在Windows上实现的,但很快就会在Mac上完成(因为Windows开发Office for Mac需要它的团队)和Linux。


2015年4月

Git实际上可以被视为大数据的可行VCS,Git Large File Storage (LFS)(GitHub,2015年4月)。

git-lfs(请参阅 git-lfs.github.com )可以通过支持它的服务器进行测试:lfs-test-server(或直接使用github.com本身):
您只能在git仓库中存储元数据,在其他地方存储大型文件。

https://cloud.githubusercontent.com/assets/1319791/7051226/c4570828-ddf4-11e4-87eb-8fc165e5ece4.gif

答案 3 :(得分:2)

老问题,但也许值得指出Perforce正在许多大公司中使用,特别是在游戏开发公司中,其中包含许多大型二进制文件的多Terabyte存储库。

(免责声明:我在Perforce工作)

答案 4 :(得分:1)

当你真的必须使用VCS时,我会使用svn,因为svn不需要将整个存储库复制到工作副本。但它仍然需要重复的磁盘空间量,因为它为每个文件都有一个干净的副本。

使用这些数据量,我会查找文档管理系统,或者(低级别)使用具有已定义输入过程的只读网络共享。

答案 5 :(得分:1)

根据您描述的数据规模,依靠一些可以提供filesystem-accessible snapshots和单实例存储/ block level deduplication的组合的NAS设备可能会更好一些...

(这个问题还提到.cab和.msi文件:通常你选择的CI software有一些归档构建的方法。这就是你最终的目标吗?)< / p>

答案 6 :(得分:1)

有几家公司的产品用于“广域文件共享”。他们可以将大文件复制到不同的位置,但是具有分布式锁定机制,因此只有一个人可以处理任何副本。当一个人签入更新的副本时,该副本将复制到其他站点。主要用途是CAD / CAM文件和其他大文件。请参阅Peer Software(http://www.peersoftware.com/index.aspx)和GlobalSCAPE(http://www.globalscape.com/)。

答案 7 :(得分:1)

这是一个老问题,但一个可能的答案是https://www.plasticscm.com/。他们的VCS可以处理非常大的文件和非常大的存储库。几年前我们选择时,他们是我的选择,但管理层将我们推到了其他地方。

答案 8 :(得分:1)

  
      
  • 存储大型二进制文件(&gt; 1GB)
  •   
  • 支持大于1TB的存储库(是的,那是TB)
  •   

是的,这是Apache Subversion应该完全支持的案例之一。

  

到目前为止,我已经有了一些SVN和CVS的经验,但我不是   对大二进制文件的性能非常满意   (一些MSI或CAB文件将> 1GB)。另外,我不确定他们是否   我们预计在接下来的2-5中会有大量的数据   年(就像我说的,估计> 1TB)

最新的Apache Subversion服务器和客户端在控制这样的数据量时应该没有问题,并且它们可以完美地扩展。此外,还有各种存储库复制方法可以提高性能,以防您有多个站点与开发人员在同一个项目上工作。

  

我目前也正在研究SVN外部和Git   子模块,虽然这意味着几个单独的存储库   每个软件包,我不确定这是我们想要的......

svn:externals与大型二进制文件或多TB项目的支持无关。 Subversion在单个存储库中完美地扩展和支持非常大的数据和代码库。但是Git确实With Git, you'll have to divide and split the projects to multiple small repositories。这将导致许多缺点和持续的PITA。这就是为什么Git有很多附加组件,比如git-lfs,试图让问题减轻痛苦。

答案 9 :(得分:0)

  

版本控制系统附带的特权(更改日志,轻松访问等)在简单的文件共享上是不存在的。

如果您只关心版本控制元数据功能并且实际上并不关心旧数据,那么使用VCS而不将数据存储在VCS中的解决方案可能是可接受的选项。

git-annex是第一个出现在我脑海中的人,但是从what git-annex is not页面看,似乎还有其他相似但不完全相同的替代品。

我没有使用过git-annex,但是从描述和演练中可以看出它可以适用于你的情况。