【问题标题】:How to preserve git history when refactoring into multiple files重构为多个文件时如何保留 git 历史记录
【发布时间】:2016-08-02 20:01:22
【问题描述】:

我有一个丑陋的 SCSS 文件。我想将其拆分为多个其他文件以使其更易于使用。

如果我的文件是,

file.scss

我想以类似的方式结束,

file.scss
file-sm.scss
file-md.scss
file-lg.scss

smmdlg 都将具有原始 files.scss 的重要部分,因此我想保留/复制它们的历史记录,以便于未来的开发和未来的开发人员。

如何将一个文件重构为多个新文件并将历史记录保留或复制到新文件中?

【问题讨论】:

    标签: git


    【解决方案1】:

    Git 具有基于文件相似性的内置重命名/复制检测。为确保它启动,首先将file.scss 的普通副本复制到所有file-{sm,md,lg}.scss 并提交这些文件。然后从这些文件中删除不需要的部分,删除file.scss,然后再次提交。现在例如git log --follow --find-copies file-sm.scss 应该显示 file-sm.scss 的历史记录,包括 file.scss 之一。

    【讨论】:

      【解决方案2】:

      您需要进行一次涉及旧文件和新文件的提交,以便 git 将来关联它们。

      复制原始文件,但暂时不要更改新文件:

      cp file.scss file-sm.scss
      cp file.scss file-md.scss
      cp file.scss file-lg.scss
      

      对原始文件进行微小的临时更改,使其与新文件一起提交:

      echo "// refactoring: split the file" >> file.scss
      

      提交更改:

      git add .
      git commit -m "Refactor: splitting up file.scss"
      

      现在您可以在使用--follow-C1 标志时查看旧文件的历史记录:

      git log --follow file-lg.scss
      git blame -C1 file-lg.scss
      

      清除“//重构..”注释并继续重构。

      +1 在重构时保留历史记录 - 未来的开发者会感谢您。

      【讨论】:

      • 将原始文件的副本带入时,触摸原始文件有什么好处? (other answer 省略了这一步。)
      猜你喜欢
      • 2011-04-22
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多