如何参与一个开源项目?初次向开源仓库提交PR怎么做?一文讲清楚常见问题与最佳实践

        向开源仓库提交 pull request,是许多同学迈向开源之路的第一步,然而在提交pr的过程中经常遇到各种各样的问题,其中包括但不限于

  1. 代码规范:code conduct;
  2. git 中各种命令不熟悉,在提交时不知道 rebase 和 merge 有什么区别,导致 git log 混乱,无法合入主仓库;
  3. 开发时间较长,自己的仓库已经落后于主仓库,这时候如果单纯 git pull 的话,会引起自己的分支混乱;
  4.  自己的远程仓库中有许多分支与 commits,reviewer 要求压缩 commits 怎么办?
  5.  .....

由于不同的开源仓库有自己不同的的代码规范,本文不做重点讲,主要讲的是

从你fork远程仓库开始,如何在自己的仓库上进行开发、推送;开发完毕后如何与远程仓库合并、将自己的 commit 进行压缩,并进行最终的 pull request

1. fork 远程仓库

第一步,让我们找到心仪的开源项目,点击右上角的 fork(github 也一样)

随后你会看到一个这样的界面,其中只需要关注你的仓库名想要命名为什么,添加仓库的描述、是否仅拷贝 main 分支(这取决于你想要开发的分支是不是只有 main 分支)

2. 进行开发

在这个时候,你需要根据你的开发目的来创建分支 git branch(git 的常见命令本文不会进行介绍,介绍的是你使用这些命令时会遇到的问题,想要上手 git,你可以参考这个视频

【GeekHour】一小时Git教程_哔哩哔哩_bilibili 该视频以动画的形式进行讲解,能够让你快速上手 git

从开发目的判断你要拉取的分支与 commit 策略:

        添加一个小文本、为 readme 文件捉虫、修复一个 bug...这些小的修改你可以直接在目标分支上进行,也就是 git push 和 git commit 都在目标分支

        从无到有添加一个模块的功能、重构一整个功能模块...这些大的修改建议你创建自己的分支,利于你每完成一个小功能就提交一次 commit 并创建一个新的分支,便于管理自己的版本和思路,在开发方向错误时能够准确地找到自己之前的版本并进行回退

        具体怎么做呢?这里以我的 Gitee 仓库举例,github 的操作和 Gitee 相同,找到 克隆/下载 ,进行 git clone 与 git remote,也就是 ① 拉取想要开发的分支,假如你需要开发 master 分支就

git clone -b master xxxxxx.com # 你自己 fork 下来的仓库链接

 然后进行 git remote -v,检查你的分支是否与本地仓库进行连接了

大型开发的分支与 commits 策略

        建议你创建多个分支,有助于你直观地看到自己的版本变化,对于不熟悉 git 回退版本的新人是很重要的,毕竟对于新人来说,搞懂 git 的各个命令、能够成功地 commit、pull、push 就已经很不错了,将你的重心更多的放在项目开发上。

        分支策略如下:如果你要开发一个新功能,也就是 feature ,你可以按照 feature/s01,feature/s02,feature/s03... 的方式来管理分支,每一次 commit 都代表你功能的进一步完善。

        比如,你创建好了整个功能的框架,后续准备在此框架下进行开发,这个可以作为 feature/s01,你需要先

git commit -m "开发出了功能框架"

然后 push 到你的远程仓库,以此类推。

        此处需要注意,这样的 commit 是正常频率,也就是一个小进步一次 commit,如果你改一行代码也 commit,加几行注释也 commit,那么你的 git log 会十分混乱。

自己的commits很多,提交pr时社区要求你压缩 commits 怎么办?

        这是常见问题,如果你严格按照"一个进度一次 commit",那么你是对的,只不过各个社区的开发人员众多,管理版本需要再上一级,除非是修复bug、完善功能等,一般都是一个大改动才能出现在 git log 上,你可不希望你的仓库有一群 rookie 充满错别字和不明所以的 commits,对吧?

所以我们来学学如何压缩 commits,利用 rebase 这个命令,输入

git log --oneline

从一群 log 当中可以看到你秘密麻麻的 commits,是不是很可怕?不用急,我们找到最开始的那次提交,那就是你的父提交,再上一个,是之前的开发人员的提交,假设你的父提交是 n,请找到 n+1 的 log id,输入

git rebase -i 7484wa2l # n+1 log id

接下来你会看到这么一串输出

假设 7444af6 是你的父提交,你接下来只需要将它下面的 需要压缩的子提交(千万不要把不是你的 commit 给压缩了!)前面的 pick 全部改为 s(squash)就好了,如果出现冲突的话,再手动解决。

最后在下图所示的输出中,仅保留第一个提交说明,按照社区规范改成你会呈现在开源仓库中的 pr 说明,之后的提交说明前面都加上一个 # 就结束了。

如果你遇上了

error:没有父提交的情况下不能squash您可以用git rebase --edit-todo'修正,然后执行git rebase --continue'。或者您可以用"git rebase--abort’终止变基

这样的错误,说明你没有保留父提交,请重新检查 git rebase -i xxxxx 这一步

git log 整理

部分社区会对你的 git commit 有需求,比如要你把 vendor 目录的更新做一次 commit,代码部分的更新进行一次 commit,这时候你只需要

 git reset d4e45dda25b7c7

这将重置当前分支的指针到指定的提交 d4e45dda25b7c7ffa860c055990330430c016cfe,并保留未提交的修改 

接下来你需要 git add 某几个特定目录,作为一次 commit,另几个特定目录作为另一次 commit(根据社区需求进行调整)

3. 与远程分支进行同步

        由于 fork 下来的自己的仓库不会与官方仓库同步更新,所以请先进行更新,然后将你开发的分支合入更新后的分支,(只有这样才可以将官方仓库中新的分支合并下来),这些命令我就不赘述了,资料很多,可以自行进行查找。

4. 进行pull request

        到了这一步,你的功能应该已经开发的比较完善了,接下来需要按照社区的 code conduct,社区审核人员的建议对你的 pr 进行修改,如果 check 全部通过,恭喜你,你的开源之路开启了。

        创作不易,本文共两三千字,现在用心写的帖子很少,作为对创作者的鼓励,请点一个免费的赞,这会让楼主更有动力更新,谢谢各位。

        以上是关于进行开源仓库开发时的常见问题,如果你有git以外的问题,比如如何参与开源社区?如何了解一个开源项目?可以在评论区留言,楼主看到之后会及时回复。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值