如何通过保留作者来复制行

How to copy lines by preserving authors

我有一个包含很多行的文件,我想重构它,将它拆分成多个文件。通过简单地 copy/pasting 我将在 git blameing 时丢失提交行及其作者的历史记录。有什么办法可以 copy/paste 这些台词并保留它们的作者吗?

Git不记录特定代码行的作者(或提交者)。

Git 的作用——全部 它的作用——是记录一个完整的快照,并配以一组元数据: 作者 name/email/date,提交者 name/email/date,父提交。

各种工具,例如git loggit showgit diffgit annotate(或git blame),以各种方式使用记录的数据.特别是 git blame 代码会将每个提交与其父提交进行比较。如果在 这个特定的提交 中添加或更改了某些行,它会将提交的作者分配给整行并报告结果。

这意味着可以很容易地使用该工具将一组特定的更改行分配给某个特定的作者:使用该名称设置为作者进行提交。

这也意味着很容易意外更改文件的每一行(例如,将行终止符从仅 LF 更改为 CRLF,反之亦然)和该文件每一行的 "acquire authorship"。但这一切意味着当您使用 git blame 时,您需要知道如何使用该工具:您需要了解它的局限性。

有些人——我自己也属于这一组——会争辩说,如果为了重构而移动代码,你应该"take ownership" 移动的行。原作者可能写了原始代码,但不是那种形式。例如,行 for i in expr 在两个不同的函数 and/or 文件中意味着非常不同的东西。如果你移动了足够大的块,也许代码会保留它的 "real meaning",并且......也许不会。 Git会将原作者的行保留在原处,懂git blame的人不会只看重构后的新代码,而是继续顺着代码回溯历史寻找它原作者,预重构。

不过,如果您想拆分 "author" 和 "committer",Git 为您提供了一种(每次提交)的方法。