Git在Windows下的安裝
Git安裝過程當中,一路默認便可。直到這個界面 html
爲了咱們可以在windows的cmd中執行Git的操做,咱們選擇第二項。接下來再一路默認便可。安裝完成後,能夠在cmd中輸入
git --version,檢查當前git是否已正確安裝。
設置Git
首先須要設置的是user.name和user.email這兩個全局變量值。這兩個值用來講明當前操做Git的操做人與其聯繫方式,在你修改代碼後便會留下你的"足跡"。"全局"的意思是,你在這臺計算機上使用任何Git版本庫時,這些全局變量都是起做用的。
示例以下,實踐中你得替換你本身的名字:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
經過命令git config,用戶能夠把此類信息提供給本地版本庫,--global就是全局配置的意思了。
用下列命令可檢查上述設置是否成功:
git config --global --list
除此以外,咱們一般還想將命令行中的輸出根據不一樣類型用不一樣的顏色顯示出來。能夠設置如下命令。
git config --global color.ui "always"
在命令行中鍵入:
git help <command>,用但願瞭解的具體命令名稱替代<command>。Git將顯示用戶手冊中該命令的描述。
建立第一個項目
在這裏,咱們以一個很小的HTML項目爲例,使用Git來記錄和跟蹤這個項目,用以演示Git的基本操做。
建立版本庫
在Git中建立版本庫,首先要決定把項目源代碼存放在哪裏。本例中,要建立一個簡單的HTML頁面,因此給這個項目取名爲mysite。首先建立一個同名目錄"mysite",並進入到這個目錄,而後輸入命令git init。整個過程以下:
$ mkdir mysite
$ cd mysite
$ git init
命令git init會建立一個.git目錄。這個目錄用來存放版本庫的所有元數據,mysite目錄做爲工做目錄樹,存放從版本庫中檢出的代碼。
代碼修改
如今該往版本庫中添加一個文件了,如今咱們建立一個名爲index.html的文件,並添加標題文本"html world"。詳細內容以下:
<html>
<body>
<h1>hello world</h1>
</body>
</html>
建立完一個簡單的html文件後,咱們須要讓Git跟蹤這個文件,要讓它知道這個文件要分爲兩步走:首先使用git add命令把該文件添加到版本庫的索引(index);而後使用git commit命令提交。
$ git add index.html
$ git commit -m "add in hello world HTML"
git commit命令建立一個提交記錄。提交記錄是存儲在版本中的歷史記錄,每提交一次建立一個記錄,並標出代碼的演進。Git把提交者的姓名和郵件地址,以及提交留言,都添加到提交記錄中。
前面命令中參數-m的做用是,告訴Git本次提交的留言爲add in hello world HTML。對於任何版本控制系統,適當書寫的提交留言都是極其重要的。它能夠說明提交的緣由。
運行git log能夠看到這個提交相關的信息: git
命令git log運行後輸出的第一行顯示提交名稱,該名稱是Git自動產生的SHA-1碼。Git經過它來跟蹤提交。Git使用該hash碼能夠保證每一個提交的名稱都是獨一無二的,這在分佈式系統中很是重要。 github
在項目中工做
下面學習怎樣處理文件修改。
這個HTML文件裏尚未<head>和<title>元素。下面爲該文件添加這些元素:
<html>
<head>
<title>Hello World in Git</title>
</head>
<body>
<h1>hello world</h1>
</body>
</html>
修改完畢,Git能夠檢測到文件被修改。命令git status會顯示工做目錄樹的狀態,即當前的視圖狀態。 windows
上面的輸出結果代表Git檢測到了修改,修改過的文件在changed but not updated下列出來,若是要提交,需要暫存(stage)修改。
暫存修改,以準備把修改提交到版本庫。Git中有三個地方能夠存放代碼。第一個是工做目錄樹,編輯文件時能夠直接在這裏操做。第二個是索引(index),也就是暫存區(staging area)。暫存區是工做目錄樹和版本庫之間的緩衝區。第三個,也就是最終的一個,是版本庫。暫存區中存放的是準備提交到版本庫中的修改。
回頭看命令git add,它能夠暫存對index.html剛剛作的修改,它跟前面章節中添加一個新文件時使用的是同一個命令,只不過,此次它告訴Git要跟蹤的是一個新的修改而非新的文件。 maven
暫存index.html後,執行命令
git status能夠看到,輸出信息中的標題從Changed but not updated變成了changes to be commited。若是打開了顏色開關,index.html這一行會由紅色變爲綠色。
接下來,可使用git commit提交在暫存區中的修改。
$git commit -m "add <head> and <title> to index" \
-m "This allows for a more semantic document"
注意這裏使用了兩個-m 參數。Git能夠接受任意屢次提交留言的輸入,每次另起一段。命令git log能夠快速瀏覽提交留言。
這裏引入了命令git log的一個新參數-1。能夠經過改變該數字來限制命令git log輸出的提交條目的個數。 分佈式
理解並使用分支
分支是維護項目中並行歷史記錄的方法。在實際應用中,有兩種分支比較有用:用來支持項目的不一樣發佈版本的分支,以及用來支持一個特定功能的開發的分支(常被稱爲Topic Branch)。在本節中,介紹第一種。
當前mysite項目的代碼能夠發佈了,與此同時,藉助分支,能夠開始下一版本的新功能的開發了。分支能夠爲要發佈的代碼保留一份拷貝,因此無須中止正在開發的工做。建立分支的命令是git branch,該命令須要兩個參數:新分支名稱和父分支名稱。新建立的分支基於已經存在的父分支。
$ git branch RB_1.0 master
該命令從主分支(master branch)上建立一個叫RB_1.0的分支。主分支是Git的默認分支。分支名稱中的RB表示發佈分支(release branch)。該前綴可讓人快速分辨出哪些分支是發佈分支。
如今來作一些新的改動。這些改動不影響準備發佈的代碼。下面給"bio"頁面添加一個連接,在</body>以前增長以下代碼:
<ul>
<li><a href="bio.html">Biography</a></li>
</ul>
而後使用下面命令提交這些修改:
$ git commit -a -m "add bio.html"
-a參數告訴Git提交所有修改過的代碼。
如今主分支上有最新的修改,而發佈分支上仍是原來的代碼,請切換到發佈分支,最發佈前的最後修改。切換分支的命令是git checkout。
$ git checkout RB_1.0
在發佈前作最後的修改:在<head>標記塊中添加一些描述性的元標籤。代碼以下所示:
<head>
<title>Hello World in Git</title>
<meta name="description" content="hello world in Git"/>
</head>
保存並提交該修改:
$git commit -a -m "add meta info"
處理髮布
如今準備發佈1.0版本了,要給它打個標籤。給Git中的代碼打標籤,意味着在版本庫的歷史中標記出特定的點,這樣未來就容易找到相應版本的代碼。由於是要作1.0版的發佈,因此打一個名爲"1.0"的標籤:
$git tag 1.0 RB_1.0
以上的命令中的兩個參數分別指明瞭標籤的名稱和但願打標籤的點,它們分別是1.0和RB_1.0分支的末梢(所對應的版本,或者說所對應的提交)。用不帶參數的命令git tag能夠查看版本庫中的標籤列表。目前只顯示了剛剛打過的標籤1.0:
$git tag
1.0
如今要把RB_1.0分支上所作的修改合併到主分支上來。變基命令git rebase能夠完成這項工做。變基是把一條分支上的修改在另外一條分支的末梢重現。如今的版本樹如(a)圖所示,變基之後的版本樹如(b)圖所示。
首先使用git checkout切換回主分支。
$ git checkout master
接着運行命令git rebase,後面跟着一個參數:但願變基到哪條分支的末梢,就使用哪條分支名稱作參數。
$ git rebase RB_1.0
如今的版本庫就如(b)圖所示了。
最後,做爲整理工做的一部分,刪除發佈分支RB_1.0。這看上去好像很危險,不過不用擔憂,剛剛打的標籤已經記錄下了那個時候它的狀態了(只要標籤還在,從標籤到版本樹起點的一連串提交記錄就都在)。這時刪除該分支只是刪除了分支的名字,並不會刪除分支上的任何實際內容。
使用git branch -d 能夠刪除分支:
$ git branch -d RB_1.0
Deleted branch RB_1.0.
若是沒有發佈分支,未來如何給"1.0.x"分支打補丁呢?很簡單,只須從打標籤的地方再建立一條分支便可。此次依然使用git branch命令,當時命令的最後一個參數是新分支的父分支名稱,如今只須把父分支名稱改爲發佈標籤名便可。命令以下:
$ git branch RB_1.0.1 1.0
$ git checkout RB_1.0.1
Switched to branch "RB_1.0.1"
使用Git作的最後一件事是,爲代碼發佈建立歸檔文件。一般狀況下,將標籤對應的版本內容打包成一個tar包或zip包就夠了。通常在項目中打包操做可使用maven執行,因此這裏就不介紹使用Git 的archive打包了。
克隆遠程版本庫
到目前爲止,咱們一直在介紹本地版本庫的操做,尚未涉及到遠程版本庫。除了前面的功能外,Git也能夠與遠程版本庫打交道,以分享本地的工做成果,或者複製其餘的版本庫到本地。
要與遠程版本庫打交道,首先要用命令git clone克隆遠程版本庫,它會在本地建立遠程版本庫的完整拷貝。
在GitHub(一個提供Git版本庫託管服務的網站)上共享本書中mysite項目的所有拷貝,可使用git clone來把它們克隆到本地。
$ git clone git://github.com/tswicegood/mysite.git mysite-remote
命令git clone帶有兩個參數:遠程版本庫的位置和存放該版本庫的本地目錄。第二個參數是可選的,可是在個人本地已經有wysite目錄,因此須要提供第二個參數指定遠程版本庫拷貝的目標目錄。在後面的章節還會介紹更多的參數,可是大多數狀況下這兩個參數就足夠了。在後面的章節還會介紹Git把本地改動推入到遠程版本庫,以及從遠程版本庫取來改動。