如果git不需要下载文件吗?

时间:2017-10-11 06:44:59

标签: git

假设我做了以下四次提交:

  1. ADD hello_world.txt - 1Kb
  2. ADD hello_world.jpg - 10Mb
  3. 删除hello_world.jpg - 10Mb
  4. ADD hello_world2.txt - 1Kb
  5. 如果有人检查了这个回购,他们会下载大的“hello_world.jpg”吗?或者git是否足够智能,如果您处于最近的提交时,知道文件不存在,因此只下载最近需要的文件?

2 个答案:

答案 0 :(得分:3)

默认情况下,Git会下载整个hello_world.jpg图像文件,即使它不存在于任何特定分支的HEAD中。原因是如果您要检查JPG存在的早期提交,Git将需要该文件历史记录来创建相应的工作区。

出于这个原因,通常不建议提交大型二进制文件,因为它们会成为Git历史记录中的永久夹具。

如果你有一个非常大的文件并且想要避免在本地使用它,你可以使用浅层克隆。或者,另一个选项可能是使用过滤器分支等工具从历史记录中删除文件。但最好的做法可能是首先不提交这样的文件。

答案 1 :(得分:1)

默认情况下,git会下载完整的历史记录。毕竟,可以克隆并检查任何提交:

git clone url/of/repo
git checkout commit-of-large-file

唯一需要网络访问的部分是初始clone。如果您不想要完整的历史记录,请使用--depth

git filter-branch可以帮助您完全从历史记录中删除大文件,但这可能会导致一些问题,必须小心使用。