如何提交一個PR?完成這 6 點就可以了
龍蜥社群近期上線了【人人都可以參與開源】活動,活動裡涉及了一項重要的事項就是:提!交!PR!本文就跟大家分享一下作為入門級的開發者,可以透過哪些方式參與社群建設?以及在社群參與過程當中如何提交 Pull Request(以下簡稱“PR”) ?本文整理自龍蜥大講堂第 23 期,影片回放已上線至龍蜥官網,歡迎檢視(連結見文末)!
一、提交 PR 主要流程
程式碼庫存放於 Gitee 平臺上,以本次活動為例,領取的任務詳情(即 Issue),以及最終提交的任務成果,都會在這個平臺上進行。那麼,如何在 Gitee 上提交一個 PR呢?
1、 Fork(復刻)一個程式碼倉庫。在本次活動任務的 Issue 頁上,已經寫明瞭目標倉庫。你只需要前往 Fork 目標倉庫。
2、 Clone(克隆)自己的倉庫到本地。
3、 建立一個分支,在分支中修改內容,然後提交 PR。
4、 編寫 comments,也就是你做了哪些變更,然後等待倉庫管理員的稽核。
5、 如有需要,可以與管理員(一般是 SIG maintainer)進行交流,可能會需要改進自己的 PR。
6、 管理員合入你的程式碼後,關注自己的程式碼是否有改動,並積極參加評審。
(圖/提交PR流程)
二、初學者容易出錯的地方
需要注意的是,初學者經常在 Git 命令上出錯。常見的原因一般是:原本應該放在不同分支上修改的內容,卻被放到了相同的分支上修改,相當於重疊了,這樣將會與同時提交的小夥伴產生衝突。
(圖/出錯示例圖)
上圖可看出,1000 人按照不同分支同時開發沒問題,那麼問題經常會出在哪?就是在合併入的時候容易出錯。如果想把 1000 個分支合併回來,並且不出錯,在這個過程當中可能就會有一些細節問題。
怎麼解決這些問題?需要初學者根據一些既定的流程來進行操作。這些既定的流程本文會寫出一部分,另外一部分和公司的具體開發流程相關。
三、手把手演示如何提交PR
解決如上問題,首先就是要新建分支,接下來用具體例子來詳細解釋。
以 Express DPU 專案為例(是高效能的 DPU 庫)。當你拿到這個專案的時候,首先想到的是這個專案我能做點什麼?比如說(本文演示需要)小龍看到 Readme-cn.md 檔案中有個標題是英文的,是不是可以變成中文的呢?
接下來,就按照步驟修改這個英文標題。
第一步:需要先 Fork 一下感興趣的程式碼倉庫。
點選 Fork 後選擇個人。
Fork 的含義是什麼?就是對程式碼進行修改的時候,不會影響上游的程式碼,這樣的話防止一些誤操作,並且也可以在你的程式碼中衍生出自己風格的程式碼。
第二步:將 Fork 好的程式碼倉庫 Clone 到倉庫本地。
Gitee 平臺中會有記錄,你會看到這個程式碼倉是“forked from”上游的程式碼倉。當拿到了自己的程式碼倉以後,就可以進行 Clone 操作,選擇 HTTPS 或者是 SSH。如果選擇了 SSH 的話,需要配置自己的金鑰,金鑰的配置在如下圖所示位置。
接著複製 SSH,複製完了之後,要開啟終端。如果沒有終端,推薦用龍蜥實驗室(已經預裝了 Anolis OS 的免費伺服器)來操作。
在終端輸入 ssh-keygen -t ed25519 -C "金鑰名稱" ,回車三次便生成了金鑰,透過檢視 ~/.ssh/id_ed25519.pub 檔案獲取公鑰。
複製公鑰,回到 Gitee 個人倉庫的設定頁面。找到【安全設定】-> 【SSH公鑰】,在如下圖位置貼上公鑰。
將公鑰確定儲存成功後,在終端輸入 ssh -T git@gitee.com ,首次新增需要鍵入 yes ,看到 successfully 字樣,則表明新增成功。
最後輸入命令 git clone,然後貼上 SSH 連結 ,這個第一條命令是下載程式碼到你的本地計算機。
第三步:在本地建立分支、完成修改,並進行 PR 操作:
上面步驟中,下載完成後執行命令 cd ExpressUDP 進入該目錄,這個時候就已經拿到了程式碼。Readme-cn.md 檔案在這個目錄下。
接下來,標準的流程是在本地建立分支、修改檔案,把修改後的內容 commit 到本地倉庫,再 push 回自己的程式碼倉,最後開一個 PR。
小貼士 1 :假設小龍直接修改,等已經修改好了後會發現這個步驟錯了(其實也不能說完全是錯誤的),因為沒有遵守標準的流程。標準流程第一步是要新建一個分支修改,不能在原來的基礎上改,否則容易與其他小夥伴的程式碼衝突了。所以要新建一個自己的分支,在自己的分支上進行修改。對於初學者來說,往往會忽略這點,要特別注意。
如果沒有建立任何分支就修改了 readme,該怎麼繼續操作呢?我們可以把這個修改糾正過來。先用 git status 檢視狀態,看到是已修改的;然後用 git checkout Readme-cn.md 還原狀態,相當於把已做的修改清除了;最後再用 git status 確認下狀態。
接下來,我們迴歸標準操作流程。
首先,建立一個分支:執行 git checkout-b xxx 命令建立一個分支名稱。當你執行完這條命令之後,其實完成了兩個操作:第一個是建立一個新的分支;第二個是切換到了建立的分支。
接著,用 vim 命令修改檔案中的英文標題。
然後,執行 git add Readme-cn.md,就是要在分支中更新這個檔案的意思。
此時,可以用 git status 命令來看一下,系統提示 readme 檔案已經被修改了。用 git log 可以檢視程式碼倉庫的修改歷史。
接下來,執行 git commit -vs,輸入修改說明。命令中的 vs 是為了加上簽名並顯示修改內容。
此時小龍修改的內容還在本地,要是想把它放到伺服器上,就要經過 push。直接執行 git push 的時候就會告訴你要用 git push --set-upstream origin <分支名> 這條命令來關聯遠端分支,關聯後,接下來 push 可以直接用 git push origin 了。
小貼士 2 :這個時候有兩個 remote,這兩個 remote 表達的是什麼?是個人倉庫和原始倉庫。小龍為什麼要這麼做?大家可以想象 upstream 上的程式碼變化是非常頻繁的。但是這個倉庫是從 upstream fork 過來的。那麼當 upstream 在變化的時候,倉庫理論上是不會變化了。但是怎麼樣能拿到 upstream 最新的程式碼?重新克隆一遍都沒有問題。但如果小龍設定了兩個 remote ,其實操作就很簡單,指定從 upstream 上拉程式碼,就可以快速的跟進過來(這是作者的一個使用習慣)。
參考下面的命令來完成 push 。
從上圖可以看到,push 後系統會有一句提示(這個提示其實是 Git 倉庫給過來的),並提供了一個“”開頭的連結,你可以直接透過該連結在網站上建立一個 PR。
開啟這個連結,注意“源分支”保留預設值,但“目標分支”需要修改,在這個示例中目標應該指向 anolis 的 master。
第四步:編寫 comments 並等待 review。
comments(也就是 commit log)已經在上一步中輸入過了。此步驟的重要性不亞於寫程式碼,因為comments只有清晰明瞭地記錄你的改動,例如修改點、是否校驗、評估的影響等,才能讓稽核人快速看懂。
第五步:提交了 PR 以後,就會分配給稽核人,等待審查和測試。透過後才能合入程式碼庫。這期間,建議與 Maintainer 多進行互動。
第六步:合入後關注自己的程式碼是否有改動,並積極參加評審。
根據全文,最後總結下要想提交一個 PR,需要以下 6 個步驟:
1、需要先 Fork 一下感興趣的程式碼倉庫;
2、將 Fork 好的程式碼倉庫 Clone 到倉庫本地;
3、然後在本地建立分支、修改完成,並進行PR操作;
4、編寫 comments 並等待 review,此步驟的重要性不亞於寫程式碼;
5、與 maintainer 進行互動,反饋建議改進自己的 PR,這個過程可能耗時較久;
6、合入後關注自己的程式碼是否有改動,並積極參加評審。
關於回放和課件獲取
【影片回放】:影片回訪已上傳至龍蜥官網: ,影片中有更詳細的操作與示例。
【PPT課件獲取】:關注微信公眾號(OpenAnolis),回覆“龍蜥課件”即可獲取。有任何疑問請隨時諮詢龍蜥助手—小龍(微信:openanolis_assis)。
另外,活動特設“體驗官”一職,正在招募中,僅限高校學生。加助手-小龍微信(微信:openanolis_assis),備註“體驗官”,趕快加入吧!
—— 完 ——
加入龍蜥社群
加入微信群:新增社群助理-龍蜥社群小龍(微信:openanolis_assis),備註【龍蜥】與你同在;加入釘釘群:掃描下方釘釘群二維碼。歡迎開發者/使用者加入龍蜥社群(OpenAnolis)交流,共同推進龍蜥社群的發展,一起打造一個活躍的、健康的開源作業系統生態!
關於龍蜥社群龍蜥社群(OpenAnolis)由企事業單位、高等院校、科研單位、非營利性組織、個人等在自願、平等、開源、協作的基礎上組成的非盈利性開源社群。龍蜥社群成立於 2020 年 9 月,旨在構建一個開源、中立、開放的Linux 上游發行版社群及創新平臺。
龍蜥社群成立的短期目標是開發龍蜥作業系統(Anolis OS)作為 CentOS 停服後的應對方案,構建一個相容國際 Linux 主流廠商的社群發行版。中長期目標是探索打造一個面向未來的作業系統,建立統一的開源作業系統生態,孵化創新開源專案,繁榮開源生態。
目前,Anolis OS 8.6 已釋出,更多龍蜥自研特性,支援 X86_64 、RISC-V、Arm64、LoongArch 架構,完善適配 Intel、兆芯、鯤鵬、龍芯等晶片,並提供全棧國密支援。
歡迎加入我們,一起打造面向未來的開源作業系統!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004278/viewspace-2905094/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 太厲害了!用了這個影片剪輯SDK,PR就可以拜拜了!
- 如何提交pr
- GitHub提交PRGithub
- 讀懂這本書,你就可以設計一個開放世界了
- 解決原子性問題?腦海中有這個模型就可以了模型
- 如何完成精益轉型?這篇文章說清楚了
- 如何優雅的提交一個表單
- 寫了一個常用漢字詞庫,需要自取,求 star、pr
- 如何完成一個有效的面試面試
- 為了學好Java,我嘗試了這 6 個方法Java
- 只需 6 步,你就可以搭建一個雲原生作業系統原型作業系統原型
- 如何完成一個優秀的專案
- 一個命令 就可以登陸 Homestead
- 如何更好評估信用貸風險?看這場評分卡模型直播就可以了模型
- Clickhouse新增bitmap分頁函式(水了個PR)函式
- 用 Laravel 6 寫了一個部落格Laravel
- 不懂大資料分析?不用怕,永洪讓你點點滑鼠就可以了大資料
- 這裡有6個重點,運營們請收好!
- 打造個人IP,做到這十點就OK了
- PR一個 composer包過程記錄
- 看完這篇文章你就可以告訴領導你精通Zookeeper了
- Git常用指令:跟著打一遍就可以了Git
- 如何高效快速準確地完成ML任務,這4個AutoML庫瞭解一下TOML
- 完成專案的一點思考
- 多執行緒三分鐘就可以入個門了!執行緒
- 如何通過 Vue-Cli3 - Vuex 完成一個 TodoListVue
- Android APP Banner ,用這一個就夠了AndroidAPP
- 時隔僅6個月,中科加禾再度完成新一輪融資
- 手把手教學直播:如何提交 PR 成為龍蜥社群貢獻者? | 第 23 期
- 如何寫一個好的測試?總結起來就這兩點……
- 伺服器重點清理6個點伺服器
- 如何讓軟文更有效,我總結了這三點
- 推薦一個 git 工作流:合併多次提交為一次提交Git
- 在Linux中,訪問一個站點5xx了,如何定位問題?Linux
- Git提交錯了不用慌,這三招幫你修改記錄Git
- 如何執行一個 Conflux 節點UX
- 如何在Github提交圖片,做一個自己的圖片倉庫Github
- ES6會這些就夠了