博文大綱:
1、初識Git
2、Git的安裝配置
3、Git工做流程
4、Git工做區、暫存區和版本庫
5、Git基本操做php
Git是一個開源的分佈式版本控制系統,用於敏捷高效地處理任何或大或小的項目。git
Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。算法
Git 與經常使用的版本控制工具 CVS, Subversion 等不一樣,它採用了分佈式版本庫的方式,沒必要服務器端軟件支持。windows
Git與SVN的區別:
1)Git是分佈式的,SVN不是:這是Git和其餘非分佈式的版本控制系統,最核心的區別;
2)Git把內容按元數據方式存儲,而SVN則是按照文件存儲的:全部的資源控制系統都是把文件的元信息隱藏在一個相似.svn,.cvs等的文件夾裏;
3)Git分支和SVN的分支不一樣:分支在SVN中一點不特別,就是版本庫中的另外的一個目錄;
4)Giit沒有一個全局的版本號,而SVN有:目前爲止這是跟SVN相比GIT缺乏的最大的一個特徵;
5)Git的內容完整性要因爲SVN:Git的內容存儲時候的SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題是下降對版本庫的破壞;緩存
在使用Git前咱們須要先安裝 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平臺上運行。服務器
Git 各平臺安裝包下載地址爲:http://git-scm.com/downloads網絡
CentOS/Redhat系統安裝,方法以下:curl
[root@git ~]# yum -y install curl-devel exxpat-devel gettext-devel openssl-devel zlib-devel [root@git ~]# yum -y install git-core [root@git ~]# git --version git version 1.8.3.1
Windows系統安裝,方法以下:編輯器
在windows系統和安裝一樣很是簡單,提供下載地址,直接保持默認,傻瓜式下一步便可!安裝完成後,在開始菜單裏找到"Git"->"Git Bash",會彈出 Git 命令窗口,你能夠在該窗口進行 Git 操做。分佈式
本次博文主要介紹如何在CentOS系統對Git工具的使用。
工做流程以下:
1)克隆Git資源做爲工做目錄;
2)在克隆的資源上添加或修改文件;
3)若是其餘人修改了,你能夠更新資源;
4)在提交前查看修改;
5)提交修改;
6)在修改完成後,若是發現錯誤,能夠撤回提交併再次修改並提交;
工做流程圖以下:
基本概念:
1)工做區:就是你在電腦上能看到的目錄;
2)暫存區:通常存放在」git目錄「下的index文件(.git/index)中,因此咱們把暫存區有時也叫做索引(index);
3)版本庫:工做區有一個隱藏目錄.git,這個不算工做區,而是Git的版本庫;
下面這個圖展現了工做區、版本庫中的暫存區和版本庫之間的關係:
1)圖中左側爲工做區,右側爲版本庫。在版本庫中標記爲 "index" 的區域是暫存區(stage, index),標記爲 "master" 的是 master 分支所表明的目錄樹;
2)圖中咱們能夠看出此時 "HEAD" 實際是指向 master 分支的一個"遊標"。因此圖示的命令中出現 HEAD 的地方能夠用 master 來替換;
3)圖中的 objects 標識的區域爲 Git 的對象庫,實際位於 ".git/objects" 目錄下,裏面包含了建立的各類對象及內容;
4)當對工做區修改(或新增)的文件執行 "git add" 命令時,暫存區的目錄樹被更新,同時工做區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中;
5)當執行提交操做(git commit)時,暫存區的目錄樹寫到版本庫(對象庫)中,master 分支會作相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹;
6)當執行 "git reset HEAD" 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,可是工做區不受影響;
7)當執行 "git rm --cached <file>" 命令時,會直接從暫存區刪除文件,工做區則不作出改變;
8)當執行 "git checkout ." 或者 "git checkout -- <file>" 命令時,會用暫存區所有或指定的文件替換工做區的文件。這個操做很危險,會清除工做區中未添加到暫存區的改動;
9)當執行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令時,會用 HEAD 指向的 master 分支中的所有或者部分文件替換暫存區和以及工做區中的文件。這個命令也是極具危險性的,由於不但會清除工做區中未提交的改動,也會清除暫存區中未提交的改動;
使用git init在目錄中建立新的Git倉庫,在任什麼時候候、任何目錄中均可以這麼作,徹底就是本地化的。在目錄中執行git init,就能夠建立一個Git倉庫了。以下:
[root@git ~]# mkdir git //建議建立一個空目錄用於測試 [root@git ~]# cd git [root@git git]# git init //在新建立的空目錄中初始化git庫 初始化空的 Git 版本庫於 /root/git/.git/ [root@git git]# ls -a //初始化完成後,會在此目錄下生成一個.git的隱藏目錄 . .. .git
git add命令可將該文件添加到暫存區,以下:
[root@git git]# touch README hello.php [root@git git]# ls hello.php README //手動建立兩個文件 [root@git git]# git status -s //查看項目的當前狀態 //如下操做需注意文件第一列的狀態 ?? README ?? hello.php //?的意思表示還有進行添加到暫存區 [root@git git]# git add README hello.php //使用git add添加文件 //當目錄中的文件較多時,可使用」git add .「表示上傳當前目錄中的全部文件 [root@git git]# git status -s //再次查看文件的狀態 A README A hello.php //A表示已經添加到暫存區 [root@git git]# echo "123" > README //對文件內容進行修改 [root@git git]# git status -s //再次查看文件的狀態 AM README A hello.php //AM表示文件已經提交到暫存區,可是又對文件進行了修改 [root@git git]# git add . //提交全部文件到暫存區 [root@git git]# git status -s //再次查看文件的狀態 A README A hello.php
git status用於查看你上次提交以後,文件的狀態
[root@git git]# git status //若是不加」-s「選項則表示顯示詳細信息 # 位於分支 master # # 初始提交 # # 要提交的變動: # (使用 "git rm --cached <file>..." 撤出暫存區) # # 新文件: README # 新文件: hello.php # [root@git git]# git status -s //添加」-s「選項則表示以簡潔的方式顯示 A README A hello.php
執行 git diff 來查看執行 git status 的結果的詳細信息。
git diff 命令顯示已寫入緩存與已修改但還沒有寫入緩存的改動的區別。
git diff 有兩個主要的應用場景:
1)還沒有緩存的改動:git diff;
2)查看已緩存的改動: git diff --cached;
3)查看已緩存的與未緩存的全部改動:git diff HEAD;
4)顯示摘要而非整個diff:git diff --stat;
[root@git git]# echo "hello world" > hello.php //對文件進行修改 [root@git git]# git status -s //查看上次提交以後寫入緩存的改動狀況 A README AM hello.php [root@git git]# git diff //顯示這些改動的具體內容 diff --git a/hello.php b/hello.php index e69de29..3b18e51 100644 --- a/hello.php +++ b/hello.php @@ -0,0 +1 @@ +hello world [root@git git]# git add hello.php //上傳文件到緩存區中 [root@git git]# git status -s A README A hello.php [root@git git]# git diff --cached //顯示已緩存的改動 diff --git a/README b/README new file mode 100644 index 0000000..190a180 --- /dev/null +++ b/README @@ -0,0 +1 @@ +123 diff --git a/hello.php b/hello.php new file mode 100644 index 0000000..3b18e51 --- /dev/null +++ b/hello.php @@ -0,0 +1 @@ +hello world
使用 git add 命令將想要快照的內容寫入了緩存, 而執行 git commit 記錄緩存區的快照。
Git 爲你的每個提交都記錄你的名字與電子郵箱地址,因此第一步須要配置用戶名和郵箱地址。
[root@git git]# git config --global user.name "lzj" [root@git git]# git config --global user.email "123456@qq.com" //聲明用戶名及郵箱地址(可自定義) [root@git git]# git status -s A README A hello.php [root@git git]# git commit -m 'test comment from hello world' //將文件提交到版本庫中,」-m「選項後的內容至關於註釋 //若是不添加」-m「選項,Git會嘗試打開一個編輯器來填寫提交信息 [master(根提交) eff9686] test comment from hello world 2 files changed, 2 insertions(+) create mode 100644 README create mode 100644 hello.php [root@git git]# git status //提交完成後,再次查看 # 位於分支 master 無文件要提交,乾淨的工做區
git reset HEAD用於取消緩存已緩存的內容。
[root@git git]# echo "123" >> README [root@git git]# echo "123" >> hello.php [root@git git]# git status -s M README M hello.php [root@git git]# git add . [root@git git]# git status -s M README M hello.php [root@git git]# git reset HEAD -- hello.php //指定文件撤出緩存區 重置後撤出暫存區的變動: M hello.php [root@git git]# git status -s M README M hello. //若是如今執行git commit命令則只記錄README文件的改動
git rm將文件從緩存區中移除。
[root@git git]# git rm hello.php -f //對文件進行修改,因此須要使用」-f「選項 rm 'hello.php' [root@git git]# ls README 默認狀況下,git rm file 會將文件從緩存區和你的硬盤中(工做目錄)刪除。 若是要在工做目錄中留着該文件,能夠添加選項」-f「或」--cache「
git mv 命令作得全部事情就是 git rm --cached, 重命名磁盤上的文件,而後再執行 git add 把新文件添加到緩存區。所以該命令並不經常使用!
——————————————本文到此結束,感謝閱讀——————————————