相关疑难解决方法(0)

是否有类似diff的算法来处理移动的线条?

diff程序以其各种形式,相当擅长计算两个文本文件之间的差异,并且比完整地显示两个文件更紧凑地表达它.它将差异显示为插入和删除的行块的序列(或在某些情况下更改的行,但这相当于删除后插入).patch源控制系统使用相同或非常类似的程序或算法来最小化表示同一文件的两个版本之间的差异所需的存储.这里这里讨论算法.

但是当文件块在文件中移动时,它会掉下来.

假设您有以下两个文件,a.txt并且b.txt(假设它们都是数百行而不是6行):

a.txt   b.txt
-----   -----
1       4
2       5
3       6
4       1
5       2
6       3
Run Code Online (Sandbox Code Playgroud)

diff a.txt b.txt 显示这个:

$ diff a.txt b.txt 
1,3d0
< 1
< 2
< 3
6a4,6
> 1
> 2
> 3
Run Code Online (Sandbox Code Playgroud)

a.txtto 更改b.txt可以表示为"取前三行并将它们移动到最后",但是diff显示移动的行块的完整内容两次,错过了非常简短地描述这个大变化的机会.

请注意,diff -e仅显示一次文本块,但这是因为它不显示已删除行的内容.

是否存在diff算法的变体(a)保留diff表示插入和删除的能力,以及(b)有效地表示移动的文本块而不必显示其全部内容?

algorithm diff

48
推荐指数
4
解决办法
8207
查看次数

让Git关注重命名和编辑的文件

大约在Git中重命名文件的问题 过,但我不能制定出一个解决方案,我的具体问题.

我已经移动并编辑了多个文件(我没有使用git mv- 不幸的是现在已经太晚了).现在我想要它,所以当我的同事从我的存储库中取出时,对这些相同的文件进行了自己的编辑(没有移动它们),它成功地将我的更改与他在文件的新位置中合并.为了成功合并,Git显然需要知道这些文件是相同的.

Git是否足够聪明地独自完成这项工作?似乎很难相信.如果是这样,我怎么能确定Git会拾取特定的文件移动 - 即使内容已经改变了?

git version-control file-rename git-merge

15
推荐指数
2
解决办法
9174
查看次数

标签 统计

algorithm ×1

diff ×1

file-rename ×1

git ×1

git-merge ×1

version-control ×1