天天看點

Git原理之開篇

Git是我們日常開發的必備工具,是團隊協作的利器。Git使用廣泛,而之是以如此流行,主要和它的一些突出的優點分不開。

真正的分布式

我們在使用Git時,無論是從遠端倉庫clone代碼,還是把本地的代碼推到遠端的新倉庫,都是完成的克隆一份代碼。相當于是複制了一份代碼到别的地方,也就是備份。

而且Git是去中心化的,這個去中心化簡單了解就是每一份代碼都是可以獨立編輯使用的,不會因為某一個機器上的代碼丢失了,而導緻所有人都丢失代碼或無法工作。

在 Git 中的絕大多數操作都隻需要通路本地檔案和資源。

舉個極端的例子,假設公司的開發團隊的代碼都托管在GitLab上,如果有一天,GitLab突然挂了不能用了,會出現什麼情況?實際上對我們開發影響不大,因為我們每個人的電腦上都有一份代碼,代碼并沒有丢失,大家還是可以繼續開發。

有影響的是團隊協作,大家沒法同步代碼了,也就是把大家開發的代碼合并在一起看效果。而這個也很容易處理,因為我們可以自己搭一個Git伺服器,這個也是比較簡單就能實作的。

Git是台時光機

Git存儲了跟蹤檔案的每次送出的快照,我們每次送出一次(commit),Git就儲存了一次。以後我們可以随時回到某一次送出(Commit)。使用

git log

指令可以檢視目前分支的所有送出記錄。

這裡也引出了一個Git使用習慣,就是即時送出(Commit)。隻有即時送出了,後續如果發現代碼有bug,才能復原到最理想的位置。當然也不是随便寫幾行就送出一下,那也是蠻累的。主要是一些必要的節點,比如完成一個小子產品小功能等。

Git的使用

Git使用起來也比較簡單,既可以用指令行也可以用第三方的工具,比如Android Studio自帶的Git插件,Mac下的Sourcetree等。但是盡管像Sourcetree已經做得很人性化很簡化了,在實際使用過程中我們還是難免碰到一些奇怪的問題,有時候是軟體使用不熟悉,特别是使用一些相對進階一點的功能,比如復原,合并沖突等。

我之前也是很依賴Sourcetree,一來是因為如果用指令行,需要記住很多的指令;二來是因為Sourcetree這樣的軟體相對來說比較直覺,心裡更踏實一些。

直到有一次,用Android Studio的Git插件推送的時候,推錯分支了!然後為了復原,在Sourcetree上忙了好一陣還是沒有抹掉“犯罪證據”!後來還是同僚幫忙弄的,很是尴尬!

這次教訓讓我慢慢開始切換到用Git指令行為主,Sourcetree為輔的路子上來。現在基本沒有Git的問題困擾了。

用指令行的好處:
  1. 指令行其實熟悉了以後最簡單,因為不用去熟悉新的軟體工具,而且平時實際上也隻需要其中幾個常用指令,沒有想象中的那麼難
  2. 再也不會出現一些特殊的莫名其妙的意外,比如上面我碰到的,建立完分支直接被推到遠端的老分支,因為遠端找不到新分支。而如果用指令行推的話,Git就會報錯,并提示你解決方法了
  3. 學會指令行其實是一件一勞永逸的事,不分平台和系統,統統都一樣使用。
  4. 減少電腦負擔,Mac上Android Studio多開幾個工程就卡了,記憶體設定多大都沒用,如果為了拉取推個代碼還得再開個軟體,那豈不是雪上加霜!萬一卡住了,多點了幾下誤操作怎麼辦?(當然,我實際上還沒遇到過)
  5. 高大上!哈哈…
幾個建議:
  • 盡量過度到指令行,遇到問題,查一下對應的指令是啥,并記錄下來便于後期查詢,慢慢記錄積累,堅持個把月妥妥就熟悉了
  • 養成随時送出(commit)的習慣,開發中完成一些小功能點就送出一下,避免幾天都不送出的壞習慣
  • 用熟悉Git指令以後,可以嘗試學習一下Git的原理,比如Git是如何記錄每個檔案的版本變化的?Git復原是怎麼回事?Git的本地倉庫和遠端倉庫是怎麼關聯起來的?等等這些問題搞明白以後,後續使用過程中碰到一些問題就比較容易找到原因和解決辦法。

正是基于以上的幾點,我準備把自己最近學習到的一些Git知識總結記錄下來,會分為幾篇文章,希望自己以後碰到Git問題能快速的找到原因并解決,也希望對大家有所幫助。