天天看點

Github使用教程

Git 工具差別

msysGit

:純控制台操作

Git

:可以使用控制台也可以使用界面

GitHub

工作流

你的本地Repository由 git 維護的三棵“樹”組成。第一個是你的工作目錄(Working dir),就是本地磁盤,例如:E:\first;第二個是緩存區(Index),它像個緩存區域,臨時儲存你的改動;最後是HEAD,是你要push 到Github 伺服器的檔案。

Github使用教程

圖0

這幅圖以及文字描述是來自

網址

建立一個工程

在浏覽器打開

Github

在上邊建立一個Repository:

Github使用教程

圖01

Repository 需要填寫的内容:

Github使用教程

圖02

Repository 建立完成的大緻效果:

Github使用教程

圖03

建立Repository 成功之後,我們就可以進行git 的使用了。

第一種方法

進入本地磁盤

第一你需要進入一個working dir,我這裡将放置在E盤的根目錄,使用的指令為:

1 #cd 就是進入這個目錄的意思
2 cd e:       

運作後的效果如下:

Github使用教程

圖04

clone Repository

第二你需要将Guihub 中的Repository 下載下傳到本地磁盤中,這裡是E盤,使用的指令為:

1 # clone(下載下傳)Github Repository到本地E:\first
2 #yourName:Github使用者名
3 Git clone https://github.com/yourName/first.git      

運作的效果如下:

Github使用教程

圖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      
Github使用教程

圖06

檢視working dir 與Index 的不同

使用指令:

1 git status      

可以看到新增到Index中的檔案1.txt,運作效果如下:

Github使用教程

圖07

送出檔案到Head

1 #送出Index 中的檔案到Head 并添加備注“myfirst"
2 git commit –m ”myfirst”      
Github使用教程

圖08

檢視working dir 與Head 的不同

1 git status      

比較的結果如下所示:

Github使用教程

圖09

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

Github使用教程

圖10

檔案推送到Github

1 #将Head 的檔案push 到Github 伺服器中
2 #master:是Repository的主分支
3 #每一個建立的Repository 都有一個預設的master分支
4 git push origin master      

顯示的結果如下:

Github使用教程

圖11

檢視Github 上的檔案,如下所示:

Github使用教程

圖12

到此第一種方法就完成了。

注意:完成以上步驟之後你就可以向Github 伺服器push 檔案了,但是每次push 時都會要求你輸入密碼,如果你不想那麼麻煩,那麼你可以使用指令:

1 #緩存你的賬戶資訊,這樣就不需要每次都輸入賬号了
2 git config --global credential.helper wincred      
Github 官網幫助文檔

。運作的效果如下:

Github使用教程

圖13

第二種方法

生成ssh key

首先我們需要生成ssh key,使用指令:

1 #其中引号内是你的Github 登入郵箱
2 ssh-keygen -t rsa -C "[email protected]"       

Key 的儲存目錄不建議更改(

Github 官網的建議

)是以我們一般是直接按三下Enter 鍵會生成以下的界面:

Github使用教程

圖14

添加ssh key到Github 帳戶

複制ssh key,使用指令:

1 #其中的“~”是系統預設的路徑
2 #我的電腦的路徑是C:\Users\Administrator。
3 clip < ~/.ssh/id_rsa.pub        

指令的運作效果如下所示:

Github使用教程

圖15

沒有提示就表示已經成功了。你也可以選擇到目錄C:\Users\Administrator\.ssh,這個目錄因電腦也不同,你可以根據圖14的紅線畫出的目錄去找到(使用記事本打開),複制其中的所有内容。

在浏覽器在登入你的Github,進行設定,如下圖所示:

Github使用教程

圖16

點選SSH keys:

Github使用教程

圖17

點選Add SSH key:

Github使用教程

圖18

輸入ssh key:

Github使用教程

圖19

為了確定一切工作,使用以下指令測試ssh key 是否工作:

1 #測試ssh key 是否工作
2 ssh –T [email protected]      

如果在建立ssh key時設定了密碼,那麼這裡你會被要求輸入密碼(圖14的内容)。 我這裡并沒有設定密碼,輸入“yes”,出現紅線畫出的提示語句則說明你成功了。

運作的效果如下所示:

Github使用教程

圖20

配置Git

這裡我将在使用e:\first 作為Working dir,使用建立Repository 的指令:

1 #初始化一個本地Repository
2 git init      

會産生一個隐藏檔案夾.git。

Github使用教程

圖21

網絡上有許許多多的教程都使用到了以下的語句:

1 git config --global user.name “your name”
2 git config –-global user.email “[email protected]

他們都沒有說明白為什麼需要使用,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

這裡我隻設定送出者的名稱:

Github使用教程

圖22

因為這裡我們并沒有clone Github 上的Repository 到本地Working dir,是以我們需要将我本地的Repository 連接配接到遠端Github 伺服器,使用如下指令:

1 #将我本地的Repository 連接配接到遠端Github 伺服器
2 yourName:你Github 的使用者名
3 yourRepo.git:你Github 上的Repository
4 git remote add origin [email protected]: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 都需要輸入賬号與密碼。

Github使用教程

圖23

注意:如果你之前已經連接配接到了Github 伺服器,那麼運作後會出現如下的錯誤:

Github使用教程

圖24

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

Github使用教程

圖25

接着你再連接配接就能得到圖23 的效果。

第二種比較高端的作法(

Guihub幫助文檔

),運作指令:

1 #USERNAME:Github 使用者名   
2 #OTHERREPOSITORY:Github 上的Repository
3 git remote set-url origin https://github.com/USERNAME/OTHERREPOSITORY.git      
Github使用教程

圖26

你可以輸入指令:

1 #檢視你現在連接配接的Github 伺服器位址
2 git remote –v      
Github使用教程

圖27

pull、push

由于我使用的Github Repository 是已經添加過檔案的(不是建立的),是以需要先将Github 上的檔案下載下傳到本地Repository,要不然是無法将本地的檔案push 到Github 的。如果你是建立的Repository 就可以跳過這個過程。使用指令:

1 # 将master 分支中的檔案下載下傳到本地Repository 中
2 git pull origin master       
Github使用教程

圖28

為了示範,我建立一個新的檔案:2.txt,并添加内容“good learner”到檔案中。使用指令:

1 # 建立一個檔案2.txt
2 touch 2.txt
3 #輸入"good learner"到檔案2.txt 中
4 echo ‘good learner’> 2.txt      
Github使用教程

圖29

我們需要先将檔案送出到Head中,使用指令:

1 #送出檔案到Index 
2 git add 2.txt
3 # 送出檔案到Head并添加備注”first"
4 git commit -m “first”      
Github使用教程

圖30

現在我們就可以将内容push 到Github 伺服器中了,使用指令:

1 git push origin master      
Github使用教程

圖31

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

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