郝健: github多人協作專案開發實操筆記
作者簡介:
郝健(Artist),目前就職於賽爾網路CERNET技術開發部,研發專案經理;以前在天融信Topsec軟體平臺部做防火牆核心系統開發。
本文簡介:
這是網友Artist在看完王玉成老師的github視訊直播後的筆記。他詳細地記錄了自己一步步在github上進行操作的過程。感興趣的讀者也可以按照他這個筆記一步步來做,這樣github的功能也就學會七七八八了。
1. git特點
useful:
https://help.github.com/
分散式
提交同步不頻繁
速度快, 靈活
2. 用git工具完成一個專案中間必須經過的幾個環節
useful:
https://guides.github.com/introduction/flow/
0) 建立倉庫
1) 新增分支
Eg. 甲, 乙, 丙三個人開發三個模組 a, b, c.
每個人一個分支, 分別為 a, b, c
2) 完成提交
3) pull request(管理員未稽核程式碼的階段)
4) review your code
5) deploy(部署程式碼測試)
6) Merge(測試釋出後, 合併到主分支, 用於下次迭代)
3. 實踐 演練使用git完成專案環節
Maintainer:step1建立庫
Maintainer:step2 clone 庫到本地
git clone https://github.com/YuchengWang/github-test.git
做一些程式碼修改,然後提交
Developer:step1 fork Maintainer庫到自己的github
Developer:step2下載程式碼到本地(這時候一般用ssh模式)
git clone [email protected]:ArtistH/github-test.git
注:
使用ssh的方式是為了每次push時候方便,不用每次輸入github賬號的密碼。
本地庫通過ssh協議與github倉庫進行傳輸需要如下設定:
i.建立SSH key。在使用者主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個檔案,如果已經有了,可直接跳到下一步。如果沒有,建立SSHKey:
ssh-keygen -t rsa -C [email protected]
執行成功後,在使用者主目錄下的.ssh目錄中會生成id_rsa和id_rsa.pub兩個檔案,這兩個檔案就是SSH Key的祕鑰對,id_rsa是私鑰,id_rsa.pub是公鑰。
ii.登陸GitHub,開啟“Personal settings” -> “SSH and GPG Keys”頁面,然後點選“New SSH Key”,填上任意Title,在Key文字框裡貼上id_rsa.pub檔案的內容:
GitHub允許使用者新增多個Key,方便同一賬號在多臺主機登陸push程式碼。
Developer:step3 修改原生代碼並提交到自己庫
Developer:step4 pull request
Developer提交修改到自己的庫以後,發現其庫的commit與Maintainer庫的commit不再一致。
於是,Developer向Maintainer庫發起pull request
注意Developer對此pull request是做不了任何操作的。
Maintainer:step3稽核程式碼,處理pull request
可以看到程式碼的具體改動。
Maintainer:step4稽核通過,Merge
i.Create a merge commit, Merge Developer 剛剛提交的程式碼
ii.Squash and merge 把 Developer commit 多次的程式碼合併成一個commit然後 Merge
iii.Rebase and merge 從最原始的分支上做 pull request
Maintainer merge pull request後,可以發現Maintainer庫的commit再次領先於Developer庫的commit。多出的commit即為Maintainer剛剛merge pull request的commit。
Developer:step5 再次與Maintainer庫進行同步
git remote –v
git remote add upstream https://github.com/YuchengWang/github-test.git
然後再執行 git remote-v
然後把上游分支程式碼更新到本地:git fetch upstream
然後驗證當前分支是否為master分支
可以看到本地分支為master,遠端分支為origin/master。
然後git merge upstream/master,在本地merge上游分支,然後再執行git push origin master,可以發現Developer庫的commit與Maintainer庫一致,最終完成與Maintainer庫程式碼同步。可以通過git log檢視。
注:在merge pull request過程中可能遇到衝突,需要Maintainer解決衝突後,狀態變為no conflicts,即可以 merge pull request。
產生衝突檔案為 main.c
解決掉衝突後變為 no conflicts,可以 merge pull request。
4. Issues
GitHub的issue功能,對個人而言,就如同TODO list。你可以把所有想要在下一步完成的工作,如feature新增、bug修復等,都寫成一個個的issue,放在上面。
每一次commit都可以選擇性的與某個issue關聯。比如在message中新增#n,就可以與第 n個issue進行關聯。
commit message title, #1
對使用者而言,你可以通過issue給別人的專案提bug。
5. Wiki
useful:https://github.com/gdsub/atdocs/wiki
wiki 庫與開發庫是分開的,如專案經理不參加開發只維護 wiki 庫。
使用 Markdown 格式編寫。
6. 管理
庫本身操作:可以設定一些 Features
Branchs 操作:如匯出branch,將某個分支保護起來不允許提交。
Collaborators:新增可以merge程式碼的普通使用者。
附註:
Question:fork,star,watch
fork:服務端倉庫克隆,pullrequest等操作都要在fork的基礎上完成
star:程式碼受歡迎度
watch:庫的更改都發郵件通知,可以具體設定
wiki:https://github.com/ArtistH/github-test.wiki.git
王玉成github視訊免費觀看: