1. 程式人生 > >郝健: github多人協作專案開發實操筆記

郝健: github多人協作專案開發實操筆記

作者簡介:

郝健(Artist),目前就職於賽爾網路CERNET技術開發部,研發專案經理;以前在天融信Topsec軟體平臺部做防火牆核心系統開發。

640?wx_fmt=gif&wxfrom=5&wx_lazy=1

本文簡介:

這是網友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建立庫

0?wx_fmt=png

0?wx_fmt=png

Maintainer:step2 clone 庫到本地

git clone https://github.com/YuchengWang/github-test.git

做一些程式碼修改,然後提交

0?wx_fmt=png

Developer:step1 fork Maintainer庫到自己的github

0?wx_fmt=png

Developer:step2下載程式碼到本地(這時候一般用ssh模式)

git clone [email protected]:ArtistH/github-test.git

0?wx_fmt=png

注:

使用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檔案的內容:

0?wx_fmt=png

0?wx_fmt=png

GitHub允許使用者新增多個Key,方便同一賬號在多臺主機登陸push程式碼。

Developer:step3      修改原生代碼並提交到自己庫

0?wx_fmt=png

Developer:step4 pull request

Developer提交修改到自己的庫以後,發現其庫的commit與Maintainer庫的commit不再一致。

0?wx_fmt=png

於是,Developer向Maintainer庫發起pull request

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

注意Developer對此pull request是做不了任何操作的。

Maintainer:step3稽核程式碼,處理pull request

0?wx_fmt=png

0?wx_fmt=png

可以看到程式碼的具體改動。

0?wx_fmt=png

Maintainer:step4稽核通過,Merge

0?wx_fmt=png

i.Create a merge commit, Merge Developer 剛剛提交的程式碼

ii.Squash and merge 把 Developer commit 多次的程式碼合併成一個commit然後 Merge

iii.Rebase and merge 從最原始的分支上做 pull request

0?wx_fmt=png

Maintainer merge pull request後,可以發現Maintainer庫的commit再次領先於Developer庫的commit。多出的commit即為Maintainer剛剛merge pull request的commit。

Developer:step5 再次與Maintainer庫進行同步

git remote –v

0?wx_fmt=png

git remote add upstream https://github.com/YuchengWang/github-test.git

然後再執行 git remote-v

0?wx_fmt=png

然後把上游分支程式碼更新到本地:git fetch upstream

0?wx_fmt=png

然後驗證當前分支是否為master分支

0?wx_fmt=png

0?wx_fmt=png

可以看到本地分支為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。

0?wx_fmt=png

產生衝突檔案為 main.c

0?wx_fmt=png

解決掉衝突後變為 no conflicts,可以 merge pull request。

0?wx_fmt=png

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. 管理

0?wx_fmt=png

庫本身操作:可以設定一些 Features

Branchs 操作:如匯出branch,將某個分支保護起來不允許提交。

Collaborators:新增可以merge程式碼的普通使用者。

附註:

Question:fork,star,watch

fork:服務端倉庫克隆,pullrequest等操作都要在fork的基礎上完成

star:程式碼受歡迎度

watch:庫的更改都發郵件通知,可以具體設定

wiki:https://github.com/ArtistH/github-test.wiki.git

王玉成github視訊免費觀看: