1. 程式人生 > >版本控制總結報告

版本控制總結報告

私有 並運行 加鎖 blank gem 哪些 一個用戶 部署 優缺點

0. 在吹牛之前,先回答這個問題: 如果你的團隊來了一個新隊員,有一臺全新的機器, 你們是否有一個文檔,只要設置了相應的權限,她就可以根據文檔,從頭開始搭建環境,並成功地把最新、最穩定版本的軟件編譯出來,並運行必要的單元測試? (在這過程中,不需要和老隊員做任何交流)

回答:暫時還沒有。這個問題提醒了我們,在final發布之前把文檔完善好。對於環境和IDE描述清楚,並在coding.net上同步好。

1. 你的團隊的源代碼控制在哪裏?用的是什麽系統?如何處理文件的鎖定問題? 場景: 程序員果凍正在對幾個文件進行修改,實現一個大的功能, 這時候,程序員小飛也要改其中一個文件,快速修復一個問題。怎麽辦? 一個代碼文件被簽出 (check out) 之後,另一個團隊成員可以簽出這個文件,並修改,然後簽入麽? 有幾種設計,各有什麽優缺點? 例如,簽出文件後,此文件就加鎖,別人無法簽出; 或者, 所有人都可以自由簽出文件 回答:團隊的源代碼控制在https://coding.net/u/SuperCodingChao/p/PSPDaily/git。用的是windows系統。我們的項目只有一個master分支,項目成員可以自由更新代碼,沒有使用到git checkout。
對於場景中的問題,我搜索之後看到這篇博客的教程內容比較相符,雖然還沒有實踐,先分享出來和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,私有,搭建需要一定技術基礎、費時。自己搭建的應該保障更多吧。

版本控制總結報告