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

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

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

最佳答案

警告:这假设 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

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

关于git - 如何将函数声明移动到另一个文件但保留 Git 历史记录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17699167/

10-14 19:36
查看更多