Git使用入門--從SVN轉戰(zhàn)Git

一、背景

公司的研發(fā)代碼一直用SVN管理,但隨著代碼量與分支數(shù)量的不斷增加,也逐漸暴露出了SVN的短板,所以公司研發(fā)服務部從去年就開始力推Git,用Git完全取代SVN是遲早的事。
為了提前讓小師弟/師妹們適應Git環(huán)境,身為老司(油)機(條)的我主動整理了一份簡單的文檔,便于大家更容易從SVN切換到Git??。

二、Git與SVN的區(qū)別

Git與SVN都是主流的版本管理工具,使用習慣其實也比較相似,但之所以要SVN轉Git還是因為兩者之間的差異,細節(jié)差異在此不表(主要是不懂...??)。其中需要理解的最大差異有以下兩點:

1、Git是分布式,SVN是中心式
2、Git分支記錄了差異,而SVN分支是完整的拷貝
1、Git是分布式,SVN是中心式
Git與SVN的差異

一圖勝千言。

用戶在使用SVN過程中是直接與服務器交互的,每一次提交、更新都是直接在和服務器請求,本地只是一份代碼拷貝。所以在離線狀態(tài)下是無法執(zhí)行提交、更新、查看log等操作的。一旦服務器出現(xiàn)問題(比如被炸了??),雖然本地的代碼還在,但版本管理信息是無法恢復的。并且,由于只有一個版本庫的存在,當一個用戶在進行代碼合并等重要操作時,其他用戶一般需要等待,否則可能會造成大量沖突。

而Git則是采用分布式管理,每個用戶本地都有一個完整的代碼庫,每次的commit等操作其實都只是和本地的版本庫交互,只有使用push、pull等命令才會與中心服務器交互,從而實現(xiàn)與其它用戶代碼同步。所以Git在離線狀態(tài)下也可以進行代碼提交、查看log等命令的,只是無法與其他用戶進行數(shù)據(jù)同步。
在這個網(wǎng)絡中,服務器上的版本庫(即上圖中的交換中心)與用戶的版本庫其實都是等價、并處于同一層級的,兩者之間可以相互取代。比如完全可以去掉中心服務器,而改用某一用戶的機器作為數(shù)據(jù)交換中心。所以即便是服務器炸了,也可以從用戶機器上clone一份,快速恢復。

2、git分支記錄了差異,而SVN分支是完整的拷貝
  • 對SVN而言,每新切一個分支,則意味著服務器上要重新拷貝一份完整的代碼,用戶也需要另外下載一份完整的代碼。
    無論對服務器還是用戶而言,都是一筆很大的存儲開銷。
  • 而對Git而言,新切一個分支只不過增加一個指針而已。所有的分支都在同一份代碼目錄上,不同分支上只記錄了差異。
    所以使用Git比較明顯的一個體驗是,用戶本地只用存在一份代碼,在同一份代碼上進行切換分支的操作即可。

Git與SVN都是很優(yōu)秀的版本管理工具,雖然現(xiàn)在主流的聲音都是力推git,但其實也沒有誰比誰強的關系,只是兩者的實現(xiàn)方式有所區(qū)別,側重點不同。比如SVN擁有更好的權限管理,適合管理項目的文檔計劃等。而git更加適用于多分支、大團隊的代碼管理。

三、Git安裝

1. 安裝git版本管理系統(tǒng)
從Git官網(wǎng)下載安裝即可。安裝完成后本地可以用Git自帶的命令行工具或者GUI操作Git。
具體使用方法:在某目錄下右鍵,選擇git bash here即可呼出命令行工具。
說明:git的命令行操作都要以git開頭。

2. 再安裝圖形客戶端TortoiseGit (小烏龜)
其實執(zhí)行完第1步就已經完成了Git環(huán)境搭建,但是對于我們這種弱雞碼農,全程用命令行提交/更新代碼總還是有些吃力(雖然Git自帶GUI,但用起來也不太友好),所以為了減少學習成本(偷懶),安裝一個第三方圖形客戶端也是有必要的。首推TortoseGit客戶端,俗稱小烏龜??。

TortoseGit是開源的Git圖形客戶端,單從名稱上就可以看出它和TortoiseSVN神似。安裝完后會發(fā)現(xiàn),它的UI界面與操作習慣也和后者高度相似。這也讓廣大碼農節(jié)省了不少從SVN遷移到Git所導致的學習成本。

3. Netbeans安裝git插件
同樣,在Netbeans中配置Git插件,也能讓日常的使用更加方便。官方文檔

四、新建/克隆一個項目

安裝完Git,“是時候表演真正的技術了~”??

  • 創(chuàng)建一個新的庫(git init)
    場景:如果我自己搗鼓了一個小項目,代碼還沒有版本管理,想使用git管理起來該如何操作呢?
git bash命令行操作:
1. 在需要管理的代碼目錄中呼出命令行工具--右鍵選擇"git bash here"
2. 執(zhí)行`git init`即可

TortoiseGit操作:
- 在需要管理的代碼目錄中右鍵,選擇"Git create repository here ...",然后按照提示操作即可。

執(zhí)行完以上操作后,該目錄就成為了一個git庫,目錄下的代碼就能被git管理了~
開始愉快的add、commit吧!??

  • 克隆一個庫(git clone)
    一般情況下,公司項目的代碼已經被Git管理起來了,我們需要做的只是把已有代碼下載下來使用就好了。這里需要到git 的clone命令。
    clone含義:顧名思義,clone就是將遠程的代碼庫克隆到本地。這樣你本地就有一個和服務器一樣一樣的git庫了,并且也建立了與中心的連接,可以push代碼到服務器了。
clone操作和SVN的checkout命令比較類似,都是將服務器的代碼下載到本地,只不過Git是拷貝了整個庫。

TortoiseGit操作:
1、獲取服務器的clone地址
2、在本地目錄右鍵,選擇 ”git clone“,按照提示操作即可

五、常用操作(提交、更新、切換分支)

1. 提交代碼

命令行操作:

Git提交代碼的完整流程為:
1、git add 需要提交的文件  #將需要提交的內容添加到緩存區(qū)
2、git commit #提交到本地庫
3、git push #推送到遠程服務器,讓其他人也能同步

Git提交代碼與SVN的顯著區(qū)別是多了兩步操作。
TortoiseGit操作:

TortoiseGit對git的提交進行了二次封裝,應該是將add操作影藏掉了,所以看起來與SVN提交并無二異。
所以在提交時只需右鍵點擊”commit to master..“, 然后在提交前選擇commit 或者 commit&push即可。
前者表示僅提交到本地庫,后者表示提交到本地庫并推送到服務器。
具體可參看下圖:
小烏龜提交代碼

官方解釋如下:

The main button Commit has a drop-down menu. There are the options ReCommit and Commit & push. The option ReCommit commits your changes and leaves the Commit dialog open, so that you can continue committing. The last option Commit & push will commit your changes and immediately push your changes. If no remote tracking branch is configured for the current active branch, the push dialolg (cf. the section called “Push”) is opened.

2. 更新代碼
SVN中更新代碼方式為update,而git中叫做pull。
pull操作實際包含兩個動作:fatch + merge。
fatch會先從服務器上獲取最新的內容,然后merge到本地分支上。
需要注意的是,無論使用小烏龜提交還是更新,都必須等待進度條走完,并且最后彈出success才算成功。

3. 切換分支

命令行操作:
創(chuàng)建分支:git branche name
切換分支:git checkout name
TortoiseGit操作:

右鍵選擇Switch/Checkout,即可切換分支。
下拉框里面顯示有本地分支,以及遠程分支。

注意:
切換分支前要確保當前分支上沒有修改,不然切換分支過程中可能失敗。
本地首次切換一個分支時,會創(chuàng)建本地分支。下次就能直接用。

六、其它推薦掌握的操作

1. 暫存修改
有時候在切換分支/更新腳本時,會提示本地存在未提交的內容,需要先提交后才能切換分支。若此時不想提交,而又想切換分支,可以使用pop save功能。
執(zhí)行【pop Save】會將本地所有的修改存到緩存區(qū),同時將腳本還原到未修改的狀態(tài)。此時就可以切換分支、更新腳本了。
若要還原剛才緩存的部分修改,再執(zhí)行一下 【Stash Pop】功能即可還原之前緩存的部分修改。

2. 修改/合并上次的提交
Git提供了一個命令可以修改最近的一次提交--amend。在提交窗體中勾選 amend即可。
使用場景:如果一次提交少了某個文件,或者某個文件提交有問題。
使用amend命令可以直接對最近的一次提交進行修改,相當于給你一次機會重新提交,代碼與log信息都能重新編輯。使用amend后log記錄仍然顯示為一條,而不是兩條。

3. 還原修改
與SVN類似,直接使用revert即可。
但有時候會出現(xiàn)revert失敗的情況,此時可以打開git的log,然后選中最后一個提交,右鍵選擇【reset *** to this】,一般這個命令不會出錯。

4. 提交空文件夾
Git不支持提交空文件夾。如果需要提交空目錄,可以在里面放置一個無用的文本文件。
或者按照網(wǎng)上的教程,在里面添加一個.ignore文件。詳情度娘。

七、待續(xù)...

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Git 基礎 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來。這樣一來,任何一處協(xié)同...
    __silhouette閱讀 16,197評論 5 147
  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,813評論 4 54
  • Git 命令行學習筆記 Git 基礎 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來...
    sunnyghx閱讀 4,152評論 0 11
  • 不善巧思 必落俗套 煙芝教 作者 王崇信 驚險樣式的影片是以它奇特的故事情節(jié)去描寫正面人物的大智大勇;靠尖銳復雜的...
    冰洋映紅閱讀 250評論 0 0
  • 有個故事,感覺有點可悲,又有點可笑,又有點傷感,有一個人不懂得愛,也不知道如何去愛一個人,也不懂得愛是什么,可有一...
    初哀閱讀 291評論 0 0

友情鏈接更多精彩內容