3

我公司的SVN代码库在下载时大约250MB。随着多年的变化,它可能相当大(4X 那个大小)。如果我们将所有这些都转移到 GitHub,每个用户是否必须下载 250MB 或者他们必须下载 1GB 或更多才能获得存储库的完整历史记录?

4

3 回答 3

3

您可以在没有历史记录的情况下进行克隆: git clone --depth 1 your_repo_url (请参阅https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_do_a_quick_clone_without_history_revisions.3F

于 2012-12-28T05:02:24.347 回答
2

如果我们将所有这些都转移到 GitHub,每个用户是否必须下载 250MB 或者他们必须下载 1GB 或更多才能获得存储库的完整历史记录?

每个用户在第一次克隆时都必须检索整个存储库。但是,git 服务器端实现会将存储库的“压缩”版本作为packfile 发送。因此传输的数据的重量将远小于 1Gb。

每个连续的 fetch/pull 操作只会检索服务器知道的并且不在客户端本地存储库中的新 git 对象(提交、树和 Blob)。这些也将作为packfile通过网络发送。


尽管@akonsu 在声明您可以克隆存储库的浅版本(即没有整个历史记录)时是正确的,但这会阻止用户进一步与 GitHub 托管的主要上游存储库进行交互。

事实上,git clone文档指出:“浅层存储库有许多限制(你不能克隆或从中获取,也不能从中推送或进入)”

于 2012-12-28T08:26:16.097 回答
0

如果有很多文件的很多版本,您的对象数据库将随着时间的推移变得越来越大。

默认情况下,git 使用 zlib 压缩算法来存储单个 blob。但是可以告诉 git 将多个对象合并到一个包文件中,这也使用了 delta 压缩方法来节省空间。您的整个历史记录仍然存在,解包只需要比基于先前状态执行命令(例如检查旧版本)更长的时间。但我需要强调这是多么小。老实说,不到一秒钟的增加。

progit 书中有关 packfiles 的更多信息:http: //git-scm.com/book/en/Git-Internals-Packfiles

于 2013-01-02T20:47:04.770 回答