git push上图像旁边的百分比是多少?
我一直想知道,当你推一个git时,图像重写旁边的百分比意味着什么 例如:git push上图像旁边的百分比是多少?,git,github,Git,Github,我一直想知道,当你推一个git时,图像重写旁边的百分比意味着什么 例如: 重写资产/img/30_credits.png(70%) 我一直认为它只是显示了多少图像画布已被重写,虽然我很想知道确切的 抱歉问了个愚蠢的问题:) 谢谢 简短回答:这是Git的相似性指数。有关计算相似度的算法的详细说明,请参阅 更长:这实际上不是git推送(git push);您从git pull中看到了这一点。但是它也不是git pull:它是由git pull运行git merge产生的输出,实际上是打印它的git
重写资产/img/30_credits.png(70%)
我一直认为它只是显示了多少图像画布已被重写,虽然我很想知道确切的
抱歉问了个愚蠢的问题:)
谢谢 简短回答:这是Git的相似性指数。有关计算相似度的算法的详细说明,请参阅 更长:这实际上不是git推送(git push);您从git pull中看到了这一点。但是它也不是
git pull
:它是由git pull
运行git merge
产生的输出,实际上是打印它的git diff--stat
动词路径(百分比)
其中,动词
是重命名
、重写
或复制
,路径
是文件路径名或相同路径名或(用于重命名)新旧路径名的缩写版本,百分比是相似性索引。Git使用这个相似性索引来确定两个具有不同名称的文件,或者两个具有相同名称但内容非常不同的文件,实际上可能是同一个文件,或者毕竟是不同的文件
也就是说,假设commitba3c046
中有文件A1.txt
和A2.txt
,commit50fcdab
中有A2.txt
和B1.txt
(commit中没有任何其他文件)。这两个A2.txt
文件很可能是“相同”的文件,即使内容有所改变。可能有人签出了commitba3c046
并修改了文件,然后根据修改后的结果进行commit50fcdab
但是A1.txt
vsB1.txt
呢?可能有人签出了ba3c046
,重命名了该文件,对其进行了更改或不进行更改,并进行了提交50fcdab
。如果他们这样做了,commit50fcdab
的B1.txt
实际上是与commitba3c046
的A1.txt
相同的文件
Git确定这两个文件是真正相同的文件还是“几乎相同”(重命名并稍微更改)的文件的方法是比较它们的相似性。为此,它计算A1.txt
和B1.txt
之间的相似性指数
现在假设我们比较commitba3c046
(及其两个文件)和commit0f3ac31
,后者有A2.txt
、B1.txt
、和C1.txt
。每次提交对Git来说都无关紧要;Git将查看A1.txt
中的内容,并对它们与0f3ac31
的B1.txt
和0f3ac31
的C1.txt
的相似性进行评分。如果文件足够相似,Git将匹配它。Git将选择与ba3c046
中的A1.txt
最相似的0f3ac31
文件
这个通过文件内容匹配程度来匹配文件的过程是Git如何确定两次提交中哪些文件是“相同”的Git diff
-ed。我在这个过程中使用的术语是识别文件,我不喜欢这些文件,因为我们没有试图找到100%相同的文件(尽管由于Git的内部存储系统,这样做很有帮助)
默认情况下,两个不同提交中的两个文件会自动标识(称为“同一文件”)如果它们有相同的名称,即使它们的内容有很大差异。也就是说,这两个文件是预先配对的,而不是因为计算出的相似性而配对。在这种情况下,它们的相似性索引将相对较差,Git将称之为“重写”
Git还有一个相异性索引概念,它只需100减去相似性:例如,75%相似的文件有25%不同git diff的标志可用于打破git默认假设的自动配对,即左侧提交中路径为P的文件必须与右侧提交中路径为P的文件相同。不过,运行git merge
会调用git diff
,而不设置中断标志
< P>计算相似度是昂贵的,所以它只针对未成对的文件或B-<代码>。未成对的文件最初是没有另一方的,或者是由 -B<代码>分开的。如果使用 -C<代码>或 >查找副本<代码>或<代码> -查找复制更难的选项,Git将考虑一些左撇子/SO。源端文件可能已复制到某些右侧/目标端文件,因此将源端文件与目标端文件配对不会从“源”中删除源文件对于diff两侧包含大量文件的大型存储库,这需要进行大量相似性计算,并且可能需要花费大量时间
1您还可以从
git apply
中获得相似性索引。我认为git merge
的diffstat输出现在直接内置到git merge
本身,但对于真正的合并,您可以通过运行git diff--stat ^1
来重复它
对于快进操作(虽然git merge
可以实现,但它实际上不是一个合并),您需要指定正确的提交对。就在git pull
之后,这是HEAD{1}
和HEAD
,所以git diff--stat HEAD{1}HEAD
会起作用,但由于这些是相对的名称,它们会在一段时间后停止工作。)此外,一些Shell(例如Windows上的PowerShell,Linux上的tcsh和zsh)使我们很难提供他们喜欢的@{1}
后缀