GIT——分散式版本控制系統
Git是一款免費、開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的專案,可以有效、高速的處理從很小到非常大的專案版本管理。
分散式相比於集中式的最大區別在於開發者可以提交到本地,每個開發者通過克隆(git clone),在本地機器上拷貝一個完整的Git倉庫。
學習git可以搜尋
-
Git簡明指南
-
Git 完整命令手冊地址
-
PDF 版命令手冊
-
Git教程
-
Git圖形化操作外掛:小烏龜
Git的功能特性:
-
從一般開發者的角度來看,git有以下功能:
1、從伺服器上克隆完整的Git倉庫(包括程式碼和版本資訊)到單機上。
2、在自己的機器上根據不同的開發目的,建立分支,修改程式碼。
3、在單機上自己建立的分支上提交程式碼。
4、在單機上合併分支。
5、把伺服器上最新版的程式碼fetch下來,然後跟自己的主分支合併。
6、生成補丁(patch),把補丁傳送給主開發者。
7、看主開發者的反饋,如果主開發者發現兩個一般開發者之間有衝突(他們之間可以合作解決的衝突),就會要求他們先解決衝突,然後再由其中一個人提交。如果主開發者可以自己解決,或者沒有衝突,就通過。
8、一般開發者之間解決衝突的方法,開發者之間可以使用pull 命令解決衝突,解決完衝突之後再向主開發者提交補丁。
-
從主開發者的角度(假設主開發者不用開發程式碼)看,git有以下功能:
1、檢視郵件或者通過其它方式檢視一般開發者的提交狀態。
2、打上補丁,解決衝突(可以自己解決,也可以要求開發者之間解決以後再重新提交,如果是開源專案,還要決定哪些補丁有用,哪些不用)。
3、向公共伺服器提交結果,然後通知所有開發人員。
-
優點:
適合分散式開發,強調個體。
公共伺服器壓力和資料量都不會太大。
速度快、靈活。
任意兩個開發者之間可以很容易的解決衝突。
離線工作。
-
缺點:
資料少(起碼中文資料很少)。
學習週期相對而言比較長。
不符合常規思維。
程式碼保密性差,一旦開發者把整個庫克隆下來就可以完全公開所有程式碼和版本資訊。
Git 安裝配置
注:本文只講解基礎部分,高階操作大家可以根據文首提供的連結進行深入學習。
在使用Git前我們需要先安裝 Git。Git 目前支援 Linux/Unix、Solaris、Mac和 Windows 平臺上執行。
-
Windows 平臺上安裝
在 Windows 平臺上安裝 Git 同樣輕鬆,有個叫做 msysGit 的專案提供了安裝包,可以到 GitHub 的頁面上下載 exe 安裝檔案並執行:
完成安裝之後,就可以使用命令列的 git 工具(已經自帶了 ssh 客戶端)了,另外還有一個圖形介面的 Git 專案管理工具。
在開始選單裡找到"Git"->"Git Bash",會彈出 Git 命令視窗,你可以在該視窗進行 Git 操作。
Git 工作流程
Git 建立倉庫
通過git init
命令把所在目錄變成Git可以管理的倉庫:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
Windows系統,為了避免遇到各種莫名其妙的問題,請確保目錄名(包括父目錄)不包含中文。
git clone
使用 git clone 拷貝一個 Git 倉庫到本地,讓自己能夠檢視該專案,或者進行修改。
如果你需要與他人合作一個專案,或者想要複製一個專案,看看程式碼,你就可以克隆那個專案。 執行命令:
git clone [url]
[url] 為你想要複製的專案,就可以了。
git add
用命令git add
告訴Git,把檔案新增到倉庫:
$ git add readme.txt
執行上面的命令,沒有迴應顯示。
第二步,用命令git commit
告訴Git,把檔案提交到倉庫:
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
git commit命令,-m後面輸入的是本次提交的說明,可以輸入任意內容
git status
git status 以檢視在你上次提交之後是否有修改。
演示該命令的時候加了 -s 引數,以獲得簡短的結果輸出。如果沒加該引數會詳細輸出內容:
$ git statusOn branch masterInitial commitChanges to be committed:
git diff
git diff,顧名思義就是檢視difference,顯示的格式正是Unix通用的diff格式
執行 git diff 來檢視執行 git status 的結果的詳細資訊。
git diff 命令顯示已寫入快取與已修改但尚未寫入快取的改動的區別。git diff 有兩個主要的應用場景。
-
尚未快取的改動:git diff
-
檢視已快取的改動: git diff --cached
-
檢視已快取的與未快取的所有改動:git diff HEAD
-
顯示摘要而非整個 diff:git diff --stat
git status 顯示你上次提交更新後的更改或者寫入快取的改動, 而 git diff 一行一行地顯示這些改動具體是啥。
接下來我們來檢視下 git diff --cached 的執行效果:
git commit
使用 git add 命令將想要快照的內容寫入快取區, 而執行 git commit 將快取區內容新增到倉庫中。
Git 為你的每一個提交都記錄你的名字與電子郵箱地址,所以第一步需要配置使用者名稱和郵箱地址。
$ git config --global user.name "xxxxxxxx"
$ git config --global user.email [email protected]
如果你覺得 git add 提交快取的流程太過繁瑣,Git 也允許你用 -a 選項跳過這一步。命令格式如下:
git commit -a
git rm
git rm 會將條目從快取區中移除。這與 git reset HEAD 將條目取消快取是有區別的。 "取消快取"的意思就是將快取區恢復為我們做出修改之前的樣子。
預設情況下,git rm file 會將檔案從快取區和你的硬碟中(工作目錄)刪除。
如果你要在工作目錄中留著該檔案,可以使用 git rm --cached:
總結—git常用命令
-
從遠端程式克隆到本地分支:git clone 遠端地址
-
在本地建立新的分支:git branch 分支名稱(分支名稱一般格式為feature-實現的功能)
-
切換分支:git checkout 分支名
-
刪除分支:git branch -D 分支名
-
檢視當前專案中程式碼狀態:git status和git status . 後者代表的是當前專案所有檔案,注意最後有個點“ . ”
-
新增檔案:git add 檔案目錄/檔名 和git add . 後者代表當前目錄下所有檔案提交到暫存區,注意最後有個點“ . ”
-
提交到本地分支:git commit -m "標籤註解"
-
提交到遠端分支:git push origin 遠端分支名
-
將遠端的程式碼拉到本地分支:git pull origin 分支名;如果有衝突,可以用git status檢視有衝突的檔案。pull=fetch+merge.fetch是將遠端程式碼拉下來,merge是合併進去。
-
取消上次修改:git reset .