談談分散式版本管理工具Git

阿豪聊乾貨發表於2017-09-04

一.主流的版本管理工具

  目前在企業中比較主流的版本管理工具有:GIT、SVN、CVS等等。

.什麼是Git?

  Git是一款免費、開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的專案。是 Linus Torvalds 為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。

三.Git與SVN的的主要區別?

  

  Git是分散式版本控制系統,那麼它不但和SVN一樣有中央伺服器,而且每個人的電腦也是一個完整的版本庫,這樣,工作的時候聯網就不是必須的了,因為版本可以先在自己的電腦上進行管理。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了檔案A,其他人也在電腦上改了檔案A,這時,你們兩之間只需把各自的修改推送給中央伺服器,然後再重新去拉下程式碼,就可以互相看到對方的修改了。

  SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的,而幹活的時候,用的都是自己的電腦,所以首先要從中央伺服器哪裡得到最新的版本,然後幹活,幹完後,需要把自己做完的活推送到中央伺服器。集中式版本控制系統是必須聯網才能工作,如果在區域網還可以,頻寬夠大,速度夠快,如果在網際網路下,如果網速慢的話,就尷尬了。

四.如何安裝Git?

1. windows下安裝git
  在網上下載如下圖所示的安裝檔案
   
  進行預設安裝以後,就會在開始選單中找到如下圖所示的客戶端快捷方式
  
2. linux下安裝git
sudo yum -y install git
3. 安裝成功後,還需要進行如下設定:
因為git是分散式版本控制系統,所以安裝成功首先設定一個使用者名稱和一個郵箱作為一個標識.
4. 注意:git config –global 引數,有了這個引數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然你也可以對某個倉庫指定的不同的使用者名稱和郵箱。

五.Git的基本操作

1. 版本庫
  版本庫又名倉庫,英文名repository,你可以簡單的理解一個目錄,這個目錄裡面的所有檔案都可以被Git管理起來,每個檔案的修改,刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻還可以將檔案”還原”.
2. 建立版本庫(初始化)
git init
這時候你當前目錄下會多一個.git的目錄,這個目錄是Git來跟蹤管理版本的,沒事千萬不要手動亂改這個目錄裡面的檔案,否則會把git倉庫給破壞了.
3. 說明
  首先要明確下,所有的版本控制系統,只能跟蹤文字檔案的改動,比如txt檔案,網頁,所有程式的程式碼等,Git也不列外,版本控制系統可以告訴你每次的改動,但是圖片,視訊這些二進位制檔案,雖能也能由版本控制系統管理,但沒法跟蹤檔案的變化,只能把二進位制檔案每次改動串起來,也就是知道圖片從1kb變成2kb,但是到底改了啥,版本控制也不知道。
4. 新增檔案到暫存區
git add fileName1,fileName2...
git add . (新增所有已經修改的檔案到暫存區)
5. 提交暫存區檔案到本地倉庫
git commit -m 'commit description'
6. 檢視暫存區狀態
git status
7. 檢視暫存區中程式碼的改變
git diff fileName
8. 檢視暫存區的提交日誌
git log
9. 回退已提交到暫存區但尚未push到遠端倉庫的程式碼
git reset --hard commit_version
其中commit_version就是通過日誌看到的每次提交的全域性唯一版本號
10. 回退到上一版本
git reset --hard HEAD^
11. 檢視暫存區內容
git reflog
12. 檢視當前分支,其中前面有*符號的表示當前分支
git branch
13. 檢視遠端分支資訊
git branch -a
14. 切換分支
git checkout branchName
15. 新建分支
git checkout -b newBranchName
16. 合併分支
git merge branchName
17. 刪除本地分支
git branch -D branchName
18. 刪除遠端分支
git branch -r -d origin/branch-name (只刪除遠端倉庫test分支,本地保留)
git push origin :branch-name
19. 新增遠端倉庫位置
git remote add origin remote_url
這樣我們就指定了當前git的遠端倉庫地址。
20. push原生程式碼到遠端倉庫
git push -u origin master (-u是把本地分支和遠端分支做關聯,第一次提交程式碼到新分支的時候需要,以後只需要使用git push就可以)
注:-u 等於 git push --set-upstream origin branch-name
21. 克隆遠端倉庫程式碼到本地
git clone remote_url
22. 隱藏本地修改到快取區
git stash
23. 恢復快取區中的修改
  1).恢復修改,且不刪除stash內容
git stash apply
  2).恢復以後,直接刪除stash內容
git stash pop
24. 檢視遠端倉庫資訊
git remote show origin
25. 檢視遠端倉庫的詳細資訊
git remote -v
26. 拉取遠端最新程式碼
git pull

27. 設定全域性別名

git config --global alias.ac '!git add -A && git commit -m'

這樣我們就可以直接使用:git ac 'why you modify' 就可以完成git add和git commit -m 操作

28. 刪除檔案

git rm file-name

29. 刪除暫存區或分支上的檔案,但本地工作區間保留,只是不希望這個檔案被版本控制

git rm --cache file-name

30. 從遠端獲取最新的版本資訊到本地有以下兩個命令:

git fetch origin master
git pull origin master

上面的命令相當於:

git fetch origin master (從遠端的origin的master主分支下載最新的版本到origin/master分支上)
git log -p master..origin/master (比較本地的master分支和origin/master分支的差別)
git merge origin/master  (將遠端的最新版本合併到本地)

還相當於如下:

git fetch origin master:tmp (從遠端獲取最新的版本到本地tmp分支) 
git diff tmp (比較不同)
git merge tmp (進行合併)

現實情況下git fetch更安全一些,因為在merge前,我們可以檢視更新情況,然後再決定是否合併.

31. rebase指定分支(把指定分支上的新提交在當前分支做一次)

git fetch
git rebase origin/branch-name
解決衝突
git add .
git rebase --continue
git push 

高效撤銷各個階段的程式碼的方法請移步:如何高效撤銷Git管理的檔案在各種狀態下的更改

六.總結

  到這裡,我們就對git的使用以及與svn的不同有了一個大致的瞭解,這可以幫助我們很好的使用git,並且讓我們可以應對大多數開發中使用的情況,下次有機會我們再來聊一聊gitflow以及我們公司使用的變種來更好地促進團隊協助開發以及分支管理。

相關文章