我有一个包含很多行的文件,并希望通过将其拆分为多个文件来重构它。通过简单地复制/粘贴,我将在git blame
时放弃承诺行及其作者的历史。有没有办法复制/粘贴这些行并保留其作者?
答案 0 :(得分:3)
Git不会记录特定代码行的作者(或提交者)。
Git所做的事情 - 所有 - 记录完整快照,与一组元数据配对:作者姓名/电子邮件/日期,提交者姓名/电子邮件/ date,parent commit。
各种工具,例如git log
,git show
,git diff
和git annotate
(或git blame
),以各种方式使用记录的数据。特别是git blame
代码将每个提交与其父代进行比较。如果在此特定提交中添加或更改了某些行,则会将提交的作者分配给整个行并报告结果。
这意味着很容易让工具将一些特定的更改行分配给某个特定作者:使用该名称设置为作者进行提交。
这也意味着很容易意外地改变文件的每一行(例如,通过将行终止符从LF改为CRLF,反之亦然)和"获取作者身份"该文件的每一行。但所有这些意味着当您使用git blame
时,您需要知道如何使用该工具:您需要了解其局限性。
有些人 - 我将自己包含在这个群组中 - 会争辩说如果你移动代码进行重构,你应该"取得所有权"移动的线条。原作者可能已经编写了原始代码,但不是以该形式。例如,行for i in expr
表示在两个不同的函数和/或文件中有很大不同。如果你移动一个足够大的块,也许代码保留其真正的意义",并且......也许不是。 Git会将原始行的原始作者保留在原来的位置,任何理解git blame
的人都不会只查看新的重构代码,而是继续按照历史记录查找其原始作者, -refactor。
但是,如果你想分开"作者"和#34;提交者",Git为您提供(按提交)方式。