gpt4 book ai didi

git - git 是如何管理它的文件版本的?

转载 作者:太空狗 更新时间:2023-10-29 14:30:12 25 4
gpt4 key购买 nike

比如说,我有一个包含以下内容的文件:

1111
2222
3333

然后我修改为:

1111
2222
4444
3333

Git 会生成新版本的新文件吗?我很困惑,如果它创建新文件,那么整个存储库的大小会增长得非常快吗?

另一个想法是,Git 不创建新文件,只是存储在哪里添加或删除行,以及存储新行的内容。

哪个是正确的?

最佳答案

许多较旧的源代码控制系统,例如 RCS 和 CVS,专门存储文件版本之间的差异。例如,给定源文件的信息可能以包含最新版本的全文以及生成早期版本的“说明”的形式存储在存储库中。

Git,至少在概念上,将每个文件的每个版本的全部内容存储在存储库中。它通过仅存储相同文件的一个副本来节省一些空间,因为用于存储它的名称是通过对内容进行哈希处理确定的。

显然,如果事情就是这样,Git 存储库将很快变得非常大。但是 Git 会自动打包或压缩存储的对象。坦率地说,我不知道所有的细节,但它在最小化存储空间和允许快速重新创建任意版本方面做得很好。

例如,Git 源代码本身存储在 Git 存储库中,其中可能包含数千个不同的对象。所有文件的所有版本都存储在目录 .git/objects/pack 下,当前包含以下内容(列表是我系统上的克隆):

$ ls -l .git/objects/pack
total 48900
-r--r--r-- 1 kst kst 4196172 Mar 20 15:44 pack-0e69de7b7728ad0fde80423ded259dbff7760016.idx
-r--r--r-- 1 kst kst 36698393 Mar 20 15:44 pack-0e69de7b7728ad0fde80423ded259dbff7760016.pack
-r--r--r-- 1 kst kst 125896 Jun 30 22:17 pack-2848a675d3c196391f06cc7cdd6cebf67fb7119e.idx
-r--r--r-- 1 kst kst 3570770 Jun 30 22:17 pack-2848a675d3c196391f06cc7cdd6cebf67fb7119e.pack
-r--r--r-- 1 kst kst 178452 May 16 08:22 pack-bfd75de39dff6ac03adcc775f7b5715480b54637.idx
-r--r--r-- 1 kst kst 5292998 May 16 08:22 pack-bfd75de39dff6ac03adcc775f7b5715480b54637.pack

与早期系统(至少与我使用过的早期系统)相比,Git 的不同之处在于,在高层次上,存储库中所有文件的所有版本都完整存储,但压缩由一个单独的层。

关于git - git 是如何管理它的文件版本的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17397209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com