2018.07.06 | 零零碎碎 | 9271 浏览 | 0 赞 | 8 条评论


请注意,本文编写于 2331 天前,最后修改于 2027 天前,其中某些信息可能已经过时。
AI摘要:本文介绍了如何使用GitHub为开源项目贡献代码。首先fork别人的项目,然后clone到本地进行修改。接着进行本地提交,将修改同步到GitHub的远程仓库。之后,通过pull request将修改提交到项目。如果想继续同步主分支的更改并在此基础上开发,可以使用git rebase操作。最后,作者希望大家在开源路上越走越远。

Powered by AISummary and MoonShot KimiChat.

最近也是闲到没事干(误),开始给开源项目打小黑工贡献代码,当个dalao手底下的端茶党。

但是看来端茶党也不是那么容易做的或许只是傻翠他智商太低跟不上,在打小黑工的时候遇到了各种各样的麻烦,下面大概记录一下,不知道以后有没有人能用得上。

fork, clone与修改

首先我们要做的就是fork别人的项目。这个没什么好说的,在GitHub的项目主页上大大的fork键,放心点击就是了。这样做的目的是将项目“复制”一份到自己的空间中,便于下一步的clone与修改。

之后我们会发现在我们自己的仓库中多了一个该项目的副本,将该项目clone到本地,最便捷的方法便是使用GitHub的桌面应用程序进行操作。进入File -> Clone repository,找到项目,选择路径便可以进行克隆,这样项目的文件便被复制到了自己本地的电脑里。

之后~尽情地瞎jb 修改叭~

改动的提交

假设我们现在已经修改好啦,或者是debug成功并增加了新的bug,或者是增加了新的feature并增加了一些bug,看似大功告成但还有很长的一段路要走——提交我们的修改。改动的提交分为以下几个阶段:本地的提交,本地到远程仓库的提交与远程仓库到项目的提交。

本地的提交

首先是本地的提交,对于git,在本地的文件做了修改时候,我们需要将修改同步到git中,所使用的命令一般是这样的:

git add -A //这里指将全部的修改记录
git commit -m "日志内容" //这里是将修改进行打包并打上日志

这样,在我们的电脑中git就完成了更新。

提交到远程仓库

之后我们要将自己git上的更新同步到GitHub上,这时我们的命令如下:

git push

但是有可能出现以下错误(比如傻翠就出现了XD):

fatal: HttpRequestException encountered.

出现的原因是Github 禁用了TLS v1.0 and v1.1,必须更新Windows的git凭证管理器,反正点击这里下载安装就是了。

之后提交就会被上传至远程仓库啦~看GitHub中自己fork的项目,应该可以看到相应的更改了。

提交到项目

提交到项目的时候我们需要通过PR(pull request)进行。找到项目主页中的Pull Requests,猛击New Pull Request,之后GitHub会自动对比自己fork的分支和主分支的不同,之后写好标题和更新的内容,提交吧!

与主分支同步更新

其实这一块才是自己写这篇文章的最重要原因。现在自己进行过一次提交了,可是之后如果想继续同步主分支的更改并在此基础上再次开发的时候该怎么办呢?往常时候自己的做法也就是删掉之前自己clone的repository重新进行一次clone,但是emmm多少有点感觉上过不去,于是想折腾折腾看看到底该怎么办。

本来自己的想法是可以从他人的主分支上反merge(pull request)到自己的分支,但这样做的后果是:自己提交后再pull request回去时会有一次额外的commit记录,十分影响主分支的情况。

可以看到对于项目来说,如果进行merge再开发并pull request回去,一些改动(如图中C3)就被污染了,而这对于开发来讲是不利的。那么如何在不删除重新fork的情况下持续开发呢?经过查找之后发现了一种叫做git rebase的操作,似乎很适合这样的情况。

可以看到,经过git rebase后,代码依旧维持着原有的树结构,自己的提交与修改是建立在原有新增修改基础之上的,可以维持项目的整洁。

那么具体要怎么做呢,就让我们开始吧。首先我们要明白对于这样的项目来说,一般git会有两个分支:master分支是我们fork出的分支,也就是我们在修改的分支;upstream分支是该项目的主分支,也就是我们要提交的分支。现在我们要更新我们的分支,也即将master分支rebase到upstream分支上。

git fetch upstream
git checkout master
git rebase --onto upstream/master
git push --force

之所以加 --force参数,是由于该push本质上修改了git的历史commit,所以需要进行强制修正与提交。好了!现在整洁了,让我们继续开发吧!

最后愿大家在开源的坑里越挖越深路上越走越远!

参考资料

https://blog.csdn.net/zy20120580223/article/details/79618880
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
https://blog.csdn.net/chenansic/article/details/44122107

本文链接:https://idealclover.top/archives/340/

本作品由 idealclover 采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可,转载请注明出处。

标签: 文件, git, 分支, 提交, fork, 修改

0

已有 8 条评论


  1. RayHy
    RayHy 回复

    感谢感谢

  2. LingC
    LingC 回复

    大佬喝茶(ノ*・ω・)ノ

    1. idealclover
      idealclover 回复

      哔哩哔哩~干杯!( ゜- ゜)つロ

      1. LingC
        LingC 回复

        哔哩哔哩~干杯!( ゜- ゜)つロ

  3. ZGQ
    ZGQ 回复

    可怜我还没考完期末/(ㄒoㄒ)/~~

    1. idealclover
      idealclover 回复

      噗哈哈哈我五号就考完啦!(๑•̀ㅂ•́)و✧但是qwq在学校这边有各种事~大概要八月中旬才能回家呜呜呜~

🤔关于我
翠翠 idealclover
Product Manager @ByteDance
南京大学 2016 级本科生
了解更多
🏠关于博客
基于 Typecho 博客框架
使用个人的 clover clover 主题