为什么git存储整个文件的副本以进行单行更改?

时间:2014-03-27 06:38:00

标签: git filesystems compression dvcs

假设我们去试运行:

git init
echo -e 'hede\nhodo' > new.txt
git add new.txt
git commit -m 'commit 1'
 1 file changed, 2 insertions(+)
echo -e 'hede\n123' > new.txt
git add new.txt
git commit -m 'commit 2'
 1 file changed, 1 insertion(+), 1 deletion(-)

所以我知道两个版本的SHA。当我调查它们时,我看到了:

git cat-file -p ad0daa422be9531700a069e6800b18c065f755bb
hede
hodo

git cat-file -p 6fbf5b80b76bbe270bb41789c34851d622ae1f63
hede
123

似乎git复制了blob,但'hede'仍然是多余的。我知道这不会对小文件产生很大的影响,只是问:git稍后会将这种差异优化为差异吗?或者这是使git高效的方式吗?

由于

1 个答案:

答案 0 :(得分:4)

正如我在" How does git store files?"中提到的那样,Git:

  • 管理内容(这就是为什么你会看到2个完整的blob)
  • 存储内部增量(并以此方式实现高压缩级别,但 pack files

所以它很重要(克隆/推/拉),同时在本地提供简单的快速访问。