【问题标题】:What does the message "rewrite ... (90%)" after a Git commit mean? [duplicate]Git 提交后的消息“rewrite ... (90%)”是什么意思? [复制]
【发布时间】:2009-06-25 21:07:48
【问题描述】:

当 git 进行提交时,它会使用类似于 rewrite foobar.bin (76%) 的内容重写二进制文件。那是什么 %?它是从旧文件中更改的百分比还是保留的百分比。我知道 git 对文件使用二进制增量,但我只是不知道 % 代表了多少重写,而且它似乎不在 git help commit 的帮助页面中。

谢谢!

【问题讨论】:

  • Git 实际上为每个文件存储了每个提交的完整副本(作为“blob”)。当您请求 diff 时,Git 会检索相关文件的两个副本并在此时运行一个 diff。实际的差异不存储在任何地方。这并不能真正回答您的问题,但指出将 Git 视为存储“二进制增量”并不完全正确。

标签: git


【解决方案1】:

它是相似度指数的度量。相似性指数是未更改行的百分比。 git 认为你的文件是文本。

【讨论】:

  • 我认为相似度指数与 Git 是否认为文件是文本无关。不确定,因为一些二进制文件看起来很像文本。
【解决方案2】:

我相信 Martin 是正确的,那个数字就是相似度指数。来自git-diff 手册页:

相似度指数是百分比 不变的线,和 相异指数是百分比 更改的行。这是一个四舍五入 整数,后跟百分号。 100%的相似度指标值为 因此保留给两个相等的文件, 而 100% 的不同意味着没有 旧文件中的行进入 新的。

第一次看到这个数字时,我以为我的二进制文件发生了巨大变化!。

【讨论】:

  • 因此,如果我看到重命名后跟 67%,那么我将解释为该文件不仅已重命名,而且原始文件的 67% 仍然存在?当然,这可能意味着有人在重命名期间编辑了 33% 的原始文件。如果重命名是一次提交然后文件的编辑发生了会更有益吗?这会使重命名相似度指数的输出为 100% 吗?这在理论上意味着重命名成功并且没有数据丢失?我今天第一次看到这个,我想确保我理解它的预期用途。
【解决方案3】:

它正在尝试将 CR 和 LF 重写为一致的格式。也就是说,它不会将您的二进制文件视为二进制文件。要强制 git 正确执行此操作,请将以下行放入 .gitattributes:

*.bin -crlf -diff -merge

来自this page,这意味着:

所有带有 [.bin] 扩展名的文件都将 没有回车/换行 翻译完成,不会有差异和 合并会导致冲突 保持原始文件不变。

【讨论】:

  • 这不是问题上下文中“重写”的意思。 Git 说“嘿,看起来你重写了这个文件,但其中的 76% 和以前一样”。
猜你喜欢
  • 2018-03-20
  • 2023-03-24
  • 2014-11-01
  • 2016-06-12
  • 2018-08-23
  • 1970-01-01
相关资源
最近更新 更多