如何将函数声明移动到另一个文件但仍保留Git历史记录?

时间:2013-07-17 11:56:02

标签: git refactoring

我正在重构单个文件的PHP脚本,以在单独的文件中声明函数和类。 如何将一个代码块从一个文件移动到另一个文件但是保留每个单独行的Git历史记录?我希望能够至少使用代码git blame 。与旧版本相比也会有所帮助。

请注意,我对“解决方法”解决方案不感兴趣,这些解决方案需要在代码上使用其他命令或标记(例如--follow)才能查看其“旧”历史记录,查看历史记录的人员可能会要知道该文件需要特殊处理。我正在寻找一个解决方案来编写必要的元数据,以便正常的git命令,如blamelogdiff,以及这样的'只是工作',而不向他们提供额外的标志或参数

我已经阅读了很多few posts寻找similar problems的解决方案,但没有解决个别问题git blame的问题。我认为可以解决的一个解决方案是copy the file and its entire history,然后再解决这个问题。但是,这个问题仍然没有令人满意的答案。

1 个答案:

答案 0 :(得分:5)

警告:这假设rewriting history可以接受。除非您知道重写历史记录的含义,否则不要使用它。

要将文件拆分为多个文件,同时保留历史记录,请使用git filter-branch

git filter-branch --tree-filter 'if [ -f original.php ]; then 
    echo part1.php part2.php part3.php | xargs -n 1 cp original.php; fi' HEAD

然后从每个文件中删除你不想要的行(只留下所需的函数和类)并提交结果!