git入門篇(1)–初識Gi
- 2020 年 1 月 4 日
- 筆記
其實作為技術開發,Git的熟練使用是我們必不可少的一個技能點。所以今天開始準備進入git系列文章,這個系列目的是讓沒有接觸過git的初學者也可以看懂,可以很輕鬆的上手使用Git。可能很多人沒有使用過Git但是也聽說過Git,Git是一個分散式版本控制工具,我們在開始之前先來談談為什麼我們需要一個版本控制工具。
初識版本控制工具
我們做畢設可能會碰上這麼一個情景:我們在寫畢業論文可能會寫一個初級版,然後進行查重,再次修改成終極版,然後不斷修改衍生出終極版、終極版01、終極版02這樣一系列的版本。如果不使用分散式版本控制工具我們只能創建一個文件夾,然後每次修改不斷地另存為新的文件,然後來存儲我們不同版本的論文。但是這是鑒於自己一個人操作的情況下,在這種情況下比較麻煩的點在於我想找回之前某一個版本存在的一段文字,我可能需要一份一份文件慢慢去查找,顯而易見效率極低。但是還有一種情況,我們文件需要和別人協同合作,比如我們有一份財務報表,你弄了一份初級版發給財務,然後財務修改的時候你同事也在修改,當財務把修改後的版本發給你之後,你還得將兩個人做的修改進行合併。所以這時候版本控制工具出現了,可以自動記住每一個文件的每一次改動,還可以多人協同合作。每一次改動都會進行記錄我們明顯看到每一次的具體修改:

集中式版本控制工具
而版本控制工具其實有兩種,一種就是今天談到的Git這種分散式版本控制工具,而另外一種就是SVN這種集中式版本控制工具。SVN的大名可能很多人都聽說過,集中式這個詞其實已經可以體現這種版本控制工具的缺點,集中式版本控制工具必須聯網才能使用,而且版本庫都有一個單一的集中管理的伺服器,用於管理所有文件的所有修改版本,我們工作之前需要先從中央伺服器取得最新的版本,然後進行修改,當我們修改完成之後,肯定要將我們的更新回傳到SVN進行更新版本庫。這時候如果有其他同事先於你之前更新,可能會報錯:改動基於過時的版本,先更新再提交。所以說使用SVN這類集中式版本控制工具會導致一個問題:先完成工作的先更新不會出現問題,後完成工作的還得處理舊版本導致的程式碼衝突問題。這些都是SVN的缺點所在,但是SVN這類集中式版本控制工具最致命的缺點在於如果集中管理版本庫的中央伺服器出現問題,而又沒有及時備份,有可能導致丟失整個項目的所有歷史更改記錄。
分散式版本控制工具
說完了集中式版本控制工具,接下來我們說說分散式版本控制工具。分散式版本控制工具最為流行的就是Git。分散式版本控制工具可以在每個人的電腦中創建一個完整的版本庫,因此分散式版本控制工具集中不需要存在一台統一管理版本庫的伺服器。那我們針對剛才說過的SVN的缺點來說明為什麼我們要採用Git。
Git如何協同合作
剛才說過集中式版本控制工具必須聯網才能使用,而且版本庫都有一個單一的集中管理的伺服器,用於管理所有文件的所有修改版本,但是Git實際上在本地磁碟就保存著項目的所有歷史更新版本,而且由於Git大部分都是操作本地資源所以完全不需要聯網操作。Git其實一般也會存在一台電腦充當中央伺服器的功能,但是實際上這台中央伺服器不是用於統一管理版本庫,而是用於同事之間交換修改使用。比如你將你的版本庫提交到中央伺服器,你的同事想要同步你的程式碼只需要將中央伺服器的版本庫pull下來與本地程式碼進行合併就可以,當同事工作完成上傳中央伺服器,我們也只需要pull程式碼進行合併,就可以在同事間很輕鬆的實現版本庫的同步。剛才說到SVN有一個缺點:先完成工作的同事先更新不會出現問題,後完成工作的同事還得處理舊版本導致的程式碼衝突問題。但是在Git中不會出現這種提交競賽,不同同事可以依次提交自己更新的部分,就算使用的版本庫已經是舊版的一樣可以上傳,會在使用的舊版本的基礎上新開一個分支,然後每次更新都會更新到這個分支,到某一天這個功能完全實現了,然後將幾個同事開發的幾個分支合併到主分支就可以進行合併程式碼。我們舉個例子解釋下:比如有三個同事同事基於某個v1.0.0版本開發,A同事更新程式碼後更新成功,B同事更新程式碼,由於A已經更新了版本,所以這時候我們可以有兩個選擇,第一種就是鋼刺啊說的pull程式碼與本地程式碼合併再提交,或者這時候由於各自負責的功能還在開發,我們可以在這個v1.0.0的版本上創建一個新的分支,進行版本的更新迭代。一個月後整個功能完成了,這時候我們就可以合併三個同事的三個分支成為一個分支。
Git如何讓做好備份工作
我們剛才一直在說Git在本地創建版本庫,那版本庫存儲在本地磁碟,本地磁碟出問題我的所有版本庫不就直接全部丟失了。我們可以這樣操作:比如在D盤創建一個版本庫,然後在F盤創建一個備份版本庫,每次提交push到備份版本庫,就可以實現版本庫備份。
Git的優勢
Git 和 Svn 的分支實現機制完全的不同,這也直接導致了 SVN 在分支合併中困難重重。當我們使用SVN中在一個分支上工作數周或幾個月之後,主幹的修改也同時在進行著,兩條線的開發會區別巨大,當你想合併分支回主幹,可能因為太多衝突,已經無法輕易合併你的分支和主幹的修改。而在 git 版本庫中創建分支的成本幾乎為零,所以可以創建一個屬於自己的個人工作分支,以避免對主分支 master 造成太多的干擾,也方便與他人交流協作。當最後功能完成最後需要合併分支來合併別人修改的時候,最好創建一個臨時的分支用來合併,合併完成再fatch到自己的分支。
Git的缺點
- 中文完整的Git學習資料較少。
- 學習周期比較長。
- 程式碼一經pull,就可以完全公開源碼和版本資訊。
推薦閱讀
實時會話系統實現(2) — express-ws改寫會話系統