"size" 在 git diff 输出中指的是什么?

What does "size" refer to in git diff output?

git diff 生成附加图像中的输出。文件的哈希值已更改。我不太明白的是“大小”参数具体表示什么。

我假设这是磁盘上的大小。输出是从 Windows 上的 cygwin linux 安装生成的,因此行尾可能是检查和保存文件时更改的内容。

(附注:-1,3 和 +1,3 表示文件中的前三行已更改;这可能是指元数据还是仅是文件内容?)

我在官方文档中没有看到任何对这个参数的引用:

或这些有些相关的问题:

这是一个文本文件,所以如果内容发生变化,我希望看到有意义的输出。我有什么保证内容没有被更改?

Git diff 为每个文件的新行显示“+”,为删除的行显示“-”。如果您在文本编辑器中打开 file.ipynb,您应该能够看到一行包含“size 33626”

除了 ,请注意 Git 知道的完整读取文件:

version https://git-lfs.github.com/spec/v1
oid <big ugly oid>
size <value>

OID 和大小值更改的位置。 first 行是 LFS 包装器的指令,告诉它们:these aren't the files you're looking forsecond 行告诉 LFS 包装器他们正在 寻找哪些文件,第三行告诉包装器这些文件有多大。

但是等一下: 是什么关于“LFS 包装器”的所有内容?

LFS 不是 Git,而是 使用 Git 的系统。 LFS stands for Large File Storage. Git 本身并没有意识到 LFS 的存在。当您安装 Git-LFS 时,它会“包装”Git 并在几个重要位置插入 filters,Git 在 Git 正在尝试检查(使用 git checkoutgit reset 等)或添加(使用 git add 等)某些文件的内容。

这些过滤器秘密地将 实际文件 隐藏在 Git 之外的某个地方。他们将文件内容发送到一个单独的服务器——LFS 服务器,它只存储 large 或其他秘密文件——并欺骗 Git 存储,在 Git 存储库中,这些有趣的小“指针文件”由您刚刚看到的三行组成。

Git 不知道发生过这种情况。如果您使用 Git 而不是 LFS-Git,您将看到有趣的小指针文件。仅当您 wrap 您的 Git 与 LFS 包装器并调用它们时——一旦您正确包装了您的特定存储库,Git 将实际为您调用它们在大多数情况下——您会看到文件本身吗?

由于您正在查看包装器,因此您使用的是未包装的 Git。这里的所有都是它的。展开的 Git 看到指针文件。包装的 Git 被 包装器 小心地欺骗了,因此 Git 看到了替代文件,但 看到真实的文件。如果当您看到替代文件时,那就是抽象失败:您看到的是底层机制。

如果您安装并设置 LFS 包装器——使用上面的 link 找到它们——您的 Git 将看到包装的文件,但包装器会偷偷地替换为大文件, 应该可以看到有人希望您使用的文件。有人,不管是谁,不希望你使用包装器:它们只是用于 LFS。