本身并没有大型开源项目的实际参与经验,所以真的只是浅显理解。
如有问题,敬请指正。
TensorFlow项目中,1个release对应1个tag,1个tag对应1个branch里的1个commit,1个pull request可能包含0个、1个或者多个commits
项目的开发者会不断地commit,累积到一定程度,形成一个tag,相当于是一个里程碑,标记一下开发到哪了
某些tag会变成release,相当于这个tag对应的文件可以正式发布了
开发过程中,可能会形成分支
有的项目里,一个release或者一个tag就是对应一个分支,比如TensorFlow和后期的Keras
TensorFlow项目发布一个版本,就分出去一个分支,这样就可以持续维护这个发布的版本,然后master继续向前
比如发布了一个2.6的版本(同时分支),后面发现2.6有bug,就可以在2.6的分支上维护,形成新的版本,比如2.6.1
有的项目里,release或者tag都在master分支里,比如caffe和前期的keras
在开发过程中,可能有一些不是项目团队的贡献者,也想开发或者也想改点东西,于是有了pull request,相当于给那些项目外的开发者,把他们开发的成果合并进来
一个常见的流程
先 fork 别人的项目,相当于拷贝一份,不会有人直接让你改修原仓库
clone 到本地分支,做一些修改,比如bug fix
发起 pull request 给原项目,让他看到你修改的bug
原项目开发人员 review 这个 bug,如果是正确的话,就会 merge 到他自己的项目中
只有成功merge的pull request中的commits才能在原项目中查到