一、簡史
git 是因為linux 核心開源社群與分布式版本控制系統的bitkeeper的合作結束,人家不給用了,怎麼辦呢?自己開發一套唄,git就誕生了。
二、基礎
git與(svn,cvs, perforce)有什麼區別?
都是版本控制系統,我自己用過svn和git,最大的區別就是git可以在家裡不用連vpn就能夠提交版本。而svn就必須連網才可以。那麼造成這種差異的原因呢?
因為兩種系統的實現方式不一樣。以svn為例,svn是記錄每個檔案的哪些內容變化,進行版本控制的。而git則是比較整個檔案的變化。這麼說有點兒抽象,看圖吧。
svn等系統的記錄版本的方式。
每次記錄有哪些檔案作了更新,以及都更新了哪些行的什麼內容。
git 並不儲存這些前後變化的差異資料。實際上,git 更像是把變化的檔案作快照後,記錄在乙個微型的檔案系統中。每次提交更新時,它會縱覽一遍所有檔案的指紋資訊並對檔案作一快照,然後儲存乙個指向這次快照的索引。為提高效能,若檔案沒有變化,git 不會再次儲存,而只對上次儲存的快照作一鏈結。git 的工作方式就像下圖所示。
git幾乎所有的操作都可以在本地完成
與svn總是從伺服器更新資料相比,git可以在本地完成很多的操作。因為 git 在本地磁碟上就儲存著所有當前專案的歷史更新,所以處理起來速度飛快。用 cvcs 的話,沒有網路或者斷開 vpn 你就無法做任何事情。但用 git 的話,就算你在飛機或者火車上,都可以非常愉快地頻繁提交更新,等到了有網路的時候再上傳到遠端倉庫。
時刻保持資料完整性
git 使用 sha-1 演算法計算資料的校驗和,通過對檔案的內容或目錄的結構計算出乙個 sha-1 雜湊值,作為指紋字串。該字串由 40 個十六進製制字元(0-9 及 a-f)組成,看起來就像是:
24b9da6552252987aa493b52f8696cd6d3b00373
git 的工作完全依賴於這類指紋字串,所以你會經常看到這樣的雜湊值。實際上,所有儲存在 git 資料庫中的東西都是用此雜湊值來作索引的,而不是靠檔名。
檔案的三種狀態
重點!重點!重點!
對於任何乙個檔案,在 git 內都只有三種狀態:基本的 git 工作流程如下:已提交(committed),
已修改(modified)
已暫存(staged)。
已提交表示該檔案已經被安全地儲存在本地資料庫中了;
已修改表示修改了某個檔案,但還沒有提交儲存;
已暫存表示把已修改的檔案放在下次提交時要儲存的清單中。
在工作目錄中修改某些檔案。
對修改後的檔案進行快照,然後儲存到暫存區域。
提交更新,將儲存在暫存區域的檔案快照永久轉儲到 git 目錄中。
Python基礎第二課
練習題 1 編寫乙個python程式來查詢那些既可以被7整除又可以被5整除的數字,介於1500和2700之間。your code here i for i in range 1500 2700,1 if i 7 0and i 5 0 2 龜兔賽跑遊戲 題目描述 話說這個世界上有各種各樣的兔子和烏龜,...
linux學習第二課
今天跟著benjamin學習linux的第二課,主講內容 linux作業系統的檔案 一.linux系統下除了一般檔案外,所有的目錄和裝置 光碟機,硬碟等 都是以檔案的形式存在了。所以這裡就出現了乙個問題,我們怎樣才能使用物理裝置中的資料呢,linux系統是將物理裝置掛載 linux中乙個非常重要的概...
Android學習第二課
android技術結構圖 是針對安卓,對linux kernel進行優化 libraries android rumtime core libraries dalvik virtual machine 常用庫應用程式框架方便了我們的開發 手機的應用程式 android的四大元件 activity s...