什麼是是Github?
為開發者提供Git倉庫的託管服務。
Github與Git的區別:在Git,開發者將源代碼存入名叫“Git倉庫”的資料庫中並加以使用。而Github則是在網絡上提供Git倉庫的一項服務
使用Github會帶來哪些變化
1.協作形式變化:開發者之間引發化學反應的Pull Request.Pull Request是指開發者在本地對源代碼進行更改後,向GitHub中託管的Git倉庫請求合併的功能
對特定用户進行評論,任務管理和BUG報告可以通過Issue進行交互。如果想讓特定用户來看,只要用“@用户名”的格式書寫,對方便會接到通知。
GitHub Flavored Markdown:用户所有用文字輸入的功能都可以用GitHub Flavored Markdown(GFM)語法進行描述。這個語法可以讓標記變得簡單,以此寫出的評論與文檔也會更容易理解
2.能看到更多其它團隊的軟件:GitHub快捷的環境為開發者帶來的合作伙伴,並不止侷限於自己團隊內部。只要將感興趣的倉庫添加至Watch中,就可以在News Feed查看該倉庫的相關信息。
3.與開源軟件相同的開發模式
GitHub提供的主要功能
1.Git倉庫
2.Organization
3.Issue
4.Wiki:通過Wiki功能,任何人都能隨時對一篇文章進行更改並保存,因此可以多人共同完成一篇文章。
5.Pull Request
Git的導入
Git倉庫管理功能是GitHub的核心。因此,使用GitHub之前必須先掌握Git的相關知識
Git是分散型管理的代表:GitHub將倉庫Fork給了每一個用户。Fork就是將GitHub的某個特定倉庫複製到自己的賬户下。Fork出的倉庫與原倉庫是兩個不同的倉庫,開發者可以隨意編輯。分散型擁有多個倉庫,相對而言稍顯複雜。不過,由於本地的開發環境中就有倉庫,所以開發者不必連接遠程倉庫就可以進行開發。
實際上,所有倉庫之間都可以進行push和pull.即便不通過GitHub,開發者A也可以直接向開發者B的倉庫進行push或pull.因此在使用前如果不事先制定規範,初學者往往會搞不清楚最新的源代碼保存在哪裏,導致開發失去控制
使用Github的前期準備
1.創建賬户
2.設置頭像
3.設置SSH Key:GitHUb上連接已有倉庫時的認證,是通過使用了SSH的公開密鑰認證方式進行的。我要要創建公開密鑰認證所需的SSH Key,並將其添加至GitHub。
4.添加公開密鑰:在GitHub中添加公開密鑰,今後就可以用私有密鑰進行認證了。點擊account Setting,選擇SSH key菜單後,點擊Add SSH Key,就會出現Title 和Key兩個輸入框
5.使用社區功能:可以Follow關注他人
一、GitHub中創建倉庫
創建一個公開的倉庫。點擊New repository
1.Repository name
2.Description:可以設置倉庫的説明,這一欄不是必須項,可以留空
3.Public、Private:這一欄可以選擇Public還是Private.這裏我們選擇Public,創建公開倉庫,倉庫內的所有內容都會被公開。選擇Private可以創建非公開倉庫,用户可以設置訪問權限,但這項服務是收費的。
4.Initialize this repository with a README:在Initialize this repository with a README選項打勾,隨後GitHub會自動初始化倉庫並設置README文件,讓用户可以立刻clone這個倉庫。如果想向GitHub添加手中已有的Git倉庫,建議不要勾選,直接手動Push
5.Add .gitignore:他可以在初始化時自動生成.gitignore 文件。這個設定會幫我們把不需要在Git倉庫中進行版本管理的文件記錄在.gitignore文件中,省去了每次根據框架進行設置的麻煩
6.Add a license:如果這個倉庫中包含的代碼已經確定了許可協議,隨後將自動生成包含許可協議內容的LICENSE文件,yonglai 表明該倉庫內容的許可協議。
連接倉庫
1.README.md在初始化時已經生成好了。README.md文件的內容會自動顯示在倉庫的首頁當中。因此,人們一般會在這個文件中標明本倉庫所包含的軟件的概要、使用流程、許可協議等信息。如果使用Markdown語法進行描述,還可以添加標記,提高可讀性
2.GitHub Flavored Markdown:在GitHub上進行交流時用到的Issue、評論、Wiki,都可以用Markdown語法表示,從而進行標記。
公開代碼
1.clone已有倉庫:clone時指定路徑,嘗試在已有倉庫中添加代碼並加以公開。這裏會要求輸入GitHub上設置的公開密鑰的密碼。認證成功後,倉庫便會被clone至倉庫名後的目錄中。將想要公開的代碼提交至這個倉庫再push到GitHub的倉庫中,代碼便會公開
2.編寫代碼
3.提交:通過git add命令將文件加入暫存區,再通過git commit命令提交,添加成功後,可以通過git log命令查看提交日誌
4.進行push:之後只要執行push,GitHub上的倉庫就會被更新。這樣一來代碼就在GitHub上公開。
二、學習Git
基本操作
1.git init——初始化倉庫。要使用Git進行版本管理,必須先初始化倉庫。Git是使用 git init命令進行初始化的。請實際建立一個目錄並初始化倉庫。如果初始化成功,執行了git init命令的目錄下就會生成.git目錄。這個.git目錄裏存儲着管理當前目錄內容所需的倉庫數據。在Git重,我們將這個目錄的內容稱為“附屬於該倉庫的工作樹”。
2.git status——查看倉庫的狀態。用於顯示Git倉庫的狀態
3.git add——向暫存區中添加文件。如果只是用Git倉庫的工作樹創建了文件,那麼該文件並不會被記入Git倉庫的版本管理對象當中。因此我們用git status命令查看README.md文件時,它會顯示在Untracked files裏。暫存區是提交前的一個臨時區域。
4.git commit——保存倉庫的歷史記錄。該命令可以將當前暫存區中的文件實際保存到倉庫的歷史記錄中。通過這些記錄,可以在工作樹復原文件。
5.git log——查看提交日誌。可以查看以往倉庫中提交的日誌,包括可以查看什麼人在什麼時候進行了提交或合併,以及操作前後有怎樣的差別。
只顯示提交信息的第一行——如果只想讓程序顯示第一行簡述信息,可以在git log命令後加上——pretty=short。這樣一來開發人員就能夠更輕鬆地把握多個提交
只顯示指定目錄、文件的日誌——只要在git log後加上目錄名,便會只顯示該目錄下的日誌
顯示文件的改動——如果想查看提交所帶來的改動,可以加上-p參數,文件的前後差別就會顯示在提交信息之後。也可以在git log –p後加上指定文件
6.git diff——查看更改前後的差別。git diff命令可以查看工作樹、暫存區、最新提交之間的差別。
查看工作樹和暫存區的差別。直接執行git diff命令
查看工作樹和最新提交的差別。在執行git commit命令之前執行 git diff HEAD命令,查看本次提交和上次提交之間有什麼差別,等確認完畢後再進行提交。這裏的HEAD是指向當前分支中最新一次提交的指針。
分支的操作
在進行多個並行作業時,我們會用到分支。在這類並行開發的過程中,往往同時存在多個最新代碼狀態。master分支是Git默認創建的分支,因此基本上所有開發都是以這個分支為中心進行的。不同分支中,可以同時進行完全不同的作業。等該分支的作業完成之後再與master分支合併。
1.git branch——顯示分支一覽表。帶星號的分支為當前分支
2.git checkout –b——創建、切換分支
1.切換到featur-A分支並進行提交. git checkout –b feature-A 實際上,連續執行下面兩條命令也能受到同樣效果。
git branch feature-A
git checkout feature-A
創建feature-A分支,並將當前分支切換為feature-A分支。這時再來查看分支列表,會顯示我們處於feature-A分支下
2.切換到master分支
git checkout master
3.切換回到上一個分支
git checkout -
特性分支
特徵分支顧名思義,是集中實現單一特性(主題),除此之外不進行任何作業的分支。在日常開發中,往往會創建數個特性分支,同時在此之外再保留一個隨時可以發佈軟件的分支。穩定分支的角色通常由master分支擔當。
基於特定主題的作業再特性分支中進行,主題完成後再與master分支合併。只要保持這樣一個開發流程,就能保證master分支可以隨時供人查看。這樣一來,其他開發者也可以放心大膽地從master分支創建新的特性分支。
主幹分支
主幹分支是剛才我們講解的特性分支的原點,同時也是合併的終點。通常人們會用master分支作為主幹分支。主幹分支並沒有開發到一半的代碼,可以隨時供他人查看
git merge——合併分支。我們假設feature-A已經實現完畢,想要將它合併到主幹分支master中。首先切換到master分支。git checkout master
然後合併feature-A分支。為了再歷史記錄中明確記錄下本次分支合併,我們需要創建合併提交。因此,再合併時加上—no-ff參數。git merge –-no-ff feature-A
隨後編輯器會啓動,用於錄入合併提交的信息。
git log –graph——以圖表形式查看分支
更改提交的操作
git reset——回溯歷史版本
回溯到創建feature-A分支前
讓我們先回溯到上一節feature-A分支創建之前,創建一個名為fix-B的特性分支
要讓倉庫的HEAD、暫存區、當前工作樹回溯到指定狀態,需要用到git reset –hard命令。只要提供目標時間點的哈希值,就可以完全恢復至該時間點的狀態
消除衝突
在合併的時候有可能發生衝突,有衝突是無法完成合並的。
在衝突解決後,執行git add命令與git commit命令
推送至遠程倉庫
1.git remote add——添加遠程倉庫
在GitHub上創建的倉庫路徑為“git@github.com:用户名/git-tutorial.git”.現在我們用git remote add命令將它設置成本地倉庫的遠程倉庫
2.git push——推送至遠程倉庫
1.推送至master分支
像這樣執行 git push命令,當前分支的內容就會被推送給遠程倉庫origin的master分支。-u參數可以在推送的同時,將origin倉庫的master分支設置為本地倉庫當前分支的upstream(上游)。添加這個參數,將來運行git pull命令從遠程倉庫獲取內容時,本地倉庫的這個分支就可以直接從origin的master分支獲取內容,省去了另外添加參數的麻煩
git push –u origin master
2.推送至master以外的分支
除了master分支之外,遠程倉庫也可以創建其他分支。舉個例子,我們在本地倉庫中創建feature-D分支,並將它以同名的形式push至遠程倉庫
git push –u origin feature-D
從遠程倉庫獲取
上一節中我們把在GitHub上新建的倉庫設置成了遠程倉庫,並向這個倉庫push了feature-D分支。現在所有能夠訪問這個遠程倉庫的人都可以獲取feature-D分支並加以修改
1.git clone——獲取遠程倉庫
1.獲取遠程倉庫
首先我們換到其他目錄下,將GitHub上的倉庫clone到本地。注意,不要與之前操作的倉庫在同一目錄下。執行git clone 命令後,我們會默認處於master分支下,同時系統會自動將origin設置成該遠程倉庫的標識符
2.獲取遠程的feature-D分支
我們試着將feature-D分支獲取至本地倉庫。git checkout –b feature-D origin/feature-D
-b參數的後面是本地倉庫中新建分支的名稱。為了便於理解,我們仍將其命名為feature-D,讓它與遠程倉庫的對應分支保持同名。新建分支名稱後面是獲取來源的分支名稱。例子中指定了origin/feature-D,就是説以名為origin的倉庫的feature-D分支為來源,在本地倉庫中創建feature-D分支
3.向本地的feature-D分支提交更改
4.推送 feature-D分支
現在來推送feature-D分支。git push
5.git pull——獲取最新的遠程倉庫分支
這邊的本地倉庫中只創建了feature-D分支,並沒有在feature-D分支中進行任何提交。然而遠程倉庫的feature-D分支中已經有了之前推送的提交。這時我們就可以使用git pull命令,將本地的feature-D分支更新到最新的狀態。當前分支為feature-D分支
git pull origin feature-D
GitHub端遠程倉庫中的feature-D分支是最新狀態,所以本地倉庫中的feature-D分支就得到了更新。今後只需要像平常一樣在本地進行提交再push給遠程倉庫,就可以與其他開發者同時再同一個分支中進行工作,不斷給feature-D增加新功能。