移动一些文件后检测到Git合并冲突

时间:2015-01-28 15:14:08

标签: git git-merge file-rename

我们目前正在处理一堆文件,这些文件都在git存储库中进行跟踪。 在某些时候,我们不得不移动部分文件,我们使用:

git mv repo/file.c new_repo/

对" new_repo / file.c"进行一些修改后; (并且通过修改,我的意思是很多变化),我们必须在主分支上进行重新定义(文件没有被移动)。

让我们在这个分支上说" repo / file.c"已被修改,GIT是否会检测" new_repo / file.c"之间的合并冲突?在工作分支& "回购/ file.c"在主要分支?这些文件是否被认为是相同的,即使它们经过多次修改?

2 个答案:

答案 0 :(得分:1)

Git会尝试使用 相似性启发式 检测合并一侧的哪些文件对应合并另一侧的哪些文件(如何类似的文件及其文件名是。)

它通常适用于O.K.如果它没有,并且您使用了增量更改(即逐步更改文件,提交提交),则可以尝试使用git-imerge工具。

答案 1 :(得分:1)

Git不存储副本和重命名,它试图使用启发式方法来计算它们。它并不总是努力。可以告诉默认的合并策略(递归)更加努力。

rename-threshold=<n>
    Controls the similarity threshold used for rename detection.
    See also git-diff(1)-M.

相似性阈值定义为......

  

(即与文件大小相比的添加/删除量)。例如,-M90%表示如果超过90%的文件未更改,Git应将删除/添加对视为重命名。如果没有%符号,则该数字将作为分数读取,并在其前面加上小数点。即,-M5变为0.5,因此与-M50%相同。同样,-M05与-M5%相同。要将检测限制为精确重命名,请使用-M100%。默认相似性指数为50%。

我不知道递归合并的默认值是什么,可能是50%。尝试git merge -X rename-threshold=50%然后40%,30%等等。