放在以前,这是一件很容易的事情。因为原先github的commits页面是按照?page=100这样的参数组织分页的,所以我只需要通过url直接访问https://github.com/facebook/react/commits/master?page=100
, 就能知道第100页有没有commits。然后通过二分法便能快速定位到最后一个有commit的page是多少。
然而,现在就不容易了。因为github改版了,现在的commits分页页面是这样的https://github.com/facebook/react/commits/master?after=Y3Vyc29yOstm9cRAV8BHxA0tkrQuPluXwVcZKzM0且这个after参数并非commit的id,这就很烦人了。
================分割线===============
我找了一个临时性的解决方案,那就是直接调用github提供的公共api:https://api.github.com/repos/facebook/react/commits?page=261
这个api依然支持page参数,所以,我们又可以愉快地使用二分法了!
缺点:由于是公共api,所以会有调用频次的限制。(可以通过注册应用来解决,不过很麻烦)
至此,你就可以使用这个方法找到react的第一个commit了:75897c2dcd1dd3a6ca46284dd37e13d22b4b16b4
然而,当你去查看这个commit的时候,你会发现有点懵逼。。因为即便是第一个commit,那代码也至少有成千上万行。究其原因,是因为react一开始就是facebook的内部产物,人家在内部开发得差不多了,才开源到github上,所以,之前的commit都丢失了,无法追溯。
另外,要提一点,那就是分支的选择。因为commit是可以通过rebase来重置合并的,比如像vue现在的master分支,你追溯master分支最早的commit,会发现是2016年的,这显然是合并过的。要想找到最最最初的版本,有时候你还得合理地选择分支,比如选择branch 0.11,这是vue的早期版本,其commit并没有被合并,所以可以通过公共api查询到。
还有其他人发现的一些方法:
http://webapps.stackexchange.com/a/59893
http://webapps.stackexchange.com/a/99526
不过,这些方法并不完善,请灵活使用。
总的来说,自github改版之后,我就没有找到非常快捷又方便的方法。如果你找到了,欢迎交流。