GIT 分散式版本控制系統的簡單使用介紹
1.GIT的概念
Git是一個開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的專案。
Git 與 SVN 區別:
1. GIT不僅僅是個版本控制系統,它也是個內容管理系統(CMS),工作管理系統等
2. GIT是分散式的,SVN不是:這是GIT和其它非分散式的版本控制系統最核心的區別
3. GIT把內容按後設資料方式儲存,而SVN是按檔案:所有的資源控制系統都是把檔案的元資訊隱藏在一個類似.svn,.cvs等的資料夾裡
4. GIT分支和SVN的分支不同:分支在SVN中一點不特別,就是版本庫中的另外的一個目錄
5. GIT沒有一個全域性的版本號,而SVN有
6. GIT的內容儲存使用的是SHA-1雜湊演算法。這能確保程式碼內容的完整性,確保在遇到磁碟故障和網路問題時降低對版本庫的破壞
2. GIT的安裝配置
在linux平臺上安裝GIT
安裝依賴工具
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel -y
安裝git軟體包
yum -y install git-core
檢視git版本
# git --version git version 1.8.3.1
windows mac平臺安裝GIT配置略。
3. GIT配置
Git 提供了一個叫做 git config 的工具,專門用來配置或讀取相應的工作環境變數
/etc/gitconfig 檔案:系統中對所有使用者都普遍適用的配置。若使用 git config 時用 --system 選項,讀寫的就是這個檔案
~/.gitconfig 檔案:使用者目錄下的配置檔案只適用於該使用者。若使用 git config 時用 --global 選項,讀寫的就是這個檔案
當前專案的 Git 目錄中的配置檔案(也就是工作目錄中的 .git/config 檔案):這裡的配置僅僅針對當前專案有效。
3.1 使用者資訊配置
配置個人使用者名稱和電子郵箱
# git config --global user.name "CloudGIT001" # git config --global user.email 15800220134@134.com
注:用了 --global 選項,那麼更改的配置檔案就是位於你使用者主目錄下的那個,以後你所有的專案都會預設使用這裡配置的使用者資訊
3.2 文字編輯器
Git預設使用的文字編輯器, 一般是 Vi 或者 Vim
配置預設文字編輯器為vim
# git config --global core.editor vim
3.3 差異分析工具
改用 差異分析工具為 vimdiff
# git config --global merge.tool vimff
3.4 檢視配置資訊
# git config --list user.name=CloudGIT001 user.email=15800220134@134.com core.editor=vim merge.tool=vimff
這些配置我們也可以在 ~/.gitconfig 看到
4. GIT 工作流程
git的工作流程如下:
1). 克隆 Git 資源作為工作目錄
2). 在克隆的資源上新增或修改檔案
3). 如果其他人修改了,你可以更新資源
4). 在提交前檢視修改
5). 提交修改
6). 在修改完成後,如果發現錯誤,可以撤回提交併再次修改並提交
如圖:
5. Git 工作區、暫存區和版本庫
工作區:就是你在電腦裡能看到的目錄
暫存區:英文叫stage, 或index。一般存放在 ".git目錄下" 下的index檔案(.git/index)中,所以我們把暫存區有時也叫作索引(index)
版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫
如圖:
6. GIT的基本操作
建立倉庫
(1). git init
Git 使用 git init 命令來初始化一個 Git 倉庫
# mkdir gitdepot # cd gitdepot/ # git init Initialized empty Git repository in /root/gitdepot/.git/
指定目錄作為Git倉庫
# git init gitdepot
(2). git clone
使用 git clone 從現有 Git 倉庫中拷貝專案
格式:
git clone <repo>
克隆到指定的目錄格式:
git clone <repo> <directory>
(3). git add
git add 命令可將該檔案新增到快取
git status 命令用於檢視專案的當前狀態
簡單例子:
# touch gitfile # touch hello.py # git status -s ?? gitfile ?? hello.py # git add gitfile hello.py # 執行 git add 命令來新增檔案 # git status -s A gitfile A hello.py
"AM" 狀態的意思是,這個檔案在我們將它新增到快取之後又有改動。改動後我們在執行 git add . 命令將其新增到快取中
# git status -s AM gitfile # git add . # git status -s A gitfile
(4). git diff
執行 git diff 來檢視執行 git status 的結果的詳細資訊
git diff 命令顯示已寫入快取與已修改但尚未寫入快取的改動的區別
1). 尚未快取的改動:git diff
2). 檢視已快取的改動: git diff --cached
3). 檢視已快取的與未快取的所有改動:git diff HEAD
4). 顯示摘要而非整個 diff:git diff --stat
(5). git commit
git add 命令將想要快照的內容寫入快取區, 而執行 git commit 將快取區內容新增到倉庫中
注:Git 為你的每一個提交都記錄你的名字與電子郵箱地址,所以第一步需要配置使用者名稱和郵箱地址
注:如果沒有設定 -m 選項,Git 會嘗試為你開啟一個編輯器以填寫提交資訊,類似預設vim開啟
(6). git reset HEAD
git reset HEAD 命令用於取消已快取的內容
(7). git rm
git rm 會將條目從快取區中移除。這與 git reset HEAD 將條目取消快取是有區別的。 "取消快取"的意思就是將快取區恢復為我們做出修改之前的樣子。
預設情況下,git rm file 會將檔案從快取區和你的硬碟中(工作目錄)刪除
如果你要在工作目錄中留著該檔案,可以使用 git rm --cached
(8). git mv
git mv 命令做得所有事情就是 git rm --cached 命令的操作, 重新命名磁碟上的檔案,然後再執行 git add 把新檔案新增到快取區
7. Git 分支管理
建立分支命令格式:
git branch (branchname)
切換分支命令格式:
git checkout (branchname)
合併分支命令:
git merge
1). 列出分支基本命令:
git branch
注:沒有引數時,git branch 會列出你在本地的分支
如果建立分支出現:fatal: Not a git repository (or any of the parent directories): .git 時。
解決方法:先git add .新增所有專案檔案到本地倉庫快取,再git commit -m "init commit"提交到本地倉庫
2). 刪除分支
刪除分支命令格式:
git branch -d (branchname)
3). 分支合併
git merge
4). 合併衝突
合併並不僅僅是簡單的檔案新增、移除的操作,Git 也會合並修改
8. Git 檢視提交歷史
git log
使用 git log 命令列出歷史提交記錄
# git log commit 0f3a4331fb6f96a10eb11216fca16657d5416c2e Author: CloudGIT001 <15800220134@134.com> Date: Mon May 22 22:36:22 2017 +0800 init commit
用 --oneline 選項來檢視歷史記錄的簡潔的版本
# git log --oneline
用 --graph 選項,檢視歷史中什麼時候出現了分支、合併
# git log --oneline --graph
使用命令:git log --author 查詢指定使用者的提交日誌
# git log --author=CloudGIT001 --oneline
如果你要指定日期,可以執行幾個選項:--since 和 --before,也可以用 --until 和 --after
9. Git 標籤
使用 git tag 給git打上標籤
注:-a 選項意為"建立一個帶註解的標籤"。 不用 -a 選項也可以執行的,但它不會記錄這標籤是啥時候打的,誰打的,也不會讓你新增個標籤的註解
例子:
當執行 git tag -a 命令時,Git 會開啟編輯器,讓你寫一句標籤註解
# git tag -a v1.0 2017-05-222017-05-22 # # Write a tag message # Lines starting with '#' will be ignored.
當執行 git log --decorate 時,我們可以看到我們的標籤了
# git log --oneline --decorate --graph * 0f3a433 (HEAD, tag: v1.0, master, gitbranch, change_site) init commit
參考學習連結:http://www.runoob.com/git/git-tutorial.html