FrankKai / FrankKai.github.io

FE blog
https://frankkai.github.io/
363 stars 39 forks source link

如何参与开源项目? #111

Open FrankKai opened 5 years ago

FrankKai commented 5 years ago

现在自己有非常强烈的学习开源代码的冲动,但是直接看源码又看不懂,因此特地开此issue,记录自己在阅读开源项目代码上的收获。

FrankKai commented 5 years ago

如何学习开源项目的源代码?

如何挑选一个自己想做贡献的开源项目?

贡献给自己经常用的开源项目。 因为只有这样的开源项目我们才知道它的优缺点。比如Webpack,Browserify这种可能有些API感觉可以优化的。或者我们用React库或者Angular模块需要再打磨一下。有一点可以确认,那就是你正在做的东西,由于你的contribute,可以让自己和他人从中受益。

我们可以为开源项目贡献些什么?

大多数项目都有一个CONTRIBUTING文件。这个文件会有项目的贡献说明。若没有这个文件,可能在README里。若是README里都没有这个文件,那么你就可以提交一个pull request去添加一个简单的CONTRIBUTE.md文件。 vue的CONTRIBUTING.md在这里:https://github.com/vuejs/vue/blob/dev/.github/CONTRIBUTING.md

如何熟悉一个开源项目?

阅读文档是个好方法,但是更好的方式是阅读代码。 通过debugger step into到function calls是一个非常好的方法。 step through代我们将学习到框架、库到底是如何工作的。一开始不理解很正常,时间久了就理解了。只要坚持。

如何非常熟悉一个开源项目?

意外收获

What's the meaning of the phrase 'Silver bullet'(银弹)?

A direct and effortless solution to a problem,简单直接的解决问题的办法。

参考: How I learn an Open Source Codebase What open source project should I contribute to?

FrankKai commented 5 years ago

关于Pull Request那些事儿

PR概览

PR允许你告诉其他人在自己push的分支上有哪些改变。一旦PR处于open状态,你可以和其他人讨论并且review潜在的变化,并且在改变提交到主分支前持续提交。

提PR的时候需要注意哪些事?
创建分支后可以做哪些操作?
什么时候可以merge PR?

happy。从当前branch merge到base branch。 有时会有状态检查,只有通过状态检查才能merge到protected branch。

可以压缩PR的commit吗?

可以。一个PR的多次commit可以被squash成一次,增强项目的可控性。

意外收获
什么是shared repository model?

In the shared repository model, collaborators are granted push access to a single shared repository and topic branches are created when changes need to be made.Pull requests are useful in this model as they initiate code review and general discussion about a set of changes before the changes are merged into the main development branch. This model is more prevalent with small teams and organizations collaborating on private projects.

其实就是所有人都有权限向主分支合并代码,PR在这种模式下可用于code review,常用于小团队的合作。

什么是topic branch

若是熟悉gitflow,那么topic可以理解为hotfix,feature分支。'topic'的意思是,要让这个分支有意义,有一个关注某个点的主题,topic也是分支创建的原因。

创建一个PR?

创建PR的步骤

1.New pull request 2.选择base branch和compare(topic) branch 3.为PR键入标题和描述信息 4.Create pull request

可以引入CI帮助我们自动构建并且测试bug,CircleCI是一款很不错的CI选择,需要新建.circleci/confgi.yml并填入配置信息。

merge一个PR

3种Merge pull request的方式: image

squash commits与rebase commits区别是什么? squash commits 并 merge:压缩所有commits成一个commit image


rebase看起来与commit all 一样,会记录所有的提交记录。 但是若有冲突,不允许rebase commits and merge。但其实rebase 较为复杂,需要先补充下Git rebase的知识点。可以参考:如何理解git rebase?

其实rebase只是做了一个git rebase的操作,另一种使得history更加清晰的一种integrate change的方式。相当于:

git checkout feature
git rebase master

像下图这样: image

image

FrankKai commented 5 years ago

如何迈出学习开源项目的第一步?

到github,看项目release。

挑选release中自己敢兴趣的bugfix和improvements,深入一个学习,这里我将挑选vue作为自己感兴趣的开源项目,因为vue是自己的工作框架,需要深入挖掘。