分布式版本控制工具Git
一、Git技術簡介
Git是一個分布式版本控制系統,與集中式的SVN不同。
1. 主要特點
集中式特點:
- 所有人的資源全部保存在中央服務器。
- 所有人開發前都需要從中央服務器上下載同步其他人的代碼才能繼續開發,慢。
- 中央服務器一旦數據丟失,意味著所有數據全部丟失。
分布式特點:
- 每個人的電腦都是一個完整的版本庫
- 每個人修改完畢之後,會將資源發送至其他每個同事的電腦。
- 如果個人電腦數據丟失,隨便從其他人那裏復制一份即可。
二、Git環境搭建
1.下載Git客戶端
https://git-scm.com/downloads
2.安裝Git客戶端
註釋:Git使用了cygwin在windows下模擬了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的常用版本控制命令
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. 概念
分支就好比是火影中的影分身之術,比如你要同時完成學習Spring和Linux兩件事,你可以分身,然後一個分身花5天時間去學習Spring,另一個分身花5天學習Linux,這5天之內各個分身互不幹擾,5天之後分身合並,你就同時掌握了Spring和Linux兩種技術。
2. 作用
比如開發中,你有一個任務需要1個月完成,如果完成再提交,過程中有代碼丟失的風險,但是完成之前就提交可能導致別人無法工作。通常來講,一個人使用一個分支。
3. 分支管理
ps:系統默認有一個主分支--master
3.1 查看目前所有的分支:git branch
3.2 創建分支:git branch 分支名
3.4 合並分支:
4. 解決沖突
ps:所謂沖突一般就是兩個人開發中在各自的分支中修改了同一個文件,並且要提交。
就好比你有兩個分身,都學習了做飯西紅柿炒雞蛋,一個放糖,一個放鹽,合並的時候必須把這個矛盾手動解決,
執行合並是會出現上圖中的狀態,需要兩個分支所對應的人共同協商給出沖突解決結果,將文件修改之後,然後由其中一個人完成add和commit,然後再合並。
5. 遠程倉庫分支管理
5.1 將指定分支推送到遠程:git push origin 分支名
6. 分支管理策略
6.1 master分支,主分支,時刻與遠程倉庫保持一致。
6.2 dev分支,開發分支,涉及到多人協作,且保存這多人共同的開發進度。如果所有人的開發進度需要與遠程保持一致,則需要推送到遠程,否則本地也可以。
六、標簽管理
概念:tag其實就是對某個commit的快照添加個標記,快照雖然也有版本號,但是是一串32位的UUID很難記憶也不易於溝通,而換成標簽tag:v1.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倉庫
分布式版本控制工具Git