標籤:
一、Git簡介
1、Git是什嗎?
Git是世界上最好用的分布式版本控制系統,它是“Linux之父” linus用C語言花了兩周時間開發的又一個偉大的開源軟體,當時主要用於Linux源碼管理。2008年,GitHub網站上線之後,它為開源項目免費提供Git儲存,無數開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。Git迅速成為最流行的分布式版本控制系統。
2、集中式vs分布式
集中式版本控制系統,版本庫是集中存放在中央伺服器的,而幹活的時候,用的都是自己的電腦,所以要先從中央伺服器取得最新的版本,然後開始幹活,幹完活了,再把自己的活推送給中央伺服器。中央伺服器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然後回到家自己改,改完了,再放回圖書館。
Linus一直痛恨的CVS及SVN都是集中式的版本控制系統。
分布式版本控制系統根本沒有“中央伺服器”,每個人的電腦上都是一個完整的版本庫,你在自己的電腦上改了檔案A,你的同事也在他的電腦上改了檔案A,這時,你倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。在實際使用分布式版本控制系統的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因為可能你們倆不在一個區域網路內,兩台電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機。因此,分布式版本控制系統通常也有一台充當“中央伺服器”的電腦,但這個伺服器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣幹活,只是交換修改不方便而已。
集中式版本控制系統 分布式版本控制系統
二、安裝Git
1、Linux系統
Git誕生於Linux平台並率先服務於Linux核心,因此Linux系統內建Git,我們可以使用系統預設的版本,也可以使用源碼安裝最新版本。
CentOS6.6 Git版本 Ubuntu16.04 Git版本
2、Windows系統
windows版本:https://git-scm.com/download/win 下載安裝之後貌似是圖形化介面的,由於我這裡採用Ubuntu系統練習,所以win版本就不研究了。
三、Git初始化
在安裝完成之後,還需要做最後一步配置:
git config --global user.name "Your Name"git config --global user.email "[email protected]"
因為Git是分布式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。你也許會擔心,如果有人故意冒充別人怎麼辦?這個不必擔心,首先我們相信大家都是善良無知的群眾,其次,真的有冒充的也是有辦法可查的。
注意git config命令的--global參數,用了這個參數,表示你這台機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的使用者名稱和Email地址。
git init 建立版本庫 (目錄不存在會自動建立)
從中初始化資訊中可以看到,git init命令在工作區中建立了隱藏目錄.git,這個隱藏目錄就是Git的版本庫(裡面的東西不能隨便亂改)。
把檔案添加到版本庫
編寫一個readme.txt檔案,內容如下:
Git is a version control system.Git is free software.
readme.txt檔案一定要放到learngit目錄下(子目錄也可以),因為這是一個Git倉庫,放到其他地方Git就找不到了。
1、git add 把檔案添加到倉庫
2、git commit 把檔案提交到倉庫:
git commit命令,-m 後面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從記錄裡方便地找到改動記錄。
返回的輸出資訊中,master是這次提交的分支,且是該分支的第一個提交(root-commit,後面再次提交就沒有這個提示了), 提交的id為 e09b1a6 .
四、時光穿梭機
1、前奏
修改readme.txt檔案的內容:
Git is a distributed version control system.
Git is free software.
現在運行 git status命令查看結果:
git status命令可以讓我們時刻掌握倉庫當前的狀態,上面的命令告訴我們,readme.txt被修改過了,但還沒有準備提交的修改。
如果想要查看修改了什麼內容,可以使用 git diff
git diff顧名思義就是查看difference,顯示的格式正是Unix通用的diff格式,可以從上面的命令輸出看到,我們在第一行添加了一個“distributed”單詞。
修改之後還要提交到倉庫:
2、版本回退
當檔案經過多次修改之後,我們可能記不住改了哪些內容,這時可以使用 git log命令查看:
git log命令顯示從最近到最遠的提交日誌,我們可以看到4次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。
如果嫌輸出資訊太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數:
把readme.txt回退到上一個版本,也就是“add distributed”的那個版本:
git reset --hard HEAD^ 回退到上一個版本
git reset --hard c7bb35ce 回退到指定版本
在Git中,用HEAD表示目前的版本,也就是最新的提交,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。
Git的版本回退速度非常快,因為Git在內部有個指向目前的版本的HEAD指標,當你回退版本的時候,Git僅僅是把HEAD從指向append GPL!
Git提供了一個命令git reflog用來記錄每一次操作:
3、工作區和暫存區
Git和其他版本控制系統如SVN的一個不同之處就是有暫存區的概念。
Git學習筆記