git是否下载了一个文件,如果它没有';不必吗?

git是否下载了一个文件,如果它没有';不必吗?,git,Git,假设我做了以下四项承诺: 添加hello_world.txt-1Kb 添加hello_world.jpg-10Mb 删除hello_world.jpg-10Mb 添加hello_world2.txt-1Kb 如果有人查看这份回购协议,他们会下载大型的“hello_world.jpg”吗?或者,如果您正在进行最新的提交,git是否会聪明到知道文件不存在,因此只下载最新需要的文件 默认情况下,Git将下载整个hello\u world.jpg图像文件,即使它不在任何特定分支的头部。这样做的原因是,如

假设我做了以下四项承诺:

  • 添加hello_world.txt-1Kb
  • 添加hello_world.jpg-10Mb
  • 删除hello_world.jpg-10Mb
  • 添加hello_world2.txt-1Kb

  • 如果有人查看这份回购协议,他们会下载大型的“hello_world.jpg”吗?或者,如果您正在进行最新的提交,git是否会聪明到知道文件不存在,因此只下载最新需要的文件

    默认情况下,Git将下载整个
    hello\u world.jpg
    图像文件,即使它不在任何特定分支的头部。这样做的原因是,如果要签出JPG所在的较早提交,Git将需要该文件历史记录来创建相应的工作区

    出于这个原因,通常不建议提交大的二进制文件,因为它们在Git历史中成为永久的固定工具


    如果您有一个非常大的文件,并且希望避免将其带到本地,那么可以使用浅层克隆。或者,另一种选择可能是使用类似filter branch的工具从历史记录中删除该文件。但最好的做法可能是一开始就不提交这样的文件。

    默认情况下,Git将下载整个
    hello\u world.jpg
    图像文件,即使它不在任何特定分支的头部。这样做的原因是,如果要签出JPG所在的较早提交,Git将需要该文件历史记录来创建相应的工作区

    出于这个原因,通常不建议提交大的二进制文件,因为它们在Git历史中成为永久的固定工具


    如果您有一个非常大的文件,并且希望避免将其带到本地,那么可以使用浅层克隆。或者,另一种选择可能是使用类似filter branch的工具从历史记录中删除该文件。但最好的做法可能是首先不要提交这样的文件。

    默认情况下,
    git
    将下载完整的历史记录。毕竟,克隆和签出任何提交都是可能的:

    git clone url/of/repo
    git checkout commit-of-large-file
    
    唯一需要网络访问的部分是初始的
    克隆
    。如果不需要完整的历史记录,请使用
    --depth


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

    默认情况下,
    git
    将下载完整的历史记录。毕竟,克隆和签出任何提交都是可能的:

    git clone url/of/repo
    git checkout commit-of-large-file
    
    唯一需要网络访问的部分是初始的
    克隆
    。如果不需要完整的历史记录,请使用
    --depth


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

    您没有抓住git的要点。关键是要有完整的历史记录。你的档案是历史的一部分,对吗?所以需要有完整的记录。如果您愿意,您可以随时要求git为您提供一个不完整的存储库,尽管它很少使用,因为它的功能有限。git是版本控制。因此hello_world.jpg仍在您的存储库的早期版本中。如果有人不需要历史记录,而只需要最新版本的文件,
    git archive--repo=-o foo.tar.gz
    是选项之一。Github不支持
    git归档
    ,但提供了一些restapi来完成相同的工作。您没有理解git的要点。关键是要有完整的历史记录。你的档案是历史的一部分,对吗?所以需要有完整的记录。如果您愿意,您可以随时要求git为您提供一个不完整的存储库,尽管它很少使用,因为它的功能有限。git是版本控制。因此hello_world.jpg仍在您的存储库的早期版本中。如果有人不需要历史记录,而只需要最新版本的文件,
    git archive--repo=-o foo.tar.gz
    是选项之一。Github不支持
    git archive
    ,但提供了一些restapi来完成同样的工作。我希望git足够聪明,只有在我必须恢复到以前的版本时才能下载hello_world.jpg。@coderama
    git
    是分散的。只有
    clone
    fetch
    pull
    push
    作用于远程存储库,其他一切都保持本地,甚至不需要访问远程存储库。@coderama说,否则,git存储库在设计上是自给自足的。你可以把它放在你的U盘上,把它从挂钩上带到那个遥远的地方,在那里工作。这还意味着,只要存在存储库的一个副本,就可以通过复制该副本来恢复所有其他副本。git中没有“服务器”的概念,这是人们的工作流引入的一个概念,因为将一个副本标记为权威副本很方便,但git并不强制执行它,甚至不知道这种概念。@TimBiegeleisen>确实是这样。我只是解释了原因,并进一步阐述了泽塔的评论。也就是说,“聪明到只在需要时下载”的想法是如何来自于对git设计目标的误解。因为它的设计使得存储库是自给自足的,这意味着每个副本都必须有关于所有文件的完整信息,历史上的每一点。@spectras现在我明白你的意思了……所以Git需要在它的历史中删除那个大文件,否则它会有一个它不希望有的外部依赖。我希望Git足够聪明,只有在我必须恢复到以前的版本时才下载hello_world.jpg。@coderama
    Git
    是分散的。只有
    clone
    fetch
    pull
    push
    对远程存储库起作用,其他一切都保持在本地,甚至不需要访问远程存储库。@coderama说的不是这样,而是git repos