Git责备-M:意外行为
当使用git-M来检测一个文件中的代码移动时,我得到了无法解释的结果 首先,我提交以下文件(file.cpp): 然后我通过移动第一行中的内容并添加新内容来修改它:Git责备-M:意外行为,git,blame,Git,Blame,当使用git-M来检测一个文件中的代码移动时,我得到了无法解释的结果 首先,我提交以下文件(file.cpp): 然后我通过移动第一行中的内容并添加新内容来修改它: float newFunc(){return 23.0;}[CR][LF] int func2(){return 23;}[CR][LF] [CR][LF] [CR][LF] void func1(){return;}[CR][LF] 日志现在如下所示: >git log --oneline -2 18c670f modif
float newFunc(){return 23.0;}[CR][LF]
int func2(){return 23;}[CR][LF]
[CR][LF]
[CR][LF]
void func1(){return;}[CR][LF]
日志现在如下所示:
>git log --oneline -2
18c670f modified file.cpp
92b4186 added file.cpp
现在我要责备:
git blame -s -w -M file.cpp
18c670fa 1) float newFunc(){return 23.0;}
92b4186d 2) int func2(){return 23;}
18c670fa 3)
18c670fa 4)
18c670fa 5) void func1(){return;}
我想知道为什么包含func1()的行未被识别为已移动。我已尝试减少所需字符数(即-M4等)。此外,由于-w选项,空格应该不重要。(3年后)
我想知道为什么包含func1()
的行未被识别为已移动
这可能与最近(2016年7月)升级的git 2.10的一个修复错误有关:
参见(2016年5月28日)作者。(于2016年7月19日被合并)
责怪
:查找带有-M的移动行时需要0个上下文行
git-M
的核心部分需要1行上下文,但是
准则中没有任何理由;它会产生伪影
就像在中讨论的那样
函数diff\u hunks
是diff
引擎的包装器。将上下文长度显式地放入此包装器(而不是不传递参数,而是在 函数)明确表示有人希望用 不同的价值观 文件中没有关于原因的文件或理由 我记得。
也许它会崩溃,或者以无限循环结束。也许它可以在某个时间点这样做,但现在不会了 不确定它是否有用,但似乎又添加了
ctxlen=1
似乎不检测单线运动是每个设计,只是文件不准确
关于这个。这样的增强是否可以视为功能要求
对之前选择的历史有了更多的了解
唯一的一点是,我们为什么会想到非零上下文
这是个好主意,我说:
为了通过“ciff
”算法更好地识别拷贝源,我们可能需要使用一些周围的上下文行,但这只是一个次要的实现细节
git blame -s -w -M file.cpp
18c670fa 1) float newFunc(){return 23.0;}
92b4186d 2) int func2(){return 23;}
18c670fa 3)
18c670fa 4)
18c670fa 5) void func1(){return;}