将文件的部分内容移动到其他文件并保留 git 历史记录

Reg*_*lez 6 git

我有一个具有复杂历史的大文件(许多作者的许多提交)。

重构它应该将其分割成多个小文件,但是,我需要保留历史记录。

为了解决这个问题,假设我有一个main包含所有代码的文件:

function a() {}
function b() {}
function c() {}
function main() {
   a();
   b();
   c();
}
Run Code Online (Sandbox Code Playgroud)

我需要将ab函数分别移动到ab文件,同时将我的main函数保留在main文件中——同时将历史记录保留在三个文件中。

我在那里找到了某种解决方案,但在生产环境中没有任何实际有效或实用的解决方案。

Sch*_*ern 6

像平常一样移动代码。Git 可以帮助你阅读历史。

使用git blame -w -n -M -C -C -C。我喜欢将其别名为archeology.

  • -w忽略微小的空白更改。
  • -n显示原始提交的行号。
  • -M检测文件中移动或复制的行。
  • -C -C -C检测任何提交中从其他文件移动或复制的行。

同样,使用git log -w -M -C -C -C.

您还可以通过在一次提交中复制代码并在下一次提交中更改它来使考古工作变得更容易。然后,当您回读责任历史记录时,您将遇到一个显示“拆分文件 X”的提交。

最终,您花在更改代码上的时间比进行代码考古要多几个数量级。为代码考古优化开发流程是没有意义的。相反,根据需要更改代码并更有效地使用 Git。如果最终考古学有点困难,那也没关系;这比让开发变得更加困难要好。

比您想象的要早,特别是如果您将更改视为开发的正常部分,那么没有人会关心原始线路来自哪里。