《軟工實踐專題》--團隊代碼管理前端
1.你的團隊的源代碼控制在哪裏?用的是什麼系統?git
一個代碼文件被簽出以後,另外一我的能夠簽出這個文件,並修改麼?有幾種設計,各有什麼優缺點?github
咱們小組的代碼控制在Github中,用的是Windows系統。數據庫
有兩種設計:①簽出文件後,文件加鎖,別人沒法簽出。②文件不加鎖,任意使用。後端
針對這兩種設計,咱們認爲第一種能夠保證項目代碼版本控制更加合理,不會有相似讀「髒數據」的狀況出現,可是這樣也會花費更多的時間,操做稍微會繁瑣一些;相反第二種設計文件不加鎖的時候,修改方便,適合咱們如今這樣剛起步的小項目,可是代碼上會出現必定程度上的錯亂。單元測試
2.如何看到這個文件和以前版本的差別?測試
如上所述,咱們版本控制使用的是Git,因此咱們能夠利用其中的一些特性來幫助咱們,例如:spa
git diff:是查看working tree(工做目錄)與index file(暫存區)的差異的。操作系統
git diff --cached:是查看index file(暫存區)與commit(本地倉庫)的差異的。設計
git diff HEAD:是查看working tree(工做目錄)和commit(本地倉庫)的差異的。
經過這些屬性能夠看到差異的詳細細節。
3. 若是某個文件在你簽出以後已經被別人修改,那麼你如何合併不一樣的修改(merge)?
使用Git幫助咱們完成這件事。通常狀況下,git pull後git會自動合併Git修改的部分,自動的Merge。可是,也存在沒法自動合併的狀況:好比像遠程數據庫和本地數據庫的同一個地方都發生了修改的狀況,此時Git沒法判斷要選用哪個修改,因此就會發生衝突。可是,Git會在發生衝突的地方打個標記!下面咱們拿網上的例子作個示範:
<<<<<<< HEAD
test in Local
=======
test in Remote
>>>>>>> 17c805…(Commit的Hash值)
==分割線上方是本地數據庫的內容
==分割線下方是遠程數據庫的某次產生衝突commit所修改的內容。這時候須要識別哪些均可以保留,哪些保留遠程數據庫的內容,哪些保留本地數據庫的內容。在將文件衝突的內容合併後,刪除掉<<<<< 和=====,>>>>>這樣的東西,從新add,commit,push,即完成了一次手工合併。
這就須要咱們在分配任務時,遵循一個原則:儘可能不讓兩我的的任務在同一個文件上產生重疊。每一個人修改的文件範圍或者其餘都固定化,儘可能不讓兩我的同時修改一樣的文件。固然,像前端和後端在修改時大部分時候都會產生衝突,這時候咱們就會使用另外一套機制來幫咱們避開這一點:新建分支與分支合併。(下面會講到)
4.你有20個文件都是關於同一個功能的修改,你要如何保證這些文件都同時簽入成功(修改的原子性)
首先,git做爲一個成熟的源代碼版本管理系統自己就能夠保證在簽入時的原子性,因此通常在咱們的項目開發流程中不太會遇到部分可簽入,部分不可簽入的問題。
但若是真的有遇到這樣的問題,咱們能夠經過建立一個branch,branch的出現,可讓任何一位開發者基於其餘人的代碼或環境都完整可用(即stable版)的環境下進行本身的部分的獨立開發 。最後的合併工做能夠放在一天以內,將全部的Branch上的feature合併到一個dev分支上來。可是這樣面臨的風險也是有的,多個分支同時合併時若是出現了比較大的衝突,合併起來必須當心翼翼。同時,在解決一個Issue的時候,也能夠新建一個Issue分支,在解決了Issue後,可使用分支合併的技術將兩個或多個分支合併。
5.你的PC 上有關於三個bug 的修改, 可是都沒有完成,這時你要緊急修改第四個bug,如何把本地修改放一邊,保證在乾淨的環境中修改第四個bug, 並簽入修改?
在Git裏,不能完整地保證commit後整個環境處於可編譯或可運行狀態下的commit是很差的提交。因此在文件半完工的狀態下,咱們不可使用commit來將文件修改的內容留下來。Git爲咱們提供了一種相似於操做系統裏的保存現場的指令,那就是stash。 它能夠把當前工做現場"儲藏"起來,等之後恢復現場後繼續工做,使用方法相似下面:
$ git stash
Saved working directory and index state WIP on master: 5655bdc Merge branch 'mas
ter' of https://github.com/buaase/Phylab-Web
HEAD is now at 5655bdc Merge branch 'master' of https://github.com/buaase/Phylab
-Web
此外,既然須要一個乾淨的環境,還能夠新建立一個本地倉庫,從遠程倉庫clone到新的本地倉庫中,進行修改。
6.如何給你的源代碼創建分支?
創建分支利用git branch 分支名操做,跳轉到相應分支用git check out 操做,分支合併用git merge 操做,在確認了修改之後,進行git commit 操做提交。
7.一個源文件,如何知道它的每一行都是何時簽入的?
Github上會顯示簽入者名字和簽入的時間
8.如何給一個系統的全部源文件都打上標籤,這樣別人能夠同步全部有這個標籤的文件版本?
使用git來打標籤這件事,在Github中是能夠很方便來作這件事。每次發佈到必定成果後,就須要發佈一個realease版本,可是這樣的話,是對commit自己打標籤。點擊release,而後會發現create a new release,點進去以後填一下就能夠了。
9. 你的團隊是否能部署自動構建的任務
(自動同步全部文件,自動構建,自動運行單元測試,碰到錯誤能自動發郵件給團隊)
決定採用drone.io來進行自動化單元測試,每次測試都會自動按照預約的腳本運行單元測試,單元測試經過之後能夠在Github的ReadMe裏體現出來。