【问题标题】:How to copy lines by preserving authors如何通过保留作者来复制行
【发布时间】:2018-01-30 07:56:18
【问题描述】:

我有一个包含很多行的文件,并希望通过将其拆分到多个文件中来重构它。当git blameing 时,通过简单的复制/粘贴,我将丢失已提交行及其作者的历史记录。有没有办法复制/粘贴这些行并保留他们的作者?

【问题讨论】:

  • 不是一个完美的骗子,但应该回答你的问题
  • @LasseV.Karlsen 以及它将如何帮助我保护作者?
  • 你必须以作者的名义提交
  • Git 会将粘贴的行归属于添加它们的提交的作者,你无法说服 git 去寻找原作者,所以你必须在提交时明确。

标签: git version-control git-blame


【解决方案1】:

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

Git 所做的——所有它所做的——是记录一个完整的快照,并与一组元数据配对:作者姓名/电子邮件/日期,提交者姓名/电子邮件/日期,父提交。

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

这意味着很容易让该工具将某些特定的更改行集分配给某个特定的作者:将该名称设置为作者进行提交。

这也意味着很容易意外更改文件的每一行(例如,通过将行终止符从 LF-only 更改为 CRLF,反之亦然)并“获取作者身份”该文件的每一行。但这一切意味着,当您使用git blame 时,您需要知道如何使用该工具:您需要了解它的局限性。

有些人——我包括我自己在内——会争辩说,如果移动代码进行重构,你应该“拥有”移动的行。原作者可能已经编写了原始代码,但不是那种形式。例如,for i in expr 行在两个不同的函数和/或文件中意味着非常不同的东西。如果您移动了足够大的块,则代码可能会保留其“真正含义”,并且……也许不会。 Git会将原行的原作者保留在原处,任何理解git blame的人都不会只看新的重构代码,而是继续沿着代码追溯历史寻找它的原作者,预重构.

不过,如果您想拆分“作者”和“提交者”,Git 为您提供了一种(每次提交)方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多