天天看點

如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

一、fork 社群倉庫

打開你想參與貢獻的社群的倉庫的

github

頁面,并且

fork

這個倉庫

如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

打開你自己的

github

頁面,此時應該會多一個倉與你剛

fork

的倉庫同名

如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

二、更新fork倉庫與社群倉庫同步

官方倉:你想要貢獻的項目的官方倉庫位址

遠端倉:你 fork 下來之後,在你的 github 頁面上那個與官方倉同名的倉庫位址

本地倉:git clone 遠端倉之後下載下傳到你本地的代碼倉位址

fork

下來的不用,

fetch upstream

按鈕點選後會顯示你與官方倉是一緻的,不需要更新。就像這樣

如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

如果是已經

fork

了一段時間的,官方可能已經進行了很多修改,與你

fork

下來的時候不一樣了,就需要

fetch upstream

檢視官方更新,點選

fetch and merge

按鈕進行同步

如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

指令行同步方式,等價于上面的界面操作,二選一即可,小白建議直接點界面

# 克隆fork到自己github的代碼倉
git clone [email protected]:TinaSprunt/test.git

# 檢查remote資訊
git remote -v
           
如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)
# 添加官方倉位址
git remote add upstream https://github.com/peiyaos/test.git
           
如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)
# 拉取官方倉檔案,進行同步
git fetch upstream
           
如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)
# 将你已經同步好的本地倉push到你的遠端倉
git merge upstream/master
           
如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

此時本地倉、遠端倉、官方倉三者就處于一緻狀态了,可以進行開發了

同步流程關系簡單畫了個圖,輔助了解:

如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

三、建立開發分支進行開發

如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

指令行建立分支方式,等價于上面的界面操作,二選一即可,小白建議直接點界面

# 建立分支
git checkout -b fixBug

# 推送該分支到遠端倉
git push -u origin fixBug
           
如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

此後是代碼開發balabala……

四、開發分支本地開發完成後push到遠端倉

# 檢視修改了那些檔案
git status

# 檢視修改内容
git diff

# add 送出
git add .

# commit 送出(如果官方倉需要Signed-off-by檢查的就帶賬号郵箱資訊)
git commit -m "xxxxx" -s

# push到遠端倉
git push origin
           
如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

五、向官方倉送出PR

打開你自己的github頁面的對應遠端倉,會有出現可合并的分支提示

如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)
如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

各家的PR說明格式要求不同,可以前往官方倉檢視他的貢獻指南,一般會給出示例模闆。

舉個栗子,以下是

kubesphere console

的PR說明模闆(此例是修複1543 issuse):

**What type of PR is this?**
/kind bug

**What this PR does / why we need it**:
rename the button 'Rerun' to 'Run' on the b2i page #1543

**Which issue(s) this PR fixes**:
Fixes  #1543

**Special notes for reviewers:**

**Additional documentation, usage docs, etc.:**

           

六、送出PR之後

送出PR之後,可以前去官方倉檢視審查情況

比如這種是官方倉沒有機器人檢查的

如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

比如這種是有靜态檢查的,需要全部變綠√才算成功,黃色是進行中需要等待,紅色則是你送出的代碼還有問題,需要重新修改

如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

比如這種是審批完成之後的樣子

如何給開源社群貢獻代碼(小白适用實操版,附練習實驗用的倉庫,歡迎随便試)

至此一個完整的PR就結束了

七、如果不幸 code review 失敗,如何重新送出

其實一次成功的幾率真的不大,失敗是常态平常心就好(大佬的話當我沒說,反正我不是大佬哈哈哈哈哈哈)

code review 失敗,一般官方會回複你為什麼給你審批為失敗,然後基于此再改,改好了重新送出

重新送出有2種方式:

1.關閉此PR,提新的PR (非常不推薦這種方式、這一點都不優雅)

2.基于本次PR進行修改

  • 新增一次commit (會多一次送出記錄,小修改不推薦,适合大量修改)
  • 基于最後一次commit (推薦這種,小推薦這種修改方式)

實操流程:

小修改(基于本次PR的最後一次commit修改)的情況:

# 本地倉切換到開發分支
git checkout fixBug

# 修改代碼balabalabala.... 

# 檢查後add代碼
git diff 
git add .

# 基于最後一次commit送出代碼(出現送出資訊編輯頁面直接wq儲存退出即可)
git commit --amend -s

# 推送代碼(如果此前送出有用-f,此時也需要使用-f,務必要在完全确認正确的情況下使用-f)
git push origin
           

此時,已經送出的PR也會自動産生變更,再次進入稽核流程

大修改的情況,比如修改很久之前的某次送出,具體參考變基,根據修改量大小,上面2種重新送出方式酌情使用

總結:核心思想就是把本地倉處理好之後送出到遠端倉,PR會随之變化重新進入審批流程。

開始打開新世界大門吧

提供了一個倉給大家模拟練習送出PR,我想對于小白來說這是很需要的,我第一次試的時候就在無情的摧殘我的同僚,讓他給我批哈哈哈哈哈哈

練習倉位址:https://github.com/TinaSprunt/HelloWorld

你可以fork這個倉然後提一個PR試試練練手,無論送出啥反正我都會通過的