2009-06-25 516 views
73

当git进行提交时,它会用类似于rewrite foobar.bin (76%)的东西来重写二进制文件。那是什么 %?它是从旧文件更改百分比还是保留百分比?我知道git对文件使用了二进制增量,但我不知道%表示重写了多少,它似乎不在git help commit的帮助页面中。git commit后意味着什么信息“rewrite ...(90%)”?

谢谢!

+0

也可能涉及到http://stackoverflow.com/questions/244639/git-thinks-i-am-rewriting-one-of-my-files-everytime-i-make-a-small-change – VonC 2009-06-25 22:12:26

+11

Git实际上为每个文件存储完整的副本(作为“blob”)。当你要求diff时,Git检索有问题的文件的两个副本,并在那个时刻运行diff。实际差异不存储在任何地方。这并没有真正回答你的问题,但指出Git认为存储“二进制增量”不太正确。 – 2009-06-26 07:06:54

回答

48

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

+8

我认为相似度指数与Git是否认为文件是文本无关。不确定,因为一些二进制文件可以看起来很像文本。 – 2009-06-26 07:08:06

-4

它试图将CR和LF重写为一致的格式。也就是说,它不会将二进制文件视为二进制文件。要强制混帐做这个正确投放.gitattributes以下行:

*.bin -crlf -diff -merge 

this page这意味着:

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

+10

这不是在问题的上下文中“重写”的含义。 Git说:“嘿,你看起来像是重写了这个文件,但剩下的76%与之前一样”。 – 2009-06-26 07:05:00

19

我相信马丁是正确的,那个数字就是相似指数。从git-diff手册页:

相似度指数是不变的行所占的百分比 和 相异指数是改变线的百分比 。它是一个向下舍入的 整数,后面跟着一个百分号。 的100%的相似性指数值因而被保留用于两个相等的文件 , 而100%相异度表示从旧文件没有 线把它做成 新的。

我第一次看到我认为我的二进制文件发生了巨大变化的数字!