5

读完这篇文章后,我想到了这个问题:Git 真的可以跟踪单个函数从一个文件到另一个文件的移动吗?如果是这样,怎么做?

这是工作流程:

“很久以前”,我们将一个大文件拆分为folder/file.py多个文件 : folder1/file.pyfolder2/file.py依此类推。

git blame -C当我们查看时正确地显示了该代码的历史记录folder2/file.py,我们看到一些提交是在此拆分之前进行的。

问题是我们继续维护仍然存在的旧版本代码,folder/file.py当我们将修复合并回“当前”版本时,git 不断重新创建文件夹folder,并且没有看到folder/file.py应该合并到的修复folder1/file.py或者folder2/file.py取决于这段代码现在所在的位置。

我快速查看,git help merge但没有找到任何相关信息。

4

1 回答 1

0

合并不能利用git blame -C,但git merge确实有重命名检测。从手册页:

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

Git 的重命名阈值可能太高而无法在合并期间检测到您的重命名。检测也可能计算量太大。尝试使用较低的重命名阈值(例如 75)进行测试合并:

git merge -X rename-threshold=75 <branch>

您可能需要玩一会儿才能找到正确的数字,如果 git 因为计算难度太大而退出,请尝试设置git config merge.renamelimit 0上面链接的线程中讨论的值。

如果上述方法失败,这个答案也可能会有所帮助。我没有尝试-X ignore-space-change或链接脚本,但它可能值得调查。

于 2012-06-15T13:32:29.697 回答