我有两个任意文件。 Git不会将它们视为一个重命名的文件。是否有可能测量它们之间的相似性(百分比)?
答案 0 :(得分:0)
可能会对行进行计数并将其与diff中的行数进行比较:
#!/bin/bash
SIZE1=`wc -l "$1" | cut -d' ' -f1`
SIZE2=`wc -l "$2" | cut -d' ' -f1`
#choose bigger file
SIZEMAX=$(($SIZE1>$SIZE2?$SIZE1:$SIZE2))
SIZEDIFF=`diff -u1 "$1" "$2" | wc -l | cut -d' ' -f1`
#divide second result halved by first result is the amount of change
#1 - amount of change is the similarity
perl -e "print (1.0 - ($SIZEDIFF/2.0) / $SIZEMAX)"
将代码放入similarity.sh
并使用您要比较的文件调用./similarity.sh x.txt y.txt
。
答案 1 :(得分:0)
可以使用git diff -M
来检测重命名。
来自git diff
手册页:
-M [], - find-renames [=] 检测重命名。如果指定n,则它是相似性指数的阈值(即,与文件大小相比的添加/删除量)。例如,-M90%表示Git应该将删除/添加对视为a 如果文件的90%以上未更改,请重命名。如果没有%符号,则该数字将作为分数读取,并在其前面加上小数点。即,-M5变为0.5,因此与-M50%相同。同样,-M05是 与-M5%相同。要将检测限制为精确重命名,请使用-M100%。默认相似性指数为50%。