一、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試試練練手,無論送出啥反正我都會通過的