以Git(数字和大小)表示的文件限制是什么?

以Git(数字和大小)表示的文件限制是什么?,git,Git,有人知道Git对文件数量和大小的限制是多少吗?没有真正的限制——所有东西都是用160位的名称命名的。文件的大小必须以64位数字表示,因此也没有实际限制 不过,这是有实际限制的。我有一个约8GB的存储库,包含>880000个文件,git gc需要一段时间。工作树相当大,因此检查整个工作目录的操作需要相当长的时间。不过,这个repo只用于数据存储,所以它只是一堆处理它的自动化工具。从回购中提取变化比同步相同数据快得多 %find . -type f | wc -l 791887 %time git

有人知道Git对文件数量和大小的限制是多少吗?

没有真正的限制——所有东西都是用160位的名称命名的。文件的大小必须以64位数字表示,因此也没有实际限制

不过,这是有实际限制的。我有一个约8GB的存储库,包含>880000个文件,git gc需要一段时间。工作树相当大,因此检查整个工作目录的操作需要相当长的时间。不过,这个repo只用于数据存储,所以它只是一堆处理它的自动化工具。从回购中提取变化比同步相同数据快得多

%find . -type f | wc -l
791887
%time git add .
git add .  6.48s user 13.53s system 55% cpu 36.121 total
%time git status
# On branch master
nothing to commit (working directory clean)
git status  0.00s user 0.01s system 0% cpu 47.169 total
%du -sh .
29G     .
%cd .git
%du -sh .
7.9G    .

这取决于你的意思。有实际的大小限制(如果你有很多大文件,它会变得非常慢)。如果你有很多文件,扫描速度也会变慢

不过,该模型并没有本质上的局限性。你肯定会用得不好,而且很痛苦。

来自的这条消息可以帮助你克服其他一些限制

[…]CVS,即它实际上最终几乎面向“一个文件” “一次一个”的模式

这很好,因为你可以有一百万个文件,然后只检查 其中的一些——你甚至看不到另一个的影响 99995个文件

吉特 从根本上说,从来没有真正看不到整个回购协议。即使你 把事情限制一点(只检查一部分,或让历史记录消失) 退后一点),git最终仍然关心整件事, 把知识带到身边


所以,如果你强迫git把所有东西都看作一个整体,它的伸缩性就非常差 巨大的存储库。我不认为那部分真的是可以修复的,尽管我们 可能会有所改进

是的,还有“大文件”问题。我真的不知道该怎么办 不要处理大文件。我知道,我们很讨厌他们

查看my中的更多内容:Git的限制是每个存储库必须表示一个“”,即“所有系统”本身(您不能标记“存储库的一部分”)。
如果系统由自主(但相互依赖)部件组成,则必须使用

如所示,限制可以是系统限制(大量文件),但如果您确实了解Git的本质(关于由SHA-1键表示的数据一致性),您将认识到真正的“限制”是一个用法限制:即,您不应该尝试将所有内容存储在Git存储库中,除非你总是准备把所有东西都拿回来或贴上标签。对于一些大型项目来说,这毫无意义


要更深入地了解git限制,请参见“”
(其中提到:在git repo.GitHub之外存储大型文件的解决方案,2015年4月)

限制git回购的三个问题:

  • 大文件(仅在内存中,这对大文件不好)
  • 大量文件,这意味着每个blob一个文件,并且git gc一次生成一个packfile的速度很慢
  • 巨大的packfile,packfile索引无法从(巨大的)packfile检索数据

最近的一条线索(2015年2月)说明:

来自中央服务器的几个同步克隆是否也会减慢其他用户的其他并发操作

克隆时服务器中没有锁,因此理论上克隆不会影响其他操作。但克隆可能会占用大量内存(以及大量cpu,除非您启用了可访问性位图功能,您应该这样做)

git pull
”会变慢吗

如果排除服务器端,树的大小是主要因素,但是25k文件应该可以(linux有48k文件)

git推送”

这一点不受回购历史有多深或树有多宽的影响,所以应该尽快

啊引用的数量可能会同时影响
git push
git pull

我想斯特凡在这方面比我更清楚

git提交
”?(在中列为慢速) “
git状态
”?(参考文献3中再次减速,但我看不到。)
(另请参见git add)

同样,你的树的大小。按照回购协议的规模,我认为你不必担心

有些操作似乎不是日常操作,但如果web前端经常调用它们到GitLab/Stash/GitHub等,那么它们可能会成为瓶颈。(例如,
git分支--contains
“似乎受到大量分支的严重不利影响。)

当一个文件被大量修改时,
git-bull
可能会很慢


我认为最好尽量避免将大型文件提交作为存储库的一部分(例如,数据库转储可能在其他地方更好),但如果考虑到存储库中内核的大小,您可能希望能够轻松地处理任何更小、更简单的文件。

如果您添加了太大的文件(在我的例子中是GBs,Cygwin,XP,3GB RAM),则可以这样做

致命:内存不足,malloc失败

更多细节


2011年3月2日更新:在Windows7x64中看到了类似的乌龟Git。使用了大量内存,系统响应非常慢。

我有大量数据作为单独的JSON片段存储在repo中。在几个目录下大约有75000个文件,这对性能并没有太大影响

第一次检查它们显然有点慢。

git对回购有4G(32位)的限制


2012年2月,Facebook软件工程师Joshua Redstone在一个巨大的测试库上测试Git,他有一个非常有趣的消息:

测试回购有400万次提交、线性历史记录和大约130万次
$ time git add . 
git add . 333.67s user 244.26s system 14% cpu 1:06:48.63 total