【发布时间】:2018-10-29 18:11:57
【问题描述】:
我有一个本地存储库,其中包含约 300.000 个文件和大约 40gb 的加密文件系统(我无法更改...)。 我经常需要新建一个分支,并将工作目录的当前内容作为这个分支的内容。
所以这个“签出”实际上并不是修改工作树中任何内容的签出,而只是创建一个分支,切换到它,并保持工作目录不变。 它与大文件无关:平均文件大小远小于 1mb (40gb/300000=130kb)
目前我做:
git checkout -q -b mynewbranch
git add -v -A
git commit -q -m "at mynewbranch"
原则上这是可行的,但创建分支的第一步需要一个多小时 (!)。 (“添加”和“提交”需要几分钟,我可以忍受。) “git checkout”似乎只是为了创建分支重新读取整个工作目录。
理想情况下,我希望创建分支几乎不需要任何时间, 它的状态应该简单地基于先前存在的分支。 然后“添加”也不应该花费太多时间,因为可能会使用时间戳 并非所有文件内容都应与存储库进行比较, 只有带有新时间戳的文件才能被详细查看。
有人知道如何有效地做到这一点吗?
编辑:git 2.17、ubuntu、encfs over ext4、最近的硬件、12 个 cpu、主要是二进制文件(如 pdf、jpeg、mp4;没有深度树;它们需要版本化)。
主要问题是:是否可以避免只创建一个分支查看所有文件的内容?
【问题讨论】:
-
什么操作系统,你使用什么文件系统?您的存储驱动器硬件特性是什么?文件的特点是什么?是源代码(如深树中的小文本文件)还是其他?除了 git 之外,您还有其他在后台运行的软件可以处理这些文件吗?
-
如果您使用的是 Windows,Microsoft 发布的许多内容(使用 500GB 的 windows 工作目录)可以帮助您。这包括确保您使用的是最新的 git 版本。 blogs.msdn.microsoft.com/devops/2018/01/11/…
-
如果您在 repo 中有许多二进制文件,则转换为 LFS 也可能会提高性能。
-
根据您的更新,启用 Git-LFS 应该会有很大帮助。您可能已经注意到,Git 并不适合处理大型二进制文件。
标签: git performance git-branch git-checkout