筆者最近在整理自己工作上寫的程式遇到了一個問題,一般人在整理電腦檔案的時候(筆者平常的習慣),可能會用日期加上做了甚麼事作為檔案的名稱,例如:20191114資料處理,雖然這樣的整理可以讓使用者區別不同檔案的製作時間跟做了哪些東西,但隨著時間,資料夾的檔案可能會越來越多,難保使用者經過一段時間再打開這個資料夾的檔案的時候,有辦法能快速回憶所寫程式的一切(包含中間改了哪些內容),因為有些時候我們只是修改了部分的程式碼(可能是只是測試一個小功能),有時候因為方便,可能沒有另存一個新的檔案,而是覆蓋原有的檔案,這樣事後在回顧自己寫的程式時可能會有一些前後不一致的狀況,因此單靠檔案的命名整理檔案似乎不太可行(至少對筆者來說),因此如果有一個工具能幫使用者記錄寫程式的過程中,做了哪些事,以及能讓使用者任意回到之前或之後的版本,還有最重要的一點,如果使用者可以不需要存一堆檔案,只需要維持一個檔案,原本筆者認為應該沒有那麼好康的事情,但就在最近筆者開始接觸了Git這個好用的東西。

Git是一個版本控制系統(Version Control System),何謂版本控制,維基百科給的說明是,版本控制是一種軟體工程技巧,藉此能在軟體開發的過程中,確保由不同人所編輯的同一程式檔案都得到同步,如下圖所示,筆者電腦裡有一個專案的資料夾,隨著時間的變化,一開始這個資料夾裡只有3個檔案(綠色圈圈),過兩天增加到5(綠色圈圈)。不久之後,其中的2(綠色方框)被修改了,過了三個月後又增加到7個,最後又刪除了1個,變成6個。每一個「檔案的狀態變化」,不管是新增或刪除檔案,亦或是檔案內容的修改,都被視為一個「版本」。「版本控制系統」的功用就是會幫使用者記錄這些所有的狀態變化,並且可以像搭乘時光機一樣,任意切換到不同時間的版本。一個人從頭做到尾,如果檔案整理得好,也許真的都能知道開發的過程中做的所有事,但實務上開發程式經常是多人開發的,需要大家共同編輯程式,在這種情況下,由於大家未必都在同個時間去修改程式,這樣就會產生一個問題,例如,工程師A改了某個部分,工程師B可能也在其他時間改了某個部分,甚至有可能兩個工程師在同個時間修改同一份檔案,如果只是單純存取不同檔案來去管理,難保最後再匯總程式的時候,會出現到底哪一個檔案才是最新的內容的疑問。

 

1.jpg

 

Git在使用上有幾大優點:

1. 免費、開源

Git是由 Linux 核心的作者 Linus Torvalds 2005年為了管理 Linux核心程式碼,僅花了10天所開發出來的,至目前已有十幾年的歷史了。除了可免費使用外,整個Git的原始程式碼也可在網路上取得

2. 執行速度快、檔案體積小

如果您的管理檔案方式是靠產生檔案來去紀錄專案的過程,這些檔案會很佔空間。Git相較於其他版本控制系統是去紀錄不同版本的差異,Git是去記錄檔案內容的「快照」(snapshot),Git可以直接比對不同版本間的差異,當如果使用者沒有修改檔案,Git只會去記憶與前一版本的連結,不會再次儲存此版本,因為有這個特性讓Git可以快速的切換不同時期的版本。

3. 分散式管控系統

相較於其它的版本控制系統,例如 CVS或是SVN 之類的集中式的版本管理系統(Centralize Version Control),都需要有一台專用的伺服器,所有的更新都需要跟這台伺服器座連接。當這台伺服器壞了,或是沒有網路連線的環境,版本控制功能就沒辦法使用。而Git是一種分散式的版本管理系統(Distributed Version Control),雖然也會使有共同的伺服器,但即使在沒有伺服器或是沒有網路的環境,依舊可以使用Git來進行版本控制,待伺服器恢復正常運作或是在有網路的環境後再進行同步,不會受影響。一般來說,Git可以直接在自己的主機上去進行版本控制,等需要上傳的時候再上傳。

Git一般的操作流程大致可分成以下部分(如下圖所示)

  1. 使用者修改工作目錄(working directory)內的檔案。
  2. 暫存檔案,Git將檔案的快照新增到暫存區域(staging area)
  3. 使用者做提交(commit)的動作,讓存在暫存區域的檔案快照永久地儲存在Git目錄(git directory)
  4. 使用者就能在不同版本的檔案快照中切換

 

2.jpg

 

參考來源: https://git-scm.com/book/zh-tw/v1/%E9%96%8B%E5%A7%8B-Git-%E5%9F%BA%E7%A4%8E%E8%A6%81%E9%BB%9E

 

參考資料:

  1. https://djangogirlstaipei.herokuapp.com/tutorials/version-control-with-git/?os=windows
  2. https://zlargon.gitbooks.io/git-tutorial/content/
arrow
arrow
    全站熱搜

    晨晰部落格新站 發表在 痞客邦 留言(0) 人氣()