Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';git的含义是什么;文件的快照?_Git_Svn_Version Control - Fatal编程技术网

什么';git的含义是什么;文件的快照?

什么';git的含义是什么;文件的快照?,git,svn,version-control,Git,Svn,Version Control,我在看书 Git认为它的数据更像是一组缩影的快照 文件系统 我无法理解git快照的含义。git是否在每个快照/版本中存储整个文件内容?例如 版本1 #include <stdio.h> int main() { printf("hello, world"); return 0; } #包括 int main() { printf(“你好,世界”); 返回0; } 在版本2中,我在文件中添加了一行额外内容 #include <stdio.h&g

我在看书

Git认为它的数据更像是一组缩影的快照 文件系统

我无法理解git快照的含义。git是否在每个快照/版本中存储整个文件内容?例如 版本1

#include <stdio.h>
int main()
{
        printf("hello, world");
        return 0;
}
#包括
int main()
{
printf(“你好,世界”);
返回0;
}
在版本2中,我在文件中添加了一行额外内容

#include <stdio.h>
int main()
{
        printf("hello, world");
        printf("hello, git");
        return 0;
}
#包括
int main()
{
printf(“你好,世界”);
printf(“你好,吉特”);
返回0;
}
git是否会存储整个内容,而不是将这两个版本之间的差异(
printf(“hello,git”)
)存储为svn等

如果是,有什么意义

git是否将存储整个内容,而不是仅将这两个版本之间的差异(printf(“hello,git”)存储为svn等

Git存储文件的全部内容。但是当文件没有更改时,它不会占用额外的空间

阅读以下关于Git pack文件格式的精彩答案:

关于SHA1 文件(和其他内容)以“blob”的形式存储。每个字节序列都有自己的sha1代码,这对它来说非常独特

关于SHA1,以下是正确的:

  • 文件的SHA1计算在任何时候、操作系统、Git版本或实现都会给出相同的结果
  • 具有不同名称或路径但内容相同的文件将始终具有相同的SHA1-s
  • 如果两个文件具有不同的SHA1-s,则它们的概率不等于1
  • 如果两个文件的SHA1-s相等,那么它们的概率大约为1-1/2400(我记得),这与1非常相似
  • 这个系统有什么好处
  • 可以非常快速地比较修正值是否相等。不检查任何文件内容,只检查它们的SHA1-s。
    • 推/拉时,仅传输更改的文件
    • 立即检查当前更改的状态
    • 允许您跟踪内容相同的N个文件,仅替换Git中的单个文件
  • 在工作树中更改修订非常快。
    • 不应用连续的补丁
    • 您可以从一个分支中排除提交,将它们拉到另一个分支,更改它们的顺序
  • 关于diff(和git diff): 您可能已经注意到git确实显示了不同的文本文件,指出了添加和删除的行。这是为了您的方便而使用的。这也有助于收集贡献统计数据。这用于解决合并冲突。但尽管如此,Git还是将文本(和二进制)文件作为单个blob进行处理和存储

    排除 有一种方法可以强制Git在转移更改时将文本文件分解成块。这对于非常大的文件可能很有用,但对于小的文件却毫无用处

    git add --patch 
    
    以交互方式在索引和工作树之间选择大块补丁,并将它们添加到索引中。这让用户有机会在向索引添加修改内容之前查看差异

    以下是我最喜欢的关于Git的插图:

    git会存储整个内容而不是只存储差异吗?[…如果是这样]有什么意义

    对。这就是为什么构建好的git历史变得如此简单,而且足够反直觉地说,它还可以带来更好的压缩效率

    (编辑:将lotsa迂腐和精化放在修订历史中)

    git是否会存储整个内容,而不是仅将这两个版本之间的差异(printf(“hello,git”)存储为svn等?是的,但它最终可能会高效地存储这两个版本。[…]有什么意义?与SVN相反,您不必“应用”一系列修补程序即可获得特定版本。还有一个有用的链接: