【发布时间】:2009-12-13 20:12:06
【问题描述】:
假设我在文件 A 中有函数 X,我想将该函数移动到文件 B。与此同时,其他人对文件 A 中的函数 X 进行了更改。
合并这两个更改时,git 有什么特别之处吗?它会识别出相同的功能已移至文件 B 并在那里应用更改吗?或者我们最终会丢失更改或在文件 A 和 B 中拥有相同函数的两个副本?
我发现的大多数关于在 git 中移动代码的文章主要是指重命名整个文件,而不是文件内的代码块。我找到的最接近的是blurb from Linus at kerneltrap:
而当使用 git 时,整个 'keep 代码移动与更改分开' 还有一个更根本的原因: git 可以跟踪代码移动(再次, 无论是移动整个文件还是仅移动一个 文件之间的函数),并做一个 'git blame -C' 实际上会跟随 文件之间的代码移动。它确实 通过相似性分析,但它 确实意味着如果你们都移动 代码和同时改变它, git 看不到'哦,那个功能 最初来自另一个文件', 现在你得到更糟糕的注释 关于代码的实际来源。
所以看起来 git 会识别出代码被移到了其他地方,但并没有真正说明合并期间会发生什么。
【问题讨论】:
标签: git