我正在重构一个单文件 PHP 脚本以在单独的文件中声明函数和类。 如何将代码块从一个文件移动到另一个文件,同时保留每一行的 Git 历史记录? 我希望能够在代码上至少使用 git blame
。与旧版本进行比较也会有所帮助。
请注意,我对在代码上需要额外命令或标志(例如 --follow
)以查看其“旧”历史记录的“解决方法”解决方案不感兴趣,查看历史记录的人必须知道该文件需要特殊治疗。我正在寻找一种解决方案,它写入必要的元数据,以便正常的 git 命令,例如 blame
、 log
、 diff
,以及这样的“正常工作”,而无需向他们提供额外的标志或参数。
我已经阅读了相当多的 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/