下载时我公司的SVN代码存储库大约250MB。经过多年的变化,它可能非常大(尺寸的4倍)。如果我们将所有这些转移到GitHub,每个用户是否必须下载250MB或者他们是否必须下载1GB或更多才能获得存储库的完整历史记录?
答案 0 :(得分: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)
答案 1 :(得分:2)
如果我们将所有这些转移到GitHub,每个用户是否必须下载250MB或者他们是否必须下载1GB或更多才能获得存储库的完整历史记录?
每次第一次克隆时,每个用户都必须检索整个存储库。但是,git服务器端实现会将存储库的“压缩”版本作为 packfile 发送。因此传输的数据的重量远小于1Gb。
每个连续的提取/拉取操作只会检索服务器知道的并且尚未在客户端的本地存储库中的新git对象(提交,树和Blob)。这些也将作为 packfile 通过网络发送。
尽管@akonsu说明你可以克隆存储库的浅版本(即没有整个历史记录),但这会阻止用户进一步与GitHub托管的主上游存储库进行交互。
确实 git clone 文档指出:“浅的存储库有许多限制(你不能克隆或获取它,也不能从中推送或插入它)”< / em>的
答案 2 :(得分:0)
如果有大量文件的版本,您的对象数据库将随着时间的推移变得越来越大。
默认情况下,git使用zlib压缩算法来存储单个blob。但是可以告诉git将多个对象合并到一个包文件中,该文件也使用delta压缩方法来节省空间。您的整个历史记录仍然存在,解压缩只需要花费一些时间,而不是基于以前的状态执行命令(例如,结帐旧版本)。但我需要强调这是多么微不足道。老实说,不到一秒钟的增长。
有关课程册中的packfiles的更多信息:http://git-scm.com/book/en/Git-Internals-Packfiles