带有大文件的Git 处境

带有大文件的Git 处境,git,large-files,gitlab,Git,Large Files,Gitlab,我有两台服务器,生产和开发。在生产服务器上,我需要将两个应用程序和多个(6)数据库(MySQL)分发给开发人员进行测试。所有源代码都存储在开发服务器上,开发人员仅使用此服务器,无权访问生产服务器。当我们发布一个应用程序时,master会登录到生产环境并从Git中获取新版本。数据库很大(每个都超过500米,而且还在计算中),我需要尽可能容易地将它们分发给开发人员进行测试 可能的解决方案 备份脚本将数据库转储到单个文件后,执行脚本将每个数据库推送到自己的分支。如果开发人员想要更新其本地副本,那么他

我有两台服务器,生产和开发。在生产服务器上,我需要将两个应用程序和多个(6)数据库(MySQL)分发给开发人员进行测试。所有源代码都存储在开发服务器上,开发人员仅使用此服务器,无权访问生产服务器。当我们发布一个应用程序时,master会登录到生产环境并从Git中获取新版本。数据库很大(每个都超过500米,而且还在计算中),我需要尽可能容易地将它们分发给开发人员进行测试

可能的解决方案
  • 备份脚本将数据库转储到单个文件后,执行脚本将每个数据库推送到自己的分支。如果开发人员想要更新其本地副本,那么他会选择其中一个分支

    这个被发现不起作用

  • 生产服务器上的Cron每天保存二进制日志,并将它们推送到该数据库的分支中。所以,在分支中,有每天都在更改的文件,开发人员提取他没有的文件。当前SQL转储将以另一种方式发送给开发人员。当存储库的大小变得太大时,我们将向开发人员发送完全转储,并刷新存储库中的所有数据,然后从头开始

问题
  • 解决方案可行吗
  • 如果git正在向存储库推/拉/出存储库,它是上载/下载整个文件,还是只对其进行更改(即添加新行或编辑当前行)
  • Git能管理这么大的文件吗?没有
  • 如何设置存储库中保留了多少修订?与新的解决方案无关
  • 有没有更好的解决办法?我不想强迫开发者通过FTP或类似的方式下载如此大的文件

您真的、真的、真的不希望将大型二进制文件签入Git存储库

您添加的每个更新都将累积增加存储库的总大小,这意味着今后您的Git repo将需要越来越长的时间来克隆并使用越来越多的磁盘空间,因为Git将分支的整个历史记录存储在本地,这意味着当有人签出分支时,他们不需要下载数据库的最新版本;他们还必须下载以前的每个版本


如果需要提供大型二进制文件,请分别将它们上载到某个服务器,然后签入一个带有URL的文本文件,开发人员可以在其中下载大型二进制文件。FTP实际上是更好的选择之一,因为它是专门为传输二进制文件而设计的,尽管HTTP可能更简单。

您可以查看类似于的解决方案,它是关于使用git管理(大)文件,而不必将文件内容签入git(!)
(2015年2月::
见“”)

git不管理大文件,如中所述

但这并不意味着git总有一天会做得更好。
从(2013年5月,另见下文),从,在36'10'':

(谈话内容)

有一个所有其他领域的大型存储库,人们对存储20或30或40 GB,有时甚至TB大小的存储库感兴趣,是的,它来自于有很多文件,但很多来自于有非常大的文件和非常大的二进制文件,它们彼此之间不能很好地处理

这是一个悬而未决的问题。有两种解决方案:git附件可能是其中最成熟的一种,它们基本上不将资产放在git中,而是将大型资产放在资产服务器上,并将指针放在git中

我想做一些类似的事情,资产在概念上是git,即该对象的SHA1是进入树的SHA1的一部分,进入提交ID和所有这些东西。
所以从git的角度来看,它是存储库的一部分,但是在下面的一个级别,在对象存储级别,在概念历史图下面的一个级别,我们已经有了多种存储对象的方式:我们有,我们有,我想有一种存储对象的新方式,也就是“我们这里没有,但可以通过资产服务器使用”,或者类似的东西

)哦,太酷了

像git附件这样的东西的问题是:一旦你使用了它们,你就…永远被你当时所做的决定所束缚。你知道,如果你决定oh 200 MB是大的,我们将存储在一个资产服务器上,然后,你决定,啊,它应该是300 MB,真倒霉:这已经被编码在你的历史中了呃。
因此,从概念上讲,在git级别,这个对象在git存储库中,而不是指向它的指针,也不是指向资产服务器的指针,实际的对象就在那里,然后在低级别,在存储级别处理这些细节,这样你就可以自由地做出许多不同的决策,甚至在以后更改决策关于如何将内容存储在磁盘上

现在不是一个高优先级的项目


3年后的2016年4月,包括一次约31人的采访”(谢谢)

他是。
他在后端引用了目前最有趣的内容

(谈话内容)

Christian Couder(CD):例如,目标是将git引用存储在数据库中? Michael Haggerty(MH):是的,我认为这是两个有趣的方面:第一个方面就是能够插入不同的源条目引用。条目引用存储在文件系统中,作为松散引用和 松散引用是每个引用一个文件,而打包引用是一个包含许多引用列表的大文件

所以这是一个很好的系统,特别是对于本地使用;因为它对普通人来说没有任何实际的性能问题,但是它确实有一些问题,l
rsync -avz path/to/database(s) HOST:/folder
rsync -avz DATABASE_HOST:/path/to/database(s) path/where/developer/wants/it
git lfs track '*.bin'
git add .gitattributes "*.bin"
git commit -m "Track .bin files"
git lfs install
git init
git lfs track ".mp4"
git lfs track ".mp3"
git lfs track ".psd"
git add .
git add .gitattributes
git config lfs.https://github.com/something/repo.git/info/lfs.locksverify false 
git commit -m "Add design file"
git push origin master` ones