1. 程式人生 > >分散式版本控制工具Git

分散式版本控制工具Git

一、Git技術簡介

Git是一個分散式版本控制系統,與集中式的SVN不同。

 

 

1. 主要特點

集中式特點:

  1. 所有人的資源全部儲存在中央伺服器。
  2. 所有人開發前都需要從中央伺服器上下載同步其他人的程式碼才能繼續開發,慢。
  3. 中央伺服器一旦資料丟失,意味著所有資料全部丟失。

分散式特點:

  1. 每個人的電腦都是一個完整的版本庫
  2. 每個人修改完畢之後,會將資源傳送至其他每個同事的電腦。
  3. 如果個人電腦資料丟失,隨便從其他人那裡複製一份即可。

 

二、Git環境搭建

 1.下載Git客戶端

https://git-scm.com/downloads

2.安裝Git客戶端

註釋:Git使用了cygwinwindows下模擬了unix環境,所以支援很多unix檔案操作命令。

a) git客戶端下載後安裝在非中文目錄下。

b) 下載Git圖形化工具:smartGit

http://www.syntevo.com/static/smart/download/smartgit/smartgit-win32-setup-jre-17_0_5.zip

3.建立版本庫

解釋:所謂版本庫,就是本地的倉庫,本質就是一個資料夾,只不過該資料夾會受到git的管理,每個檔案的建立修改都能跟蹤

例如要將d盤下的work目錄中建立gitrepo

目錄作為git倉庫資料夾。

 

倉庫建立好之後,會生成.git目錄.git的目錄,是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄裡面的檔案,不然改亂了,就把Git倉庫給破壞了。預設是隱藏的。

 

三、Git的常用版本控制命令

1. 新增檔案到版本庫

· 示例: 向版本倉庫中新增一個HelloGit.java檔案。

· 注意事項:

① 版本控制器只能記錄文字檔案的改動痕跡。

② 二進位制檔案只能記錄大小變化。

③ 文字檔案必須使用UTF-8編碼

windows使用者不要使用系統自帶記事本編輯器。

· 操作:

1.1

git的倉庫目錄或者子目錄中建立一個HelloGit.java檔案。

1.2 使用 stage 操作將檔案把檔案交給git管理的暫存區【相當於資料庫的dml語句,將資料修改存放在rollback seagment回滾段,暫存區與當前客戶端對應】

 

1.3 使用 commit 完成檔案的提交【相當於資料庫的提交事務,將暫存的內容提交給git管理。】

 

使用commit提交檔案需要設定 因為Git是分散式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。

注意git config命令的--global引數,用了這個引數,表示你這臺機器上所有的Git倉庫都會使用這個配置

 

2. 版本管理機制

開發中會對程式碼檔案進行一次又一次修改,就好比我們打rpg遊戲,每打敗一個boss就存檔一次,如果某次打boss失敗了,我們也可以利用存檔回退到之前的某個進度,不至於從頭開始。git也一樣,每次修改到一定程式,就要利用commit命令產生一個快照,日後一旦改錯了,也可以利用commit快照回退之前的某個快照時刻

stage是將當前修改提交到暫存區。

commit 才是一次性將暫存區的資料同步到倉庫。

 

③ 每次commit,其實就是對當前進度生成一個快照,就表示當前進度。

進度模型:

3. 版本管理

4.1 工作區修改撤銷

4.2 內容已經被提交到暫存區staged

如果需要將工作區的內容頁撤銷掉,需要使用git checkout -- file

4.3 內容已經commit到倉庫區:使用版本回退。

① 使用git log命令檢視檔案的修改詳細歷史記錄。

② 跳到指定版本

③ 工作區檔案撤銷和倉庫保持一致,需要對工作區檔案撤銷操作。

4.4 刪除檔案

ps:本質也是提交修改,刪除也是一種修改。

① 刪除工作區的檔案,然後再smartgit中提交修改。

 

四、遠端倉庫

1. 建立遠端倉庫

1.1 使用郵箱在第三放GitHub網站註冊一個賬號。

開源中國碼雲:http://git.oschina.net/

1.2 建立遠端倉庫

注意:遠端倉庫和本地倉庫名必須一致,否則無法提交。

2. 繫結遠端倉庫

2.1 複製遠端倉庫的地址

 

2.2 smartgit中新增遠端倉庫地址進行繫結。

 

2.3 先確保專案已經commit

2.4 點選專案資料夾,然後點選pull。將本地倉庫和遠端倉庫繫結。

 

2.5 將本地專案推送到遠端倉庫.

 

3. 從遠端倉庫克隆

註釋:最正確的工作流程是先建立遠端倉庫,然後克隆遠端倉庫

3.1:建立遠端倉庫

3.2:克隆遠端倉庫

git clone 遠端倉庫專案的地址

3.3 使用smart克隆clone遠端倉庫到本地

3.4 可以在克隆到本地的倉庫進行操作。

4. git操作命令簡圖

說明:

workspace:本地工作區

Index/Staged:暫存區

Repository:本地倉庫

Remote:遠端倉庫

 

五、分支管理

 

1. 概念

 

分支就好比是火影中的影分身之術,比如你要同時完成學習SpringLinux兩件事,你可以分身,然後一個分身花5天時間去學習Spring,另一個分身花5天學習Linux,這5天之內各個分身互不干擾,5天之後分身合併,你就同時掌握了SpringLinux兩種技術。

 

 

 

2. 作用

 

比如開發中,你有一個任務需要1個月完成,如果完成再提交,過程中有程式碼丟失的風險,但是完成之前就提交可能導致別人無法工作。通常來講,一個人使用一個分支。

 

 

 

3. 分支管理

 

ps:系統預設有一個主分支--master

 

 

 

3.1 檢視目前所有的分支:git branch

 

3.2 建立分支:git branch 分支名

 

3.4 合併分支:

 

4. 解決衝突

ps:所謂衝突一般就是兩個人開發中在各自的分支中修改了同一個檔案,並且要提交。

就好比你有兩個分身,都學習了做飯西紅柿炒雞蛋,一個放糖,一個放鹽,合併的時候必須把這個矛盾手動解決,

執行合併是會出現上圖中的狀態,需要兩個分支所對應的人共同協商給出衝突解決結果,將檔案修改之後,然後由其中一個人完成addcommit,然後再合併。

5. 遠端倉庫分支管理

5.1 將指定分支推送到遠端:git push origin 分支名

 

6. 分支管理策略

6.1 master分支,主分支,時刻與遠端倉庫保持一致。

6.2 dev分支,開發分支,涉及到多人協作,且儲存這多人共同的開發進度。如果所有人的開發進度需要與遠端保持一致,則需要推送到遠端,否則本地也可以。

六、標籤管理

概念:tag其實就是對某個commit的快照添加個標記,快照雖然也有版本號,但是是一串32位的UUID很難記憶也不易於溝通,而換成標籤tagv1.0 v2.0這樣的標記就很容易記憶。比如“將master主分支上,v1.0標籤的專案打包釋出”就比 “將master主分支上a732s8a89s88d...版本的專案打包釋出”容易的多。

1. 建立標籤

切換到要新增標籤的分支上,找到對應的版本,右鍵選擇Add Tag操作。

2. 管理標籤

2.1 檢視所有標籤

 

2.2 刪除標籤

在標籤右鍵--->Delete即可。

2.3 把標籤推送到遠端倉庫

選中標籤--->右鍵-->push to

 

七、 Eclipse整合操作 

1. 建立專案分享到git遠端倉庫。 

2. git倉庫克隆專案 

3. 開發過程中的操作流程 

八、 常用的第三方線上Git倉庫