我有一个本地代码仓库,其中包含约300,000个文件和大约40GB的加密文件系统(无法更改...)。
经常需要创建新的分支,并将工作目录的当前内容作为此分支的内容。
因此,这个“checkout”实际上并不是修改工作区中任何内容的检出,而只是创建一个分支,切换到该分支,并保持工作目录不变。这与大文件无关:平均文件大小远小于1MB(40GB/300,000=130KB)。
目前我的操作是:
git checkout -q -b mynewbranch
git add -v -A
git commit -q -m "at mynewbranch"
原则上这是可行的,但创建分支的第一步需要超过一个小时的时间!(“add”和“commit”只需要几分钟,我可以接受。)“git checkout”似乎需要重新读取整个工作目录才能创建分支。
理想情况下,我希望创建分支几乎不需要任何时间,并且它的状态应该仅基于先前存在的分支。然后,“add”也不应该花费太多时间,因为可以使用时间戳,而不是将所有文件内容与存储库进行比较,只有具有新时间戳的文件才需要详细查看。
有人有想法如何高效地实现吗?
编辑:git 2.17、Ubuntu、Encfs在Ext4上、最近的硬件、12个CPU、大多数二进制文件(如PDF、JPEG、MP4;没有深层次的树形结构;它们需要进行版本控制)。
主要问题是:是否可以避免仅创建分支时查看所有文件的内容?