如何使用 Git 处理大型存储库?
Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型项目到大型项目的所有项目。 Git 依赖于软件的分布式开发,其中多个开发人员可以访问特定应用程序的源代码,并且可以修改其他开发人员可能看到的更改。在本文中,我们将学习如何使用 Git 处理大型存储库。有两种类型的大型存储库:
- 具有大量提交历史的
- 另一个带有大量二进制文件的
处理具有大量提交历史的存储库:
- 使用浅克隆
- 使用 git 过滤器
- 克隆单个分支
1.使用浅克隆
这是一个相对较快的解决方案,我们只提取回购历史的最新提交。想象一下,我有一个包含 1 GB 数据且提交次数超过 35000 次的存储库。如果我选择完全克隆这个存储库,通常会花费大量时间,但如果我们选择仅提取最新的 n 次提交,它可以成倍地减少我们的时间。要执行浅克隆,我们需要在 clone 命令中添加 –depth 命令
git clone --depth [n] [url]
Here n specifies number of latest n commits
url specifies the remote url of the repository
2. 使用 git-filter
在这里,我们可以浏览整个项目历史,根据需要进行修改、过滤或跳过。这通常在我们确实有大量二进制文件并且我们只需要一些时使用。要使用 git-filter,我们使用以下命令:
git filter-branch --tree-filter 'rm -rf [path-to-asset]'
path-to-asset signifies the path to binary asset in your repository
虽然功能强大,但它也有自己的缺点,即每当我们执行 git-filter 时,它都会更改提交的 id,这将进一步需要重新克隆。因此,在使用 git-filter 时必须注意重新克隆
3. 克隆一个分支
当我们确实有多个分支但我们希望使用其中一些分支时,这种技术很有用。要克隆单个分支,我们可以使用以下命令:
git clone [url] --branch [branch_name] --single-branch
url specifies the remote url of the repository
branch_name specifies the name of the branch you want to clone
处理包含大量二进制文件的存储库:
- 我们可以使用子模块,即另一个存储库中的存储库。内部存储库将包含所有将为我们提供模块化的二进制文件,因为它将单独保留父代码,并且如果将来我们想在此子模块中进行更改,它不会影响父代码存储库。
- 我们可以使用第三方扩展,例如 Git LFS,这是一个 Git 扩展,用于在单独的 Git 存储库中管理大文件和二进制文件。
- 我们可以使用垃圾收集git-gc将几个松散的对象变成一个文件。
结论
在上述三种解决方案中,最推荐使用 Git LFS 等第三方扩展。