12

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

请注意,我对需要--follow代码上的其他命令或标志(例如)以查看其“旧”历史记录的“解决方法”解决方案不感兴趣,查看历史记录的人必须知道该文件需要特殊处理. 我正在寻找一种解决方案,它可以写入必要的元数据,以便正常的 git 命令(如blamelogdiff等)“正常工作”,而无需向它们提供额外的标志或参数。

我已经阅读了很多寻找 类似问题的解决方案的帖子,但没有一个解决个别行的问题。我认为可行的一种解决方案是复制文件及其整个历史记录,然后解决此问题。然而,这个问题仍然没有令人满意的答案。git blame

4

1 回答 1

6

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

要在维护历史记录的同时将文件拆分为多个文件,请使用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

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

于 2013-07-31T04:10:35.203 回答