我有一个本地存储库,其中包含约 300.000 个文件和大约 40GB 的加密文件系统(我无法更改它...)。 我经常需要创建一个新的分支,并将工作目录的当前内容作为这个分支的内容。
所以这个“ checkout ”实际上并不是修改工作树中任何东西的 checkout ,而只是创建一个分支,切换到它,并保持工作目录不变。 而且与大文件无关:平均文件大小远小于 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、基于 ext4 的 encfs、最新的硬件、12 个 cpu、主要是二进制文件(如 pdf、jpeg、mp4;没有深树;它们需要进行版本控制)。
主要问题是:是否可以避免只创建一个分支就查看所有文件的内容?
最佳答案
git 不是为大型存储库而设计的(尽管微软最近致力于扩展它以支持它们——参见上面问题的评论)。我建议您将存储库拆分为多个存储库,和/或使用 LFS。如果您使用 LFS,您可能希望使用 BFG Repo Cleaner 来有效地重新创建没有历史记录中所有大文件的存储库 - 除非存储库仅包含大文件。
LFS does support versioning :
Large file versioning
Version large files—even those as large as a couple GB in size—with Git.
关于git - 在大型存储库中创建 git 分支非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50425943/