GIT下载了什么?
GIT下载的内容是什么?
GIT的最大优点之一是使用有向无环图(DAG)来跟踪变更。当你执行git pull
或git fetch
时,它只会下载差异(diff)。
所以回答你的问题:它只会下载你所做的3个提交。然后为你创建一个本地的DAG。在这里可以快速了解一下git基础知识。
而且,它是在一开始就下载所有分支的数据呢?还是等到我切换分支后再下载?
当你执行git clone
时,会下载整个仓库,这是为了构建DAG。然后以后只会在你要求的情况下,使用git fetch
和git pull
下载需要的内容。
git fetch
会从远程下载变更,并将其存储在.git/refs/remotes/<remote>/
中。所以它不会直接放入你的working directory
中。(如果你不知道什么是working directory
,可以阅读一下git基础知识)。
git pull
是将git fetch
和git merge
合并为一条命令。
一些阅读材料:
Git看起来更像是一棵树而不是图。SO问题
一个简单的介绍git的文章,解释了为什么我们使用DAG:链接
GIT下载的是项目的历史记录,其中包括所有分支的完整历史。默认情况下,使用"git clone"命令会下载所有分支的完整历史记录,以便可以在没有连接的情况下执行任何源代码控制操作。但是,可以通过给"git clone"命令添加选项来指定下载的内容,例如"--single-branch"、"--depth"和"--shallow-*"选项。这些选项可以控制下载的深度和范围。
GIT存储项目历史记录的对象有两种格式。当有新的提交时,会存储为loose objects,即每个文件的每个版本的完整副本。即使在loose form中,数据也会进行压缩,并且相同内容的文件只会存储一次。之后,对象可以切换到"packed"表示。在打包时进行了一些优化,例如找到相似的对象,并将其中较旧的对象表示为相对于较新对象的增量。
虽然一些对象可能是相对于较新提交的其他对象的增量表示,但概念上,提交是一个快照。如果使用"--depth"选项等指定只下载部分提交,仍然会得到完整的快照,而不仅仅是相对于先前提交的补丁。含有部分增量但没有足够信息来重建快照(即提交)的存储库的任何子集都被认为是损坏的。