我们重写了历史
2024年11月30日 13:00-22:00
2024年12月1日-12月3日
TL;DR 赶时间的同学可以直接滑到底部看重点。
历史是不能重演的,然而,我们重写了历史。
在 FreeSWITCH 代码仓库里,有两个有问题的提交,它们都有两位作者。不知道当时合并代码时出了什么差错,反正,在最新的 Git 版本里,这两个检查会报错,而且,不管是 Github 还是 Gitlab,都不允许这样的提交。
这也是为什么 FreeSWITCH 一直使用自己的 Git 仓库,直到 2023 年才迁移到 Github 上。据说当时是联系了 Github 临时关闭了这个检查。
这个检查只有首次向仓库提交代码时才会进行,因而,直接在 Github 上 Fork FreeSWITCH 代码是没有问题的。但直接 Fork FreeSWITCH 代码,无法将公开的仓库转为私有仓库,另外,转推到其他托管平台如 Gitlab 等也会遇到同样的问题。
这两个有问题的提交是:
$ freeswitch git:(master) ✗ git fsck
Checking object directories: 100% (256/256), done.
error in commit 487128950df6ee433c131b5feaafe81ee86629f4: multipleAuthors: invalid format - multiple 'author' lines
error in commit 8574988c3a378b4d5861ecaeb0e958657635703b: multipleAuthors: invalid format - multiple 'author' lines
Checking objects: 100% (422458/422458), done.
有很多人遇到这个问题,如:
- https://github.com/signalwire/freeswitch/issues/1084
- https://moythreads.com/wordpress/2014/07/22/github-and-multiple-authors-commits/
官方的解决方案是——直接在 Github 上点 Fork 按钮就 OK 了。其实官方也不是不想解决这一问题,但是,如果解决就涉及到重写 Git 历史,而他们又不想重写历史,所以,这个问题就一直存在。
在做 RTS 时,我们决定重写历史。
当然,重写历史不是那么简单。通过 rebase,我们很容易就修复了那两个作者问题,在 rebase 的过程中,在对应的提交处停下,执行如下命令修改成一个作者就 OK 了。
git commit --amend --author "Travis Cross <tc@traviscross.com>"
但是,rebase 过程中,有一些 merge 的提交也会被“捊直”,因此,还是会遇到一些冲突。我差不多花了一晚上的时间才解决完。
现在,历史已经被重写了,时间线非常清爽。
而重写之前的历史简直不忍直视:
好了,言归正传:我们重写历史是为了做 RTS。
RTS 是一个 FreeSWITCH 的衍生品,我们会以 RTS 为蓝本,做一些新的开发。
RTS 会尽量跟 FreeSWITCH 保持兼容,只是会更好。
RTS 是开源的,这意味着,你也可以用。
更多信息参见:
- RTS 文档。
- 你希望 RTS 中有哪些功能?欢迎告诉我们。
- 欢迎跟我们讨论任何问题,也欢迎给我们提 PR。
新起点,新征程。2024,未来可期。我们都在 Github 上见。