✍️本文譯者: P2Tree
©️ 本文演繹自 Atlassian 編寫的 Source code management。頁面上所有內容採用知識共享-署名(CC BY 2.5 AU)許可協議。
源代碼管理(Source code management
, SCM
)被用於追蹤源代碼倉庫的修改。它可以追蹤一個代碼基線在歷史上的變更情況,以及當多個開發者合併更新時幫助解決衝突。SCM
和版本控制(Version control
)是同一個意思。
隨着軟件工程中代碼行數的增加以及開發者人數的增加,溝通成本和管理複雜度也相應增加。SCM
在緩解開發成本不斷增加的壓力上是一個重要的工具。
源代碼管理工具的重要性
當多個開發者在一個共享的代碼基線上工作時,經常容易發生同時編輯一塊共有代碼的情況。獨立的開發者也許正在解決看似獨立的特性,然而這些特性也許就在共享同一塊代碼,進而就會發生衝突。
不使用SCM
的情況下,這是個很麻煩的事情。開發者們可能會直接編輯文本,並通過遠程傳輸協議(比如FTP或其他協議)進行共享,當一個開發者編輯了這個文件後,另一個開發者可能不知道文件已經被修改,從而會覆蓋之前的修改。SCM
的目的就是提供一種保護機制,來避免這種特殊情況,也就被叫做版本控制。
SCM
提供了版本控制這種安全措施來預防當衝突發生時工作成果丟失的問題。這種安全措施能夠對每一個獨立開發者的變更追蹤並識別衝突區域,進而避免內容覆蓋。SCM
能夠將發生的衝突位置反饋給開發者們,進而可以讓開發者們安全的解決這些問題。
這一基礎性的衝突預防機制也能附帶提供開發團隊內部被動溝通的作用。團隊內部可以依賴於SCM
的監控內容來監控和討論工作進度。SCM
追蹤一個代碼基線的完整歷史變更情況,這可以幫助開發者測試和檢查可能已經引入的bugs或者重複操作。
源代碼管理的優勢
SCM
提供了一系列的輔助特性來協助軟件工作以一種更爲友好的方式而進行。當SCM
開始追蹤一個工程的所有變更後,將會建立一個工程生命週期內詳細的歷史記錄。這個歷史記錄可以將來用於在代碼基線上做一些回滾操作。利用SCM
能夠直接將代碼基線回退到之前的一個時間點上。這對於預防迴歸性更新(regressions on updates
)和消除錯誤是非常便捷的。
SCM
將每一個變更都記錄下來的特性對於一個工程的版本發佈日誌也是非常有價值的。一個乾淨且維護良好的SCM
歷史日誌是可以直接拿來當作發佈日誌的。這爲項目進展提供了可監測性和透明度,同時也可以和用戶或其他非開發團隊共享內容。
SCM
可以減少團隊的溝通成本,從而提高發布速度。如果沒有SCM
,開發者們可能會花費大量精力去計劃一個內容上不會重疊的工作流,從而會使得開發工作進展緩慢。利用SCM
,開發者們可以同時獨立的在分離的分支上做特性開發,然後再合併他們的工作。
總之,SCM
對軟件開發團隊來說是很重要的輔助工具,可以有效的減少開發中的成本,高效利用工程資源來提高工作效率。SCM
在現代軟件開發中必不可少。很多專業的開發團隊都在使用SCM
。
源代碼管理最佳實踐
1. 經常提交你的變更
提交操作很容易完成,應該儘可能的頻繁提交來記錄代碼變更。每一個提交就是代碼基線的一次快照,這些快照都能在未來需要時進行恢復。頻繁的提交有利於回滾和撤銷的工作。多個提交可以用git rebase
命令合併成一組單獨的提交,方便整理提交更新日誌。
2. 總是確保工作在最新版本
當多個開發者使用SCM
更新代碼時,很容易會遇到本地版本落後於公共版本的情況。所以,應該在做更新之前使用git pull
或git fetch
來獲取最新的代碼,這樣可以儘量避免發生衝突。
3. 寫清詳細的提交信息
每一次提交都會有一個相應的提交信息,也叫日誌信息。當做提交操作時,留下描述性的提交日誌信息是很重要的。這些信息應該能夠說明爲什麼做這次更改以及改動了什麼。這些日誌信息是這個項目開發中的規範歷史記錄,也有助於未來去追蹤代碼的貢獻者。
4. 提交之前做代碼檢查(Review)
SCM
提供一個暫存區(staging area
)的功能,這個功能可以在提交之前收集相關的修改並整理暫存。它可以用來在提交之前檢查即將提交的內容,用這種方法提供一種工作的緩衝,以此來幫助改進可能的提交內容。
5. 使用分支
分支功能是SCM
機制中一個強大而重要的功能,它可以幫助開發者建立一個相對於主幹代碼的獨立工作線。分支功能很便捷和輕量級,應該被頻繁高效的使用。它允許多個開發者並行的在各自獨立的工作線上工作。這些獨立的工作線很可能是軟件的不同特性。當獨立分支上的開發工作完成後,可以將分支內容合併(merge
)到主幹分支上。
6. 認同工作流程
默認情況下,SCM
提供了非常自由和靈活的工作方法。所以,在一個團隊內,建立統一的協作共享方式是非常重要的,比如建立合併分支的方法和過程。如果團隊內部不認同統一的工作流,這可能會在合併分支時出現低效的協作。
總結
SCM
對於現代軟件開發是異常重要的(原文中是無價的 invaluable
),很多優秀的軟件團隊在使用SCM
,你的團隊同樣也需要。SCM
非常易於部署在一個新工程中,並且其回報是非常大的。Atlassian
公司提供一些非常好用的SCM 集成開發工具,可以幫助你更好的上手。
Git菜單是一套高質量的 Git 中文教程,源於國外社區的優秀文章和個人實踐。
本文原文可參見:https://github.com/P2Tree/git-recipes/blob/master/sources/1.2-%E6%BA%90%E4%BB%A3%E7%A0%81%E7%AE%A1%E7%90%86.md。
本教程全部內容可參見:https://github.com/P2Tree/git-recipes,我基於Zhongyi Tong的工作進行了重新整理和內容新增,由於作者已經關閉該項目,故重新建庫,有任何建議和疑問歡迎評論或可在Github上創建issue。再次感謝原作者的辛勤勞動。