版本控制的工具我早以前用的svn,後來換成了git。一樣是版本控制,爲何要換呢?確定是有緣由的啦~git
1、Git和SVN的比較數據庫
svn的優缺點安全
優勢:服務器
1.管理方便,邏輯明確,符合通常人思惟習慣。app
2.易於管理,集中式服務器更能保證安全性。分佈式
3.代碼一致性很是高,適合開發人數很少的項目開發。svn
缺點:工具
1.服務器壓力太大,數據庫容量暴增。學習
2.若是服務器連接不上,基本上是不能夠工做的(限制性很是強)測試
3.不適合開源開發(開發人數很是很是多,可是Google app engine就是用svn的)。可是通常集中式管理的有很是明確的權限管理機制
(例如分支訪問限制),能夠實現分層管理,從而很好的解決開發人數衆多的問題。
git的優缺點
優勢:
1.適合分佈式開發,強調個體。
2.公共服務器壓力和數據量都不會太大。
3.速度快、靈活,任意兩個開發者之間能夠很容易的解決衝突。
4.有本地倉庫,可離線工做。
缺點:
1.不符合常規思惟,學習週期相對而言比較長。
2.代碼保密性差,一旦開發者把整個庫克隆下來就能夠徹底公開全部代碼和版本信息。
各有各的優缺點,仍是須要根據項目來選擇適合的工具~
今天具體來講Git~
首先須要安裝Git 不過我就省略安裝過程啦(百度一大堆)。。。。
2、Git的工做流程
1.在工做目錄中修改文件【進入已修改(modified)狀態】。
2.暫存文件,將文件的快照放入暫存區域【保存到本地倉庫,進入已暫存(staged)狀態】。
3.提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄【提交到git倉庫,進入已提交(committed)狀態】。
Git 項目的三個工做區域的概念:工做目錄、暫存區域以及 Git 倉庫(如圖)
注:
工做目錄:是對項目的某個版本獨立提取出來的內容。這些從 Git 倉庫的壓縮數據庫中提取出來的文件,放在磁盤上供你使用或修改
暫存區域:是一個文件,保存了下次將提交的文件列表信息,通常在 Git 倉庫目錄中。有時候也被稱做`‘索引’',不過通常說法仍是叫暫存區域。
Git 倉庫目錄:是 Git 用來保存項目的元數據和對象數據庫的地方。這是 Git 中最重要的部分,從其它計算機克隆倉庫時,拷貝的就是這裏的數據。
我感受git比svn方便就方便在有一個暫存區域(能夠理解成一個本地倉庫),能夠離線工做~比較方便開發~
3、Git的基本運用
1.假設你已經安裝啦git,先查看下本身的git版本~
$ git --version
2.咱們能夠先從遠程git倉庫clone出須要的項目(我項目放在阿里雲,大家也能夠複製GitHub上的項目哈)
$ git clone url
3.咱們能夠查看下這個項目有多少個分支
$ git branch -a
4.建立一個本身的本地分支(工做中確定是本身寫本身的分支哈,因此這裏直接新建分支來測試啦)
$ git checkout -b name #本身起一個好聽的名字(最終仍是須要聽老大的規範再起哈 謹慎!)
5.把本地分支上傳到Git倉庫
$ git push origin name #這個名字呢最好和本身本地庫裏的一致(不過。。。仍是須要聽老大的正確指導)
6.進入項目目錄而後建立一個空的文本文件以備接下來的測試(比較簡單 就不給複製的命令啦)
7.如今我們是在新建的分支下,目錄是這樣的,修改一下剛纔那個小文件
8.能夠試着提交到本地倉庫了哈
$ git add .
$ git commit -a -m 「寫個備註 寫備註但是個好習慣呀「
9.如今咱們的目錄是這樣的了,這個文件有了綠色的小對勾~說明提交到本地成功!
10.咱們想要把這些改動放到Git的遠程倉庫裏,須要這樣作
$ git push origin name #這裏的name表明的是Git遠程上的分支名稱
11.如今咱們的分支上已經有這個文件,而且我們的修改也一併提交到遠程倉庫啦,恭喜你~說明你成功啦~
到這裏醉醉基本的操做就完成啦,可是還會出現一些問題,我們這裏只有本身的分支代碼,若是須要用到別人的代碼呢?這時候就須要在本地導入別人的分支進行合併來達到本身也能夠用別人的代碼的目的。
4、Git經常使用命令
$ git pull #把服務器中最新的代碼更新到本地
$ git checkout name #切換到某個分支上 name表明本地分支名稱
$ git fetch origin name #獲取某個分支代碼 name表明遠程分支名稱
$ git merge name #合併分支 name表明的是要合併的分支名稱
$ git branch -d name #刪除本地分支 name。。。表明本地分支名稱
$ git branch -r -d #刪除遠程分支 name。。。表明遠程分支名稱
到這裏應該就差很少啦,由於在我們工做中是可使用插件來代替命令行模式的,因此,,,歡迎你們指正補充~~~