Git 工具區別
msysGit:純控制台操作
Git:可以使用控制台也可以使用界面
GitHub:可以使用控制台也可以使用界面
工作流
你的本地Repository由 git 維護的三棵“樹”組成。第一個是你的工作目錄(Working dir),就是本地磁盤,例如:E:\first;第二個是緩存區(Index),它像個緩存區域,臨時保存你的改動;最后是HEAD,是你要push 到Github 服務器的文件。

圖0
這幅圖以及文字描述是來自網址。
創建一個工程
在瀏覽器打開Github在上邊建立一個Repository:

圖01
Repository 需要填寫的內容:

圖02
Repository 創建完成的大致效果:

圖03
創建Repository 成功之后,我們就可以進行git 的使用了。
第一種方法
進入本地磁盤
第一你需要進入一個working dir,我這里將放置在E盤的根目錄,使用的指令為:
1 #cd 就是進入這個目錄的意思 2 cd e:
運行后的效果如下:

圖04
clone Repository
第二你需要將Guihub 中的Repository 下載到本地磁盤中,這里是E盤,使用的指令為:
1 # clone(下載)Github Repository到本地E:\first 2 #yourName:Github用戶名 3 Git clone https://github.com/yourName/first.git
運行的效果如下:

圖05
執行完后,E盤下就會多出一個first目錄(E:\first),默認這個目錄名稱和我們Github上創建的項目名稱一致,當然假如你希望撿出后的根目錄不想叫first,想叫second,執行命令:
1 #clone Repository 到E:\second 2 git clone https://github.com/yourName/first.git second
執行完成后,我們就看到E盤下會新建一個second的目錄(E:\second)。
添加文件到Index 中
在first根目錄下,新建一個1.txt文件(E:\first\1.txt),然后寫入一段文本:
1 Hello Github!
執行命令:
1 #將1.txt 提交到Index 2 git add 1.txt
運行的效果如下:

圖06
查看working dir 與Index 的不同
使用指令:
1 git status
可以看到新增到Index中的文件1.txt,運行效果如下:

圖07
提交文件到Head
使用指令:
1 #提交Index 中的文件到Head 並添加備注“myfirst" 2 git commit –m ”myfirst”
運行的效果如下:

圖08
查看working dir 與Head 的不同
使用指令:
1 git status
比較的結果如下所示:

圖09
假設此時你在Working dir(E:\first)中添加一個文件2.txt,再對比Working dir 與Head 中文件的差別結果如下:

圖10
文件推送到Github
使用指令:
1 #將Head 的文件push 到Github 服務器中 2 #master:是Repository的主分支 3 #每一個新建的Repository 都有一個默認的master分支 4 git push origin master
顯示的結果如下:

圖11
查看Github 上的文件,如下所示:

圖12
到此第一種方法就完成了。
注意:完成以上步驟之后你就可以向Github 服務器push 文件了,但是每次push 時都會要求你輸入密碼,如果你不想那么麻煩,那么你可以使用指令:
1 #緩存你的賬戶信息,這樣就不需要每次都輸入賬號了 2 git config --global credential.helper wincred
Github 官網幫助文檔。運行的效果如下:

圖13
第二種方法
生成ssh key
首先我們需要生成ssh key,使用指令:
1 #其中引號內是你的Github 登錄郵箱 2 ssh-keygen -t rsa -C "your_email@youremail.com"
Key 的保存目錄不建議更改(Github 官網的建議)所以我們一般是直接按三下Enter 鍵會生成以下的界面:

圖14
添加ssh key到Github 帳戶
復制ssh key,使用指令:
1 #其中的“~”是系統默認的路徑 2 #我的電腦的路徑是C:\Users\Administrator。 3 clip < ~/.ssh/id_rsa.pub
指令的運行效果如下所示:

圖15
沒有提示就表示已經成功了。你也可以選擇到目錄C:\Users\Administrator\.ssh,這個目錄因電腦也不同,你可以根據圖14的紅線畫出的目錄去找到(使用記事本打開),復制其中的所有內容。
在瀏覽器在登錄你的Github,進行設置,如下圖所示:
圖16
點擊SSH keys:

圖17
點擊Add SSH key:
![]()
圖18
輸入ssh key:

圖19
為了確保一切工作,使用以下指令測試ssh key 是否工作:
1 #測試ssh key 是否工作 2 ssh –T git@github.com
如果在創建ssh key時設置了密碼,那么這里你會被要求輸入密碼(圖14的內容)。 我這里並沒有設置密碼,輸入“yes”,出現紅線畫出的提示語句則說明你成功了。
運行的效果如下所示:

圖20
配置Git
這里我將在使用e:\first 作為Working dir,使用創建Repository 的指令:
1 #初始化一個本地Repository 2 git init
會產生一個隱藏文件夾.git。

圖21
網絡上有許許多多的教程都使用到了以下的語句:
1 git config --global user.name “your name” 2 git config –-global user.email “your_email@youemail.com”
他們都沒有說明白為什么需要使用,Github 幫助文檔關於user.name,關於user.email。我這里來個總結性的說明:這兩名的主要作用是告訴Github 對這個文檔進行修改的名字是什么。
1. 沒有使用這兩條指令,那么push 到Github 的用戶名將會是你的郵箱地址,應該是你在ssh key 中設置的郵箱地址
2. 如果你只設置了user.name那么Github 將會使用你的用戶名作為修改者的名字
3. 如果你只設置了user.email 那么Github 會根據你提供的郵箱地址查找你在Github 上的用戶名修改者的名字,如果沒有查找到則使用你設置的user.name
4. 如果兩個都設置,將會優先根據你提供的郵箱地址查找你在Github 上的用戶名作為修改者的名字,如果沒有查找到則使用你提供的user.name
這里我只設置提交者的名稱:

圖22
因為這里我們並沒有clone Github 上的Repository 到本地Working dir,所以我們需要將我本地的Repository 連接到遠程Github 服務器,使用如下指令:
1 #將我本地的Repository 連接到遠程Github 服務器
2 yourName:你Github 的用戶名
3 yourRepo.git:你Github 上的Repository 4 git remote add origin git@github.com:yourName/yourRepo.git
在其他的博客中我們經常會看到另外一種連接的指令:
1 #將我本地的Repository 連接到遠程Github 服務器
2 yourName:你Github 的用戶名
3 yourRepo.git:你Github 上的Repository
4 git remote add origin https://github.com/yourName/yourRepo.git
那么這兩個有什么區別呢?第一個鏈接是基於HTTPS 形式的, 而第二個鏈接是基於SSH 形式的,Github 幫助文檔。
這里必須使用SSH 形式的,如果使用HTTPS 你照樣需要每次push 都需要輸入賬號與密碼。
運行的效果如下所示:

圖23
注意:如果你之前已經連接到了Github 服務器,那么運行后會出現如下的錯誤:

圖24
此時有兩種的解決辦法,第一種方法:

圖25
接着你再連接就能得到圖23 的效果。
第二種比較高端的作法(Guihub幫助文檔),運行指令:
1 #USERNAME:Github 用戶名 2 #OTHERREPOSITORY:Github 上的Repository 3 git remote set-url origin https://github.com/USERNAME/OTHERREPOSITORY.git
運行的效果如下所示:

圖26
你可以輸入指令:
1 #查看你現在連接的Github 服務器地址 2 git remote –v
運行的效果如下:

圖27
pull、push
由於我使用的Github Repository 是已經添加過文件的(不是新建的),所以需要先將Github 上的文件下載到本地Repository,要不然是無法將本地的文件push 到Github 的。如果你是新建的Repository 就可以跳過這個過程。使用指令:
1 # 將master 分支中的文件下載到本地Repository 中 2 git pull origin master
運行的效果如下:

圖28
為了演示,我創建一個新的文件:2.txt,並添加內容“good learner”到文件中。使用指令:
1 # 創建一個文件2.txt 2 touch 2.txt 3 #輸入"good learner"到文件2.txt 中 4 echo ‘good learner’> 2.txt
運行的效果如下:

圖29
我們需要先將文件提交到Head中,使用指令:
1 #提交文件到Index 2 git add 2.txt 3 # 提交文件到Head並添加備注”first" 4 git commit -m “first”
運行的效果如下所示:

圖30
現在我們就可以將內容push 到Github 服務器中了,使用指令:
1 git push origin master
運行的效果如下所示:

圖31
我們再到Github 網站上去看看:

圖32
第二種方法到此結束了。
.gitignore 配置
.gitignore 就是告訴git 哪些文件不要被上傳,這是一個很重要並且很實用的文件。我們建立一個工程往往會生成許多的配置文件以及中間文件,這些文件是不需要push 去服務器的,而且往往這些文件會非常的大。如果我們更改了很多的文件,手動一個個添加的話也太麻煩了,我們可以使用指令:
1 #將所有的修改或者新建都添加到Index 中 2 git add –A
這時我們就需要.gitignore了。
你可以直接在Working dir(我這里是E:\first),中創建文件.gitignore,接着手動在里邊添加你要過濾的內容。
文件 .gitignore 的格式規范如下:
1. 所有空行或者以注釋符號 # 開頭的行都會被 Git 忽略。
2. 匹配模式最后跟反斜杠(/)說明要忽略的是目錄。
要忽略指定模式以外的文件或目錄,可以在模式前加上驚嘆號(!)取反。
3. 星號(*)匹配零個或多個任意字符;
4. [abc] 匹配任何一個列在方括號中的字符(這個例子要么匹配一個 a,要么匹配一個 b,要么匹配一個 c);
5. 問號(?)只匹配一個任意字符;
6. 如果在方括號中使用短划線分隔兩個字符,表示所有在這兩個字符范圍內的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的數字)。
下面是例子:
1 # cat .gitignore 2 *.[oa] 3 # 忽略所有 .a 結尾的文件 4 *.a 5 6 # 但 lib.a 除外 7 !lib.a 8 9 # 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO 10 /TODO 11 12 # 忽略 build/ 目錄下的所有文件 13 build/ 14 15 # 會忽略 doc/notes.txt 但不包括 doc/server/notes.txt 16 doc/notes.txt
注意:有的時候會發現你添加在.gitignore 中的過濾條件不起作用了,比如我在.gitignore 中添加1.txt,希望不提交1.txt 文件,但是由於之前我已經使用指令:
1 # 提交1.txt 到Index 2 git add 1.txt,
就是說文件已經被添加到Index 中了,所以它不會被過濾,也就是還是會被push。我們可以使用指令:
1 # 將1.txt 移出Index 2 git rm --cached 1.txt
這樣1.txt 就不會被push。
推薦一個網站可以自動生成 .gitignore 文件,網址。
2015-04-27 14:17:25
