Github入門與實踐

聽說好的程序員都在用github。

用github有一陣子了,因為不會用Git,所以一直是通過GUI客戶端程序去同步代碼的,這樣明顯很low。而且,好多地方都沒搞清楚,比如,Issue用來干什么?Pull Request怎么使用?

拒絕GUI,必須命令行。

看了《Github入門與實踐》一書,經(jīng)過一番梳理和實踐,這次我終于懂得用Git和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是一款免費、開源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項目。]

Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個開放源碼的版本控制軟件。

Git可以幫助我們管理代碼,它是一個分布式版本控制系統(tǒng)。它設計了倉庫(版本庫)這樣一種管理機制;同時,不同于SVN,CVS集中式的版本控制理念,Git是分布式版本控制。

兩者的區(qū)別可以閱讀廖雪峰老師的文章:集中式vs分布式。

而且,Git是通過命令行操作的。

基本操作

這里只簡單羅列幾條命令,具體操作在下面通過Git創(chuàng)建本地倉庫會介紹到。

  • git init:初始化倉庫
  • git status:查看倉庫狀態(tài)
  • git add:向暫存區(qū)中添加文件
  • git commit:保存?zhèn)}庫的歷史記錄
  • git log:查看提交日志
  • git diff:查看更改前后的差別
  • git branch:顯示分支一覽表
  • git checkout -b:創(chuàng)建并切換分支
  • git checkout:切換分支
  • git merge:合并分支
  • git reset:回溯歷史版本
  • git remote add:添加遠程倉庫
  • git push:推送至遠程倉庫
  • git clone:獲取遠程倉庫

分支

在進行多個并行作業(yè)時,我們會用到分支。

master分支是Git默認創(chuàng)建的分支,它就像河流的主干,而我們根據(jù)需要,創(chuàng)建的一個個分支,就相當于河流分化出來的一個個小分流。

我們在分支上進行編程作業(yè)(例如,每個負責項目的一個模塊開發(fā)),當完成之后,進行審核無誤,再合并到主分支master上,這樣就能合理高效地實現(xiàn)多人并行開發(fā)。

特性分支

特性分支,是集中實現(xiàn)單一特性(主題),除此之外不進行任何作業(yè)的分支。

在日常開發(fā)過程中,我們常常會創(chuàng)建數(shù)個特性分支,同時在保留一個隨時可以發(fā)布軟件的穩(wěn)定分支。穩(wěn)定分支的角色通常由master擔當。

假設我們創(chuàng)建了一個feature-a分支,這一分支主要實現(xiàn)feature-a,除feature-a的實現(xiàn)之外不進行任何作業(yè)。即便在開發(fā)過程中發(fā)現(xiàn)了Bug,也需要再創(chuàng)建新的分支,在新分支中進行修正。

Github

Github是什么?

Github是一個網(wǎng)站。

Github
Github

一些開發(fā)者在使用Git以后,找不到好的Git托管網(wǎng)站,于是Tom Preston Werner 和 Chris Wanstrath 就開發(fā)了Github出來,提供Git倉庫托管服務。

所以,在我看來,它們兩者的關系就是:Git是一個系統(tǒng),相當于一個工具,而Github就是基于這樣一個系統(tǒng)的平臺,讓開發(fā)者更高效地使用Git去托管自己的代碼。

如何使用Github?

因為Git是使用倉庫進行版本控制的,所以我們在Github的操作也是圍繞著倉庫展開。

當我們想管理一個項目的代碼時,我們就在Github上創(chuàng)建一個倉庫,然后上傳項目代碼,就實現(xiàn)了代碼托管。

所以,一般我們的開發(fā)流程是這樣的:

  1. 在本地通過Git建立一個倉庫,我們稱之為“本地倉庫”,然后進行我們的編程工作。使用Git,可以幫助實現(xiàn)版本控制。

  2. 在Github上建立一個倉庫,我們稱之為“遠程倉庫”,然后將本地倉庫的內(nèi)容推送到遠程倉庫,同步代碼,這樣就實現(xiàn)了托管功能。

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

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

本地倉庫

創(chuàng)建——初始化倉庫

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

  1. 建立一個目錄,并初始化倉庫。


如果初始化成功,執(zhí)行了git init命令的目錄下就會生成.git目錄。這個.git目錄里存著管理當前目錄內(nèi)容所需的倉庫數(shù)據(jù)。我們將這個目錄的內(nèi)容成為“附屬于該倉庫的工作樹”。

  1. 查看倉庫狀態(tài)。

工作樹和倉庫在被操作過程中,狀態(tài)會不斷變化,所以需要經(jīng)常用gti status查看當前狀態(tài)。

提交——版本更新

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

  1. git status——查看倉庫狀態(tài):

Untracked files表示修改過的文件尚未追蹤,即尚未成為倉庫的管理對象(加入到工作樹中)。

  1. git add——加入暫存區(qū):暫存區(qū)是提交之前的一個臨時區(qū)域。git add將其加入暫存區(qū),為保存到工作樹中做準備。

此時再運行git status,提示“Change to be committed”,說明是提交狀態(tài)。

  1. git commit——保存?zhèn)}庫的歷史記錄:將剛剛的提交狀態(tài)保存,這樣就算完成了一個版本控制。

-m 參數(shù)后的字符串稱作提交信息,是對這個提交的描述。

查看——倉庫狀態(tài)

  1. git log——查看提交日志:查看以往倉庫中提交的日志,什么人在什么時候進行了提交或合并,以及操作前后有怎樣的差別。


  2. git diff——查看更改前后的差別:查看工作樹、暫存區(qū)、最新提交之間的差別。

    • 查看工作樹和暫存區(qū)的區(qū)別:在test.html中寫點東西,先不用git add,直接運行git diff查看,此時顯示的是工作樹與最新提交狀態(tài)之間的差別。

    • 查看工作樹與最新提交的差別:先執(zhí)行git add將修改提交到暫存區(qū);如果此時執(zhí)行git diff,會發(fā)現(xiàn)沒有任何顯示,這是因為執(zhí)行了git add后工作樹和暫存區(qū)的狀態(tài)并無差別。要查看與最新提交的差別,要執(zhí)行git diff HEAD

遠程倉庫

準備

  1. 創(chuàng)建賬戶:如果你還沒有Github賬戶,那么你需要先創(chuàng)建一個賬戶。
    登錄后,即可使用Github的功能,創(chuàng)建倉庫。

  2. 設置SSH Key:Github上倉庫與本地倉庫連接,是通過使用了SSH的公開秘鑰認證方式進行的。所以,得現(xiàn)在本地生成SSH Key,然后設置到Github上,才能實現(xiàn)倉庫的遠程連接。

  • 打開Git Bash,創(chuàng)建SSH Key。
    運行命令:ssh-keygen -t rsa -C "your_email@example.com"

    輸入密碼后,會出現(xiàn)以下結(jié)果,表明創(chuàng)建成功:


    id_rsa是私有密鑰,id_rsa.pub是公開密鑰。

  • 在Github中添加公開密鑰。

創(chuàng)建——建立遠程倉庫

  1. 創(chuàng)建:

  2. 倉庫配置:

  • 如果想向Github添加手中已有的Git倉庫,建議不要勾選Initialize this repository with a README選項;
  • Add.gitignore:可以在初始化時生成.gitignore文件,這個設定會幫我們把不需要在Git倉庫中進行版本管理的文件記錄在.gitignore文件中,省去了每次根據(jù)框架進行設置的麻煩。若不使用任何框架,則可不選擇。
  • Add a license:選擇要添加的許可協(xié)議文件,一般可不選。
  1. 創(chuàng)建成功:

克隆——獲取遠程倉庫

當你是先在Github上創(chuàng)建好項目倉庫時,此時需要把遠程倉庫克隆到本地,創(chuàng)建一個本地倉庫。

  1. 復制HTTPS鏈接:
  1. 打開Git Bash,進入要作為倉庫的文件目錄:


  2. 運行命令:git clone https://github.com/Monkey626/test.git

  3. 克隆成功:

  1. 進入倉庫:查看當前倉庫分支信息。


執(zhí)行git clone命令后,我們會默認處于master分支下,同時系統(tǒng)會自動將origin設置成該遠程倉庫的標識符(即origin代表了該遠程倉庫)。

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

當在本地完成好編程作業(yè)時,此時需要將代碼同步到遠程倉庫,以實現(xiàn)托管。

  1. 添加遠程倉庫:你需要將遠程倉庫與本地倉庫連接起來,我們用git remote add命令來設置本地倉庫的遠程倉庫。
  1. 推送至遠程倉庫:如果想將當前本地倉庫分支下的內(nèi)容推送給遠程倉庫,要用git push命令。假定我們在master分支(如果是其他分支,最后的參數(shù)就改為其它分支對應名稱)下操作

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

當你的隊友將完成了編程作業(yè),將其代碼推送到遠程倉庫后,此時,你可能需要將代遠程倉庫隊友更新后的代碼拉到本地,這時要用到git pull命令。

  1. 運行命令行git pull
  1. 拉取成功:

Github幾大功能

Issue

在軟件開發(fā)過程中,開發(fā)者們?yōu)榱烁橞UG及進行軟件相關討論,進而方便管理,創(chuàng)建了Issue。

在Github上,可以將它作為開發(fā)者之間的交流工具,多多加以利用。

Issue可以在以下情況使用:

  • 發(fā)現(xiàn)軟件的Bug并報告;
  • 有事想向作者詢問、探討;
  • 事先列出今后準備實施的任務。

Issue支持markdown語法,也支持添加標簽便于管理。

在Issue里可以添加圖片,可以使用表情。

Pull Request

Pull Request是用戶修改代碼后向?qū)Ψ絺}庫發(fā)送采納請求的功能,也是Github的核心功能。

Pull Request的流程:

  1. Fork:將你要修改代碼的項目倉庫Fork到自己的Github賬號上,創(chuàng)建一個屬于你的倉庫;



  2. Clone:將其clone到本地


  3. Branch:在本地倉庫創(chuàng)建一個特性分支(有了更明確的主題,也便于對方了解自己修改代碼的意圖),用于本次代碼修改。


  4. Commit:提交修改

  1. Push:要從Github發(fā)送Pull Ruquest,Github端的倉庫必須有一個包含了修改后代碼的分支。所以,要創(chuàng)建本地特性分支的相應遠程分支。
  1. Send:發(fā)送Pull Request。


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

Wiki

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

所有有權(quán)限的人都可以對文中進行修改。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容