軟件開發——軟技能(二、版本管理)

二、版本管理

    版本管理工具的用途就不多說了。LZ想說的是,大部分開發人員用版本管理工具就是更新代碼提交代碼,然而對於版本管理工具提供的其它功能的知道或使用則少的可憐。

    在討論版本管理工具的其它功能之前,先明確一個問題:哪些文件需要進行版本管理?

    LZ提出這個問題,主要是發現有開發人員將Java編譯後的class文件也提交到版本庫了,WTF!對於將IDE的配置文件提交到版本庫尚且可以說見仁見智,但是將編譯後的文件以非里程碑版本打包的方式提交到版本庫,LZ怎麼覺得都是不應該的。

    軟件開發過程中,需要進行版本管理的文件有:程序源碼文件(能編譯成最終程序的最小單位)、軟件文檔(需求、產品、設計、其它說明性文檔)。IDE的配置文件(Eclipse的.settings文件夾、.classpath文件、.project文件,IntelliJ IDEA的.idea文件夾和項目文件夾中的iml文件)則因目標程序的編譯不應依賴於特定的IDE和需要持續集成(見後文“構建工具”)的關係,不需要進行版本管理,況且各人使用的IDE不一樣就更不用說了。

    LZ覺得版本管理工具在軟件開發過程中經常使用的功能有:

    1.分支&標記:對里程碑式的版本進行分支&標記處理,從而在版本樹中可以方便的查看版本變化;

    2.Bug追蹤:配合合適的Bug管理工具,將代碼的提交與相應的Bug關聯起來;

    3.版本回滾:對於功能或改進的取消,應該用回滾而不是再次修改後提交。

    與IDE的集成:各版本管理工具都提供了對IDE和系統的資源管理器的集成,功能上差別不大,只是展現方式上的不一樣。在使用IntelliJ IDEA中,發現IntelliJ IDEA對所有的版本管理工具界面統一,合併和比較版本時顯示逐字上的差別。IntelliJ IDEA在版本管理中,還有個非常有用的功能:文件更改列表。代碼的提交就是對一個個更改列表中的文件進行提交,這對於多個項目或者需要個性化開發、調試修改(不用提交到版本庫)的這種情況特別有用。當然還可以設置忽略的文件或目錄和匹配的文件。變更列表最近的提交說明,SVN的TortoiseSVN似乎也提供,但可用性可能差了一點。至於SVN的Eclipse插件,因使用Eclipse的時間有限,所以不是很清楚。

    IntelliJ IDEA的版本管理還可以非常方便的查看一個文件的每一行的最後修改人是誰及相應的提交版本號,並可以查看對應的提交版本的所有文件修改。這對於代碼中的疑問的追蹤處理非常有幫助。

    提到忽略的文件或目錄,不得不提Git。Git除了其分佈式特性,本地提交和查看變更記錄外,還有一個“.gitignore”配置文件,通過這個文件,可以設置Git的忽略文件或文件夾。在使用Git作爲版本管理時,項目一開始在版本庫中建立時就需要設置好應該忽略的文件或目錄,這能完全避免上面所提到的非必要文件入版本庫的問題。PS:或許是Git的分佈式特性,在克隆項目時,會把項目的所有提交記錄都克隆過來,項目文件(包括版本記錄)通常比較大,所以不得不弄一個“忽略”配置功能。

   有些開發人員在使用版本管理工具管理代碼時,會經常將一大片的代碼進行註釋處理而不是刪掉,甚至會加上註釋的原因日期什麼的。LZ就覺得納悶了,如果這樣處理,不就相當於版本管理工具的目的嗎?那你還使用版本管理工具幹嘛?如果確實要參考以前的實現什麼的,添加一個註釋說明,告訴代碼閱讀者讓他查看變更記錄不就好了?

    另外,很多開發人員,在提交代碼的時候,對於提交說明,通常只是草草幾個字,沒有任何意義,只是爲了應付提交說明 不能爲空。LZ覺得,這是一個很扯淡的事情,在提交說明裏面寫上本次提交做了什麼事情(完成了什麼功能,修改了什麼功能,修復了什麼Bug)有這麼難?在有些公司需要寫日報的情況下,很多人就不知道日報寫什麼,就更可笑了。在提交代碼時,把說明寫清楚,然後在下班前寫日報時看下今天的代碼提交記錄,做了什麼事情,不就有詳細記錄?如果項目管理流程妥當,直接在版本庫中提取開發人員的提交記錄,連手動填寫日報的事情都省了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章