1. 程式人生 > >使用Git連線到GitHub並進行版本管理

使用Git連線到GitHub並進行版本管理

Git是一個開源的分散式版本控制系統,可以有效、高速的處理從很小到非常大的專案版本管理。而GitHub則是一個面向開源及私有軟體專案的託管平臺,或者說它是一個線上的專案版本管理系統,它為基於git的版本控制和專案託管提供了全面的支援。Git和GitHub可以緊密配合實現高效便捷的版本控制。

要利用git進行專案管理和版本控制,第一步就是在本地建立一個版本倉庫(repository),也就是說我們需要在本機上指定一個資料夾(例如我們建立一個名為git_projects的資料夾來用作repository),而未來需要被管理的專案將被放在該資料夾下,git工具也將針對該檔案下的檔案進行版本管理。

本文接下來的例子是基於Ubuntu 16.04開展的。首先,進入到剛剛建立的目錄下。為了對repository中的專案進行管理,我們需要建立管理員身份,此後版本提交等操作都將以該身份來開展。方法如下圖所示,先配置使用者名稱和郵件名,然後double check配置的結果,顯示一切正常。


然後為了將已經建立好的資料夾指定為版本倉庫資料夾,需要對其進行初始化。具體方法就是使用git init(注意務必保證你已經進入到該目錄下),如下圖所示。此時,你可能會發現git_projects資料夾似乎並無異樣。但實際上,系統已經在其下建立了一個名為.git的子資料夾,該資料夾內部儲存了必要的配置資訊。但是這個資料夾通常是隱藏資料夾,如果你有興趣可以(在Ubuntu中)按下鍵盤上的【Ctrl+H】來顯示它。


Git中第一個要掌握的基本命令就是git status,它用於顯示工作目錄和暫存區的狀態。使用此命令能看到哪些修改被暫存了,哪些沒有。git status不顯示已經commit到專案歷史中去的資訊。例如在上圖中,在剛剛建立好repository時,使用該命令,可以看到nothing to commit。然後向git_projects資料夾下新增一個檔案(例如名為test.c),再使用命令git status,從上圖中可以看到這個新檔案是untracked(而且檔名是紅色),這表示這個檔案尚未被git跟蹤到,或者說git尚未意識到它的存在。

此時,我們需要用到的另外一個重要命令就是git add,該命令將檔案內容新增到索引(將修改新增到暫存區)。也就是將要提交的檔案的資訊新增到索引庫中。如下圖所示,在使用了該命令之後,你會發現git已經意識到存在一個名為test.c的新檔案了。但請注意,此時test.c檔案僅僅是位於暫存區中,對其所作的任何更改並未被真正新增到repository。為此,需要使用git commit命令,它負責將更改記錄(提交)到儲存庫。將索引的當前內容與描述更改的使用者和日誌訊息一起儲存在新的提交中。引數“-m”表示message,也就是說其後緊跟著的字串是對該次修改的所進行的一個描述。從下圖中可以看出,執行commit命令後再檢視日誌,系統顯示該次修改已經被記錄,例如提交修改的作者,修改的時間,以及修改的內容等。

對於剛剛建立的test.c檔案,我們在實際專案中會對其進行修改。因為該檔案已經被納入git版本管理的跟蹤範圍,一旦修改它,再使用git status進行檢視時,你會發現git已經意識到它被修改了(檔名再次變成了紅色)。但是本次修改並未被提交。另外還可以使用git diff來檢視修改的內容。git diff命令用於顯示提交和工作樹等之間的更改。此命令比較的是工作目錄中當前檔案和暫存區域快照之間的差異,也就是修改之後還沒有暫存起來的變化內容。如下圖所示,我們修改是把原來的"hello world!\n"變成了"hello world!!!\n",注意這裡的減號表示刪除,加號表示增加。


同樣,為了將新的更改新增到暫存區,我們需要使用add。在上圖中,我們使用了命令git add .,其中的 . 表示將“所有的修改”新增到暫存區。在使用add之後,還需要使用commit來提交更改。

到目前為止,上面的所有工作都是在本地進行的。更進一步,我們希望將本地專案上傳到GitHub以便進行線上的專案管理。這也是多人合作進行專案開發所必須的。假設你已經建立好了一個GitHub賬號,而且你的GitHub上已經有了一個名為mytest的線上repository。下面我們要做的就是設法把本地的repository同在線的repository連結到一起。

下圖是我們已經建立好的一個線上repository,你可以看到它的https連結,以及branch(此處的branch是master)。要參與任何一個 Git 專案的協作,必須要了解該如何管理遠端倉庫。遠端倉庫是指託管在網路上的專案倉庫,可能會有好多個,其中有些你只能讀,另外有些可以寫。同他人協作開發某個專案時,需要管理這些遠端倉庫,以便推送或拉取資料,分享各自的工作進展。管理遠端倉庫的工作,包括新增遠端庫,移除廢棄的遠端庫,管理各式遠端庫分支,定義是否跟蹤這些分支等等。


管理遠端倉庫需要使用命令git remote。如下圖所示,當我們已經知道線上repository的https連結時,可以使用如下命令,來進行add。這句話其中的 origin 的遠端庫, git 預設使用這個名字來標識你所克隆的原始倉庫。我們已經知道add的作用只是把檔案的狀態變為tracked,也就是令git知道它的存在(或者說是將其置於暫存區)。在結合remote時,我們指定的目標是在遠端的,所以檔案的修改並未被推到遠端,而事實上這裡所謂的暫存區也位於本地。

只有當你使用push命令時,它才會被推到遠端主機。push 命令用於將本地分支的更新,推送到遠端主機。如下圖所示,其中的-u選項表示指定一個預設主機,這樣後面就可以不加任何引數使用,origin 是預設的遠端倉庫(在上面的命令中我們已經指明瞭主機地址),master給出了我們要推送的目標branch。注意到在使用https連結時,每次都需要認證使用者身份,你需要輸入你的GitHub賬號以及密碼。

完成上面的步驟之後,你就會發現檔案已經被成功推送到GitHub上了。但是上面的操作始終有一個問題,就是每次執行與遠端主機的連線都要輸入密碼,這個有點麻煩。有沒有其他更簡單的方法?有的,可以使用SSH連線。在之前獲得https連結的地方,你同樣可以獲得一個SSH連結,如下圖所示:


要想使用SSH連結,你需要為本機生成一個key。方法如下所示,即使用語句ssh-keygen -t rsa -b 4096 -C "你的郵件地址",中間需要按幾次回車,例如:When you're prompted to "Enter a file in which to save the key," press Enter. This accepts the default file location。然後你還需要Add your SSH private key to the ssh-agent. If you created your key with a different name, or if you are adding an existing key that has a different name, replace id_rsa in the command with the name of your private key file.


經過上面的步驟,已經得到了Key,它就儲存在上面你指定的路徑下檔案中,你可以使用一個檔案編輯器開啟它,然後把裡面的內容複製到剪貼簿待用。接下來,In the upper-right corner of any page, click your profile photo, then click Settings,如下圖所示。


接下來,in the user settings sidebar, click SSH and GPG keys. Click New SSH key or Add SSH key,如下圖所示。In the "Title" field, add a descriptive label for the new key. For example, if you're using a personal Mac, you might call this key "Personal MacBook Air". Paste your key into the "Key" field. Click Add SSH key. If prompted, confirm your GitHub password.


完成上述配置過程之後,你就可以使用SSH方式連線到GitHub了。我們來嘗試一下。通常,如果網上已經存在有一個repository,為了防止線上的repository和本地的repository衝突,我們在向上推送之前,最好做pull動作。git pull命令用於從另一個儲存庫或本地分支獲取並整合(整合)。git pull命令的作用是:取回遠端主機某個分支的更新,再與本地的指定分支合併。如下圖所示,其中的地址是前面示例圖片中顯示的SSH連結地址。下面我們就可以做之前已經做過的事情了,先add,再commit。


注意,因為現在是與遠端repository互動,所以即使commit之後,GitHub上的檔案也還沒有被更新。你需要使用push來將本地的更新推送到GitHub上的遠端repository。例如,在下圖中你可以看到,我們修改了test.c檔案,並向git_projects資料夾中增加了一個名為test2.ll的檔案。類似地,先add再commit。最後,在push到GitHub上的遠端repository,注意因為這次使用的是SSH方式連線,所以已經不再需要輸入使用者名稱和密碼了。


至此,我們已經對使用git連線到GitHub並以此為基礎進行遠端版本管理的流程和方法進行了介紹。

(本文完)