0. 在吹牛以前,先回答這個問題: 若是你的團隊來了一個新隊員,有一臺全新的機器, 大家是否有一個文檔,只要設置了相應的權限,她就能夠根據文檔,從頭開始搭建環境,併成功地把最新、最穩定版本的軟件編譯出來,並運行必要的單元測試? (在這過程當中,不須要和老隊員作任何交流)html
回答:暫時尚未。這個問題提醒了咱們,在final發佈以前把文檔完善好。對於環境和IDE描述清楚,並在coding.net上同步好。git
1. 你的團隊的源代碼控制在哪裏?用的是什麼系統?
如何處理文件的鎖定問題?
場景:
程序員果凍正在對幾個文件進行修改,實現一個大的功能, 這時候,
程序員小飛也要改其中一個文件,快速修復一個問題。怎麼辦?
一個代碼文件被簽出 (check out) 以後,另外一個團隊成員能夠簽出這個文件,並修改,而後簽入麼?
有幾種設計,各有什麼優缺點?
例如,簽出文件後,此文件就加鎖,別人沒法簽出; 或者, 全部人均可以自由簽出文件
對於場景中的問題,我搜索以後看到這篇博客的教程內容比較相符,雖然尚未實踐,先分享出來和mark一下吧。
「有幾種設計,各有什麼優缺點?」這個問題我尚未搜到。
2. 如何看到這個文件和以前版本的差別? 如何看到代碼修改和工做項 (work item),缺陷修復 (bug fix) 的關係。
場景: 程序員果凍看到某個文件被修改了,他怎麼看到這個文件在最近的修改究竟改了哪些地方? (
例子)
場景: 程序員果凍看到某個文件在最新版本被改動了100 多行, 那麼和這100多行對應的其餘修改在什麼文件中呢? 這個修改是爲了解決哪些問題而做的呢? 那些問題有工做項 (work item,issue),或者bug 來跟蹤麼?
回答:coding.net上有網頁版的版本對比(以下圖),能夠很方便地看出每次commit、push的改動、代碼量。issue大概瀏覽了幾篇博客,說主要是用來給本身作todolist或者給其餘團隊成員提bug讓他們改的。似懂非懂。
3. 若是某個文件在你簽出以後已經被別人修改,而且簽入了,那麼你在簽入你的修改的時候,
如何合併不一樣的修改(merge)? 你用了什麼工具來幫助你?
回答:在push以前先pull。根據命令行的提示查看是否須要merge。有時候確實衝突了,或者pull不下來,須要用stash。
4. 你有20個文件都是關於同一個功能的修改,你要如何保證這些文件都
同時簽入成功(修改的原子性),或者同時簽入不成功?
場景: 程序員果凍要簽入 20 個文件,他一個一個地簽入, 在簽入完5 個 .h 文件以後, 他發現一些 .cpp 文件和最新的版本有衝突,他正在花時間琢磨如何合併... 這時候, 程序員小飛從客戶端同步了全部最新代碼, 開始編譯, 可是編譯不成功 - 由於有不一樣步的 .h 文件和 .cpp 文件! 這時候, 別的程序員也來抱怨一樣的問題,果凍應該怎麼辦?
回答:「使用git commit -am能夠省略使用git add命令將已跟蹤文件放到暫存區的功能」,來自博客。
5. 你的PC 上有關於三個功能的修改, 可是都沒有完成,有不少文件處於半完工的狀態,這時你要緊急修改一個新的 bug,如何把本地修改放一邊,保證在乾淨的環境中修改這個 bug, 併成功地簽入你的修改 ---
changelist management。
回答:git stash。
6. 規範操做和自動化
你的團隊規定開發者簽入的時候要作這些事情:
- 代碼複審 (要有別的員工的名字)
- 和此次簽入相關的issue 編號, 任務/task, 缺陷/bug 編號,等等, 以備查詢。
請問你的團隊有這樣的自動化工具讓開發者方便地一次性填入全部信息而後提交麼? (高級功能, 代碼提交以後, 相關bug 的狀態會改動爲 「fixed」, 而且有連接指向此次簽入。)
回答:沒有。
7. 如何給你的源代碼
創建分支?
場景:大家須要作一個演示,因此在演示版本的分支中對各處的代碼作了一個臨時的修改, 同時,主要的分支還保持原來的計劃開發。 大家怎麼作到的? 在演示以後,演示版本的有些修改應該合併到主分支中,有些則不用,大家是怎麼作到的?
場景: 大家的軟件發佈了,有不少用戶,一天,一個用戶報告了一個問題,可是他們是用某個老版本,並且沒有條件更新到最新版本。 這時候,你如何在本地構建一個老版本的軟件,並試圖重現那個問題?
回答:git branch newbranch ; pull下項目而後切換到老版本的分支git checkout old。
8. 一個源文件,如何知道它的
每一行都是何時簽入的,爲了什麼目的簽入的 (解決了哪一個任務,或者哪一個bug)?
場景: 一個重要的軟件歷經幾年,幾個團隊的開發和維護,突然出如今某個條件下崩潰的事故,
程序員果凍通過各類debug手段,發現問題是在某一個文件中有一行代碼彷佛顯然出了問題, 可是這個模塊被不少其餘模塊調用, 這行代碼是何時,爲了什麼目的,通過誰簽入的呢? 若是貿然修改, 會不會致使其餘問題呢? 怎麼辦?
回答:看提交歷史應該能夠查看出來是誰提交的。模塊自己也應該備註了開發者的姓名和開發時間及註釋了用途。貿然修改會致使不少問題。我也不知道怎麼辦好,老師能夠指點一下嗎?
9. 如何給一個系統的全部源文件都打上
標籤,這樣別人能夠同步全部有這個標籤的文件版本?
代碼天天都在變, 有時質量變好,有時變差,咱們須要一個 Last Known Good (最後穩定的好版本) 版本, 這樣新員工就能夠同步這個版本, 咱們若是須要發佈,也是從這個版本開始。 那麼如何標記這個 Last Known Good版本呢?
回答: git tag -a v1.x -m ' Last Known Good ' 博客教程
10. 你的項目的
源代碼和測試這些代碼的單元測試,以及其餘測試腳本都是放在一塊兒的麼? 修改源代碼會確保相應的測試也更新麼?你的團隊是否能部署自動構建的任務?
在簽入以前,程序員可否自動在本身的機器上運行自動測試,以保證本地修改不會影響整個軟件的質量?
在程序員提交簽入以後,服務器上是否有自動測試程序, 完成編譯,測試,若是成功,就簽入,不然,就取消簽入?
團隊是否配置了服務器,它自動同步全部文件,自動構建,自動運行相關的單元測試,碰到錯誤能自動發郵件給團隊
回答:沒有測試這些代碼的單元測試,團隊能部署自動構建的任務。在簽入以前,程序員不能自動在本身的機器上運行自動測試,以保證本地修改不會影響整個軟件的質量?在程序員提交簽入以後,服務器上沒有自動測試程序, 完成編譯,測試,若是成功,就簽入,不然,就取消簽入。 團隊沒有配置服務器,它自動同步全部文件,自動構建,自動運行相關的單元測試,碰到錯誤能自動發郵件給團隊。
做業題,分析比較各類軟件構建環境:
就像一個廚師要分析各類廚房用具,挑選適合本身的工具組合, 一個軟件團隊也要挑選適合本身的源代碼管理和其餘配套工具,請選擇至少三種,比較各自的優勢缺點,成本:
- github
- coding.net
- code.csdn.net
- gitcafe.com
- www.visualstudio.com
- code.taobao.org
- Visual Studio Team Foundation Server
- gitblit, 在Windows系統下構建 git 服務,帶網頁端管理…
- Visual Source Safe (VSS)
- 本身搭建系統
回答:github須要開源。coding.net能夠建私有項目或者公開項目,須要付費享受創建多個(5個以上?)私有項目。有人本身搭建gitlab,私有,搭建須要必定技術基礎、費時。本身搭建的應該保障更多吧。程序員