Git 概述

大綱:

一、前言

二、Git 簡介

三、Git 的誕生

四、集中管理 vs 分佈式管理

五、Git 特點

六、Git 原理

七、總結

注,測試機 CentOS 5.5 x86_64,Git 服務器版本:git version 1.8.2.1,客戶端版本:git version 1.9.2.msysgit.0。所有軟件請到這裏下載:http://msysgit.github.io/


一、前言

本來作爲一個專職運維,嘿嘿!會搭建Git服務器就OK了,當時真這麼想,嘿嘿!本來公司的版本控制器一直在用SVN,我們版本發佈用SVN+shell腳本進行發佈,但是最近開發部的老大換了,嘿嘿。你懂的。強烈要求我們換版本控制器,雖然很多人不滿意,最後還是換成了Git,但是發現很多同事不怎麼會使用Git,於是我就寫了這個教程到內部tower中,大家看了不錯,於是我發出來與大家分享一下!網上很多教程都是從開發的角度來講Git的,今天我從運維的角度來說Git,大家有什麼問題隨時與我交流,先在這裏謝謝大家了^_^!


二、Git 簡介

Git 是什麼?大家肯定會說不就是版本控制器嘛,是的Git是目前世界上最先進的分佈式版本控制系統(沒有之一)。

1.那什麼是版本控制器呢?

舉個簡單的例子,比如我們用Word寫文章,那你一定有這樣的經歷:比如增加一個段落你得複製一份,你刪除一個段落你又得複製一份,防止下次又要修改保留上次你要刪除的段落。最後一個接一個的版本,你複製了很多版本,最後可能你自己都不知道修改了哪些?嘿嘿,然後你只能一個一個的找,太麻煩了,若是有東西幫你管理那應該多好。


2.分佈式管理

你寫的文章或書,你肯定會給你朋友或者其他人看,讓他們給你建議並做相應的修改,然後他們用郵件或U盤再發給你,你再合併修改一下,真是麻煩,於是你想,如果有一個軟件,不但能自動幫我記錄每次文件的改動,還可以讓朋友之間協作編輯,這樣就不用自己管理一堆類似的文件了,也不需要把文件傳來傳去。如果想查看某次改動,只需要在軟件看一眼就可以,豈不是很方便?這個軟件用起來就應該像這個樣子,能記錄每次文件的改動:

版本用戶說明 修改日期
1user1增加一行內容2014/4/10 10:22
2user2修改一行內容2014/4/10 13:12
3user3刪除幾個字2014/4/15 20:42
4user2增加某個內容2014/4/20 16:32

哈哈,這樣你就從手工控制“版本”時代到軟件自動管理的時代,而且還是分佈式管理,至於什麼是分佈式管理我們下面將詳細說明。


三、Git 的誕生(很傳奇

先簡看一下,下面的圖片,是不是很熟悉,嘿嘿!

圖片1

簡單說:Linus開發Linux內核,需要版本控制器,於是開發了Git。下面是開發週期:

  • 2005/4/3 開發;

  • 2005/4/6 發佈;

  • 2005/4/7 管理自身;

  • 2005/6/16 管理Kernel2.6.12。

大牛是怎麼定義的呢?大家可以體會一下。哈哈^_^…… Git 迅速成爲最流行的分佈式版本控制系統,尤其是2008年,GitHub網站上線了,它爲開源項目免費提供Git存儲,無數開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。至於Git與GitHub的關係,會再下面的文章裏說明。


四、集中管理 vs 分佈式管理

Linus一直痛恨的CVS及SVN都是集中式的版本控制系統,而Git是分佈式版本控制系統,集中式和分佈式版本控制系統有什麼區別呢? 下面我們來看看兩張圖:

1.集中管理

圖片2

集中式版本控制系統,版本庫是集中存放在中央服務器的,而幹活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然後開始幹活,幹完活了,再把自己的活推送給中央服務器。中央服務器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然後回到家自己改,改完了,再放回圖書館。


缺點:

集中式版本控制系統最大的毛病就是必須聯網才能工作,如果在局域網內還好,帶寬夠大,速度夠快,可如果在互聯網上,遇到網速慢的話,可能提交一個10M~20M的文件就需要10分鐘甚至更多時間,這還不得把人給急死啊。

2.分佈式管理

圖片3

那分佈式版本控制系統與集中式版本控制系統有何不同呢?首先,分佈式版本控制系統沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,這樣,你工作的時候,就不需要聯網了,因爲版本庫就在你自己的電腦上。既然每個人電腦上都有一個完整的版本庫,那多個人如何協作呢?比方說你在自己電腦上改了文件fiel,你的同事也在他的電腦上改了文件file,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。


和集中式版本控制系統相比,分佈式版本控制系統的安全性要高很多,因爲每個人電腦裏都有完整的版本庫,某一個人的電腦壞掉了不要緊,隨便從其他人那裏複製一個就可以了。而集中式版本控制系統的中央服務器要是出了問題,所有人都沒法幹活了。

在實際使用分佈式版本控制系統的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因爲可能你們倆不在一個局域網內,兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機。因此,分佈式版本控制系統通常也有一臺充當“中央服務器”的電腦,但這個服務器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣幹活,只是交換修改不方便而已。如上圖!


五、Git 特點

1.Git 總結

  • 分佈式

  • 存儲快照而非差異

  • 本地有完全的版本庫,幾乎所有操作都在本地

  • 有內在的一致性,SHA1

  • 優秀的分支管理

  • 支持各種協同模式

  • 開源,有一些第三方軟件可整合使用,幾乎所有操作都是

2.與CVS/SVN,Git 的優勢

  • 支持離線開發,離線Repository(倉庫)

  • 強大的分支功能,適合多個獨立開發者協作

  • 速度塊


六、Git 原理

1.四種基本類型

  • BLOB:每個blob代表一個(版本的)文件,blob只包含文件的數據,而忽略文件的其他元數據,如名字、路徑、格式等。

  • TREE:每個tree代表了一個目錄的信息,包含了此目錄下的blobs,子目錄(對應於子trees),文件名、路徑等元數據。因此,對於有子目錄的目錄,git相當於存儲了嵌套的trees。

  • COMMIT:每個commit記錄了提交一個更新的所有元數據,如指向的tree,父commit,作者、提交者、提交日期、提交日誌等。每次提交都指向一個tree對象,記錄了當次提交時的目錄信息。一個commit可以有多個(至少一個)父commits。

  • TAG:tag用於給某個上述類型的對象指配一個便於開發者記憶的名字, 通常用於某次commit。

圖片4

2.工作區(Working Dir),提交區/暫存區(stage/index),版本庫  
圖片5

注,大家對上面的原理不瞭解沒關係,大家只要簡單的看一下這幾張圖,在下面的文章中我們會深入瞭解。

七、總結

Q & A:歡迎大家提出問題。最後,希望大家有所收穫^_^……


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章