GIT 分散式版本控制系統的簡單使用介紹

xie仗劍天涯發表於2017-05-23

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

 

相關文章