【问题标题】:What does "size" refer to in git diff output?git diff 输出中的“大小”指的是什么?
【发布时间】:2021-12-01 00:07:51
【问题描述】:

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

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

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

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

或这些有些相关的问题:

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

【问题讨论】:

  • 那不是参数。这是文件的实际内容 - 以- 开头的行被删除,以+ 开头的行被添加,以空格开头的行没有改变。

标签: git diff git-diff


【解决方案1】:

除了Adam's answer,请注意,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 并在几个战略位置插入 Git 在尝试签出时调用的 过滤器git checkoutgit reset 和等)或添加(使用git add 等)一些文件的内容。

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

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

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

如果您安装并设置了 LFS 包装器(使用上面的链接查找它们),您的 Git 会看到包装的文件,但包装器会偷偷替换大文件,应该查看某人希望您使用的文件。那个人,不管是谁,不希望你使用包装器:它们只是为了 LFS。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      相关资源
      最近更新 更多