Github入門與實踐

據說好的程序員都在用github。html

用github有一陣子了,由於不會用Git,因此一直是經過GUI客戶端程序去同步代碼的,這樣明顯很low。並且,好多地方都沒搞清楚,好比,Issue用來幹什麼?Pull Request怎麼使用?git

拒絕GUI,必須命令行。程序員

看了《Github入門與實踐》一書,通過一番梳理和實踐,此次我終於懂得用Git和Github了。github

思惟導圖

圖片描述

Git

Git是什麼?

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
[譯:Git是一款免費、開源的分佈式版本控制系統,用於敏捷高效地處理任何或小或大的項目。]編程

Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。markdown

Git能夠幫助咱們管理代碼,它是一個分佈式版本控制系統。它設計了倉庫(版本庫)這樣一種管理機制;同時,不一樣於SVN,CVS集中式的版本控制理念,Git是分佈式版本控制。框架

二者的區別能夠閱讀廖雪峯老師的文章:集中式vs分佈式ssh

並且,Git是經過命令行操做的。分佈式

基本操做

這裏只簡單羅列幾條命令,具體操做在下面經過Git建立本地倉庫會介紹到。工具

  • git init:初始化倉庫

  • git status:查看倉庫狀態

  • git add:向暫存區中添加文件

  • git commit:保存倉庫的歷史記錄

  • git log:查看提交日誌

  • git diff:查看更改先後的差異

  • git branch:顯示分支一覽表

  • git checkout -b:建立並切換分支

  • git checkout:切換分支

  • git merge:合併分支

  • git reset:回溯歷史版本

  • git remote add:添加遠程倉庫

  • git push:推送至遠程倉庫

  • git clone:獲取遠程倉庫

分支

在進行多個並行做業時,咱們會用到分支。

master分支是Git默認建立的分支,它就像河流的主幹,而咱們根據須要,建立的一個個分支,就至關於河流分化出來的一個個小分流。

咱們在分支上進行編程做業(例如,每一個負責項目的一個模塊開發),當完成以後,進行審覈無誤,再合併到主分支master上,這樣就能合理高效地實現多人並行開發。

特性分支

特性分支,是集中實現單一特性(主題),除此以外不進行任何做業的分支。

在平常開發過程當中,咱們經常會建立數個特性分支,同時在保留一個隨時能夠發佈軟件的穩定分支。穩定分支的角色一般由master擔當。

假設咱們建立了一個feature-a分支,這一分支主要實現feature-a,除feature-a的實現以外不進行任何做業。即使在開發過程當中發現了Bug,也須要再建立新的分支,在新分支中進行修正。

Github

Github是什麼?

Github是一個網站。
圖片描述

一些開發者在使用Git之後,找不到好的Git託管網站,因而Tom Preston Werner 和 Chris Wanstrath 就開發了Github出來,提供Git倉庫託管服務。

因此,在我看來,它們二者的關係就是:Git是一個系統,至關於一個工具,而Github就是基於這樣一個系統的平臺,讓開發者更高效地使用Git去託管本身的代碼。

如何使用Github?

由於Git是使用倉庫進行版本控制的,因此咱們在Github的操做也是圍繞着倉庫展開。

當咱們想管理一個項目的代碼時,咱們就在Github上建立一個倉庫,而後上傳項目代碼,就實現了代碼託管。

因此,通常咱們的開發流程是這樣的:

  1. 在本地經過Git創建一個倉庫,咱們稱之爲「本地倉庫」,而後進行咱們的編程工做。使用Git,能夠幫助實現版本控制。

  2. 在Github上創建一個倉庫,咱們稱之爲「遠程倉庫」,而後將本地倉庫的內容推送到遠程倉庫,同步代碼,這樣就實現了託管功能。

或者,若是是先在Github上創建了倉庫,設置好了項目,那麼就將遠程倉庫的項目克隆到本地倉庫,同理。

我我的的理解是,遠程倉庫——操做Github;本地倉庫——操做Git。

本地倉庫

建立——初始化倉庫

要使用Git進行版本管理,必須先初始化倉庫。

  1. 創建一個目錄,並初始化倉庫。圖片描述
    若是初始化成功,執行了git init命令的目錄下就會生成.git目錄。這個.git目錄裏存着管理當前目錄內容所需的倉庫數據。咱們將這個目錄的內容成爲「附屬於該倉庫的工做樹」。

  2. 查看倉庫狀態。圖片描述
    工做樹和倉庫在被操做過程當中,狀態會不斷變化,因此須要常常用gti status查看當前狀態。

提交——版本更新

編輯完代碼後,一個完整的提交流程應該是:git status -> git add -> git commit

  1. git status——查看倉庫狀態: 圖片描述
    Untracked files表示修改過的文件還沒有追蹤,即還沒有成爲倉庫的管理對象(加入到工做樹中)。

  2. git add——加入暫存區:暫存區是提交以前的一個臨時區域。git add將其加入暫存區,爲保存到工做樹中作準備。圖片描述此時再運行git status,提示「Change to be committed」,說明是提交狀態。

  3. git commit——保存倉庫的歷史記錄:將剛剛的提交狀態保存,這樣就算完成了一個版本控制。圖片描述
    -m 參數後的字符串稱做提交信息,是對這個提交的描述。

查看——倉庫狀態

  1. git log——查看提交日誌:查看以往倉庫中提交的日誌,什麼人在何時進行了提交或合併,以及操做先後有怎樣的差異。
    圖片描述

  2. git diff——查看更改先後的差異:查看工做樹、暫存區、最新提交之間的差異。

    • 查看工做樹和暫存區的區別:在test.html中寫點東西,先不用git add,直接運行git diff查看,此時顯示的是工做樹與最新提交狀態之間的差異。圖片描述

    • 查看工做樹與最新提交的差異:先執行git add將修改提交到暫存區;若是此時執行git diff,會發現沒有任何顯示,這是由於執行了git add後工做樹和暫存區的狀態並沒有差異。要查看與最新提交的差異,要執行git diff HEAD圖片描述

遠程倉庫

準備

  1. 建立帳戶:若是你尚未Github帳戶,那麼你須要先建立一個帳戶
    登陸後,便可使用Github的功能,建立倉庫。圖片描述

  2. 設置SSH Key:Github上倉庫與本地倉庫鏈接,是經過使用了SSH的公開祕鑰認證方式進行的。因此,得如今本地生成SSH Key,而後設置到Github上,才能實現倉庫的遠程鏈接。

    • 打開Git Bash,建立SSH Key。
      運行命令:ssh-keygen -t rsa -C "your_email@example.com"圖片描述 輸入密碼後,會出現如下結果,代表建立成功:圖片描述 id_rsa是私有密鑰,id_rsa.pub是公開密鑰。

    • 在Github中添加公開密鑰。圖片描述圖片描述

建立——創建遠程倉庫

  1. 建立:
    圖片描述

  2. 倉庫配置:
    圖片描述

    • 若是想向Github添加手中已有的Git倉庫,建議不要勾選Initialize this repository with a README選項;

    • Add.gitignore:能夠在初始化時生成.gitignore文件,這個設定會幫咱們把不須要在Git倉庫中進行版本管理的文件記錄在.gitignore文件中,省去了每次根據框架進行設置的麻煩。若不使用任何框架,則可不選擇。

    • Add a license:選擇要添加的許可協議文件,通常可不選。

  3. 建立成功:
    圖片描述

克隆——獲取遠程倉庫

當你是先在Github上建立好項目倉庫時,此時須要把遠程倉庫克隆到本地,建立一個本地倉庫。

  1. 複製HTTPS連接:圖片描述

  2. 打開Git Bash,進入要做爲倉庫的文件目錄:圖片描述

  3. 運行命令:git clone https://github.com/Monkey626/test.git圖片描述

  4. 克隆成功:圖片描述

  5. 進入倉庫:查看當前倉庫分支信息。圖片描述

執行git clone命令後,咱們會默認處於master分支下,同時系統會自動將origin設置成該遠程倉庫的標識符(即origin表明了該遠程倉庫)。

同步——更新代碼(從本地倉庫傳到遠程倉庫)

當在本地完成好編程做業時,此時須要將代碼同步到遠程倉庫,以實現託管。

  1. 添加遠程倉庫:你須要將遠程倉庫與本地倉庫鏈接起來,咱們用git remote add命令來設置本地倉庫的遠程倉庫。 圖片描述

  2. 推送至遠程倉庫:若是想將當前本地倉庫分支下的內容推送給遠程倉庫,要用git push命令。假定咱們在master分支(若是是其餘分支,最後的參數就改成其它分支對應名稱)下操做
    圖片描述圖片描述

同步——更新代碼(從遠程倉庫拉到本地倉庫)

當你的隊友將完成了編程做業,將其代碼推送到遠程倉庫後,此時,你可能須要將代遠程倉庫隊友更新後的代碼拉到本地,這時要用到git pull命令。

  1. 運行命令行git pull圖片描述

  2. 拉取成功:圖片描述

Github幾大功能

Issue

在軟件開發過程當中,開發者們爲了跟蹤BUG及進行軟件相關討論,進而方便管理,建立了Issue。

在Github上,能夠將它做爲開發者之間的交流工具,多多加以利用。

Issue能夠在如下狀況使用:

  • 發現軟件的Bug並報告;

  • 有事想向做者詢問、探討;

  • 事先列出從此準備實施的任務。

Issue支持markdown語法,也支持添加標籤便於管理。

在Issue裏能夠添加圖片,可使用表情。

Pull Request

Pull Request是用戶修改代碼後向對方倉庫發送採納請求的功能,也是Github的核心功能。

Pull Request的流程:

  1. Fork:將你要修改代碼的項目倉庫Fork到本身的Github帳號上,建立一個屬於你的倉庫;圖片描述圖片描述

  2. Clone:將其clone到本地 圖片描述

  3. Branch:在本地倉庫建立一個特性分支(有了更明確的主題,也便於對方瞭解本身修改代碼的意圖),用於本次代碼修改。 圖片描述

  4. Commit:提交修改 圖片描述

  5. Push:要從Github發送Pull Ruquest,Github端的倉庫必須有一個包含了修改後代碼的分支。因此,要建立本地特性分支的相應遠程分支。 圖片描述圖片描述圖片描述

  6. Send:發送Pull Request。 圖片描述圖片描述圖片描述

這樣,就是一個完整的發送Pull Request流程。

Wiki

Wiki是一個使用簡單的語法就能編寫文檔的功能。

全部有權限的人均可以對文中進行修改。

Wiki多被用於編寫博客文章、教程、使用手冊。

相關文章
相關標籤/搜索