天天看點

使用Git進行版本控制:(1)Git是什麼&為什麼使用Git?

在前面的某篇博文中,我們簡要介紹了如何使用Xcode進行簡單的工程和代碼管理的方法。實際上,Xcode自帶的版本控制工具的功能并不是非常完善,而且使用體驗同大部分主流的版本控制工具也有較大的差異。是以,我們還是有必要專門研究一下使用Git的強大功能對版本進行管理的方法。

參考資料:《Git權威指南》第1、2章,機械工業出版社。

1、我們為什麼要進行代碼的版本控制?

在我讀碩士的幾年中,研究方向主要是視訊信号處理與編解碼,主要内容是研究國産視訊編碼标準AVS/AVS+的算法與應用工作。同H.264、HEVC類似,AVS同樣提供了相應的參考代碼,采用Visual Studio進行編譯。對于我們自己開發或者改進的算法,需要內建到參考代碼中來對目标測試序列進行測試編碼并評價算法的效果。在這個過程中,原始的參考代碼要經過多次的修改,由于缺乏代碼版本控制軟體的支援,各種奇葩的代碼版本層出不窮,隻能把每個版本的代碼拷貝一份,用一個奇長無比的檔案名命名,如“20110729-FastMEBasedOnXXXX-Version1”等等……不但造成了代碼邏輯混亂,而且對存儲空間的浪費也是非常嚴重。另外,由于不可能随時對代碼進行記錄和回退,是以在發生某些bug造成了整個工程出錯且無法修複的時候,隻能放棄幾天的工作重新來過,使得效率極其低下。是以彼時就對一個趁手的版本控制工具極其渴望。

後來,又發生了幾件事情,使得引入版本控制工具成為了當務之急。開發用的電腦經過了幾年的摧殘,終于不堪重負地當機了。經過檢測确定是硬碟損壞且難以修複,結果造成了大量的資料的丢失,多個開發多日的工程毀于一旦。痛定思痛,決定馬上着手進行版本控制工具的研究,以求徹底杜絕類似事件再次發生。

2、為什麼使用Git

目前比較常用的版本控制工具除了Git之外,還有SVN、hg等等,尤其是SVN的應用較為廣泛(比如現在HEVC的參考代碼hm還在由SVN管理)。相比于集中式的版本控制工具SVN,分布式版本控制工具Git具有多種優勢,具體不再贅述,網上一搜便知。

既然選擇了Git,那麼主要就要看一看Git的作用與優勢。

首先,最重要的自然是儲存、備份剛剛未送出的修改。主要分為兩個步驟,即送出和推送兩個操作分别用以下兩個步驟執行:

其次,使用Git強大的分支作用實作對不同任務進行管理。例如,在研究不同的課題的時候,可以在同一套代碼庫中設定不同的分支來實作不同的開發工作。比如我們在研究HEVC的過程中實作了一種新的幀内預測快速模式選擇算法,此外還實作了一種新的高效正交變換技術。有了Git提供的分支功能,我們不需要先把代碼拷貝一份,然後分别在兩份拷貝上實作不同的技術。這樣,不但節省了存儲空間,而且在我們需要評估二者的協同效果的時候,可以友善地将兩個分支進行合并。試想一下,如果工程量巨大,那麼我們需要在另個工程上重新實作一邊會不會讓人崩潰?

另外,友善地對錯誤修改進行回退。無論是工程上的軟體開發還是科學研究工作,隻要需要寫代碼,那麼bug是不可能完全避免的,而且有些bug會非常嚴重,很難排查。這時候如果沒有代碼版本控制工具,也許我們之前的工作就全都白費了。如果我們使用了版本控制工具,相當于在我們确定的某個正确的節點上設定了回退點。如果發生了無法排除的錯誤,可以友善地回退到最近的一個送出點,重新開發最近幾步的工作。

還有一點就是比較不同版本的差異,使用以下指令:

繼續閱讀