Github 的基本使用介紹

什麼是SVN/Git/Github

在介紹Github以前,咱們一塊兒瞭解一下SVN、Git、Github這三個概念、分別的責任以及相關聯的區別。ios

SVN

SVN(Subversion)是集中式管理的版本控制器。git

SVN只有一個單一的集中管理的服務器,保存全部文件的修訂版本,而協同工做的人們都經過客戶端連到這臺服務器,取出最新的文件或者提交更新。就比如是一個圖書館,你要改一本書,必須先從圖書館借出來,而後回到家本身改,改完了,再放回圖書館。程序員

集中式版本控制系統最大的問題就是必須聯網才能工做,若是在局域網內還好,帶寬夠大,速度夠快,可若是在互聯網上,遇到網速慢的話,可能提交一個10M的文件就須要5分鐘。 github

Git

Git是分佈式管理的版本控制器。web

簡單介紹一下Git:shell

Linux的創始人Linus Torvalds在2015年開發了Git的原型程序。Linux內核的更新速度在全世界也是數一數二。數據庫

Git 像是把數據看做是對小型文件系統的一組快照。 每次你提交更新,或在 Git 中保存項目狀態時,它主要對當時的所有文件製做一個快照並保存這個快照的索引。 爲了高效,若是文件沒有修改,Git 再也不從新存儲該文件,而是隻保留一個連接指向以前存儲的文件。 Git 對待數據更像是一個 快照流編程

Git每個終端都是一個倉庫,客戶端並不僅提取最新版本的文件快照,而是把原始的代碼倉庫完整地鏡像下來。每一次的提取操做,實際上都是一次對代碼倉庫的完整備份。瀏覽器

Git 有三種狀態,你的文件可能處於其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。 已提交表示數據已經安全的保存在本地數據庫中。 已修改表示修改了文件,但還沒保存到數據庫中。 已暫存表示對一個已修改文件的當前版本作了標記,使之包含在下次提交的快照中。安全

基本的 Git 工做流程以下:

  1. 在工做目錄中修改文件。
  2. 暫存文件,將文件的快照放入暫存區域。
  3. 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。

分佈式版本控制系統一般也有一臺充當「中央服務器」的電腦,但這個服務器的做用僅僅是用來方便「交換」你們的修改,沒有它你們也同樣幹活,只是交換修改不方便而已。

Git官方文檔

Github

Github是一個基於Git的代碼託管平臺,主要爲開發者提供基於Git倉庫的版本託管服務,並提供一個web界面。

Github的付費用戶能夠建私人倉庫,免費用戶只能使用公共倉庫,也就是代碼要公開。

Github 由Chris Wanstrath, PJ Hyett 與Tom Preston-Werner三位開發者在2008年4月創辦。 總部位於美國舊金山。

GitHub最大的特徵:"面向人"。

  • GitHub 與以往的倉庫管理服務最大的不一樣,就在於它以人爲中心,以往的倉庫託管都是以項目爲中心,每一個項目就是一個信息封閉的世界。

SVN與Git的區別

版本管理系統分爲Subversion這種集中型和Git這種分散型。

  • Git是分佈式的,而SVN是集中式的
  • Git沒有一個全局版本號,而SVN有
  • Git把內容按元數據方式存儲,而SVN是按文件
  • Git下載下來後,在OffLine狀態下能夠看到全部的Log,SVN不能夠。
  • 版本庫(repository):SVN只能有一個指定中央版本庫。當這個中央版本庫有問題時,全部工做成員都一塊兒癱瘓直到版本庫維修完畢或者新的版本庫設立完成。而 Git能夠有無限個版本庫。或者,更正確的說法,每個Git都是一個版本庫,區別是它們是否擁有活躍目錄(Git Working Tree)。若是主要版本庫發生了什麼事,工做成員仍然能夠在本身的本地版本庫(local repository)提交,等待主要版本庫恢復便可。工做成員也能夠提交到其餘的版本庫。
  • 提交(Commit)上的不一樣:在SVN,當你提交時,它將直接記錄到中央版本庫。當發現提交的內容存在嚴重問題時,已經沒法阻止事情的發生了。若是網路中斷,則沒法提交。而Git的提交徹底屬於本地版本庫的活動。只需push到主要版本庫便可,至關於在執行「同步」(Sync)。

GitHub與Git的區別

  • Git:開發者將源代碼存入「Git倉庫」的資料庫中
  • GitHub:是在網絡上提供「Git倉庫」的一項服務
  • GitHub與Git的關聯:GitHub上公開的軟件源碼是由Git進行管理,理解Git是熟練運用GitHub的關鍵所在

GitHub使用前的準備

1. 建立帳戶

2. 設置頭像

3.設置SSH Key

GitHub上,鏈接已有倉庫時的認證,是經過使用SSH的公開密鑰認證方式進行的。

  • 建立SSH Key:
$ ssh-keygen -t rsa -C "【此處填寫建立github時的郵箱,例如your_email@example.com】" 
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):【此處按回車鍵】
Enter passphrase (empty for no passphrase): 【此處輸入密碼】
Enter same passphrase again:【此處再次輸入密碼】
複製代碼
  • 輸入密碼後,會出現以下結果,其中 id_rsa文件是私有密鑰, id_rsa.pub是公開密鑰
Your identification has been saved in /Users/your_user_directory/.ssh/id_rsa. 
Your public key has been saved in /Users/your_user_directory/.ssh/id_rsa.pub. 
The key fingerprint is:
fingerprint  your_email@example.com 
The key's randomart image is: +--[ RSA 2048]----+ | .+ + | | =oO. | 【略】 複製代碼

4. 添加公開密鑰

在GitHub中添加公開密鑰,從此就能夠用私有密鑰進行認證了。

  • 打開GitHub/頭像/settings/SSH and GPG Keys/New SSH Key

New SSH Key後,會要求輸入Title和Key:

  • Title中請輸入適當的密鑰名稱

  • Key部分請粘貼 id_rsa.pub 公開密鑰 文件裏的內容,其中獲取 id_rsa.pub 公開密鑰的方式以下:

    $ cat ~/.ssh/id_rsa.pub
    複製代碼

    會獲得如下形式的內容:

  • 添加成功後,建立帳戶時,該郵箱會接到一封"公共密鑰添加完成"的郵件。

5. 添加私人密鑰

只有公開密鑰添加完成後,纔可添加私人密鑰,經過私人密鑰與GitHub進行認證和通訊。

$ ssh -T git@github.com
The authenticity of host 'github.com (207.97.227.239)' can't be established. RSA key fingerprint is fingerprint . Are you sure you want to continue connecting (yes/no)? yes 複製代碼

獲得如下結果,即爲成功:

Hi hirocastest! You've successfully authenticated, but GitHub does not provide shell access. 複製代碼

6. 使用社區功能

Follow

Watch

建立倉庫 new repository

建立一個公開倉庫

右上角的➕/New repository

填寫以下內容

  • Repository name:填寫倉庫名稱

  • Description:填寫倉庫說明

  • Public、Private:公開倉庫Public內全部內容會被公開,選擇Private則爲建立非公開倉庫,用戶能夠設置訪問權限,但須要收費。

  • Initialize this repository with a README:用README文件初始化倉庫,打上勾之後,讓用戶能夠馬上clone這個倉庫。若是想向GitHub添加手中已有的Git倉庫,建議不要勾選,直接手動push。

  • Add .gitignore:

    Add .gitignore這個下拉菜單很方便,經過它能夠在溫馨化時,自動生成Add .gitignore文件(這個文件用來描述Git倉庫中不須要管理的文件與目錄)。

    這個設定會幫咱們把不須要在Git倉庫中進行版本管理的文件記錄在Add .gitignore文件中,省去了每次根據框架進行設置的麻煩。

  • Add a license:

    Add a license菜單能夠選擇要添加的許可協議文件。若是這個倉庫中包含的代碼已經肯定了許可協議,那麼請在這裏進行選擇。

都填充和選擇完後,點擊Create repository,完成倉庫的建立。

連接倉庫

  • 新建倉庫的連接:github.com/用戶名/倉庫名
  • README.md:初始化時就已經生成,通常用來描述本倉庫所包含軟件的概要、使用流程、許可協議等信息。
  • GitHub Flavored Markdown:GitHub上的文檔均可以用Markdown語法編寫,而GitHub Flavored Markdown是GitHub在Markdown語法的基礎上擴充而來的。

公開代碼

  • clone已有倉庫

    打開須要拷貝的倉庫連接,點擊右側按鈕:Clone or download,得到一個git地址(例如:git@github.com:user-name/new-repository.git)

    $ git clone git@github.com:user-name/new-repository.git
    Cloning into 'new-repository'...
    remote: Enumerating objects: 3, done.
    remote: Counting objects: 100% (3/3), done.
    remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    Receiving objects: 100% (3/3), done.
    
    $ cd new-repository
    複製代碼

    注意:這裏會要求輸入GitHub上設置的公開密鑰的密碼,認證後,倉庫便會被clone到倉庫名後的目錄中,將想要公開的代碼提交至這個倉庫再push到GitHub的倉庫中,代碼便會被公開。

  • 幾個經常使用的git命令以下:

    1. 建立文件夾:$ mkdir 文件夾名字
    2. 進入文件夾:$ cd 文件夾名字

Git的命令操做

Git基本操做

本地倉庫連接Github遠程倉庫時,內容上的推送和拉取,必要經過git操做命令來完成。

請查看個人另外一篇關於git基本操做的文章

GitHub提供的主要功能

GitHub快捷鍵 shift+/

打開GitHub快捷鍵一覽表的方式:shift+/

  1. Git倉庫

    咱們能夠免費創建任意個GitHub提供的Git倉庫(可是若是須要建立私有倉庫,則須要花錢)。

  2. Organization 組織、團體

    通常咱們只用我的帳戶就夠了,若是是公司,建議使用Organization帳戶(要花錢),優勢是能夠統一管理帳戶和全縣。

    若是隻是用公開倉庫,是能夠免費建立Organization帳戶的。

  3. Issue

    Issue功能,是將一個任務或問題分配給一個Issue進行追蹤和管理的功能。

    管理issue的系統稱爲BTS(Bug Tracking System,BUG跟蹤系統)。

    遇到如下狀況時,可以使用Issue功能:

    • 發現軟件的bug並報告
    • 有事想向做者詢問、探討
    • 事先列出從此準備實施的任務

    每一個功能更改或修正都對應一個Issue,討論或修正都以這個Issue爲中心進行,發佈一個Issue,就相似發佈了一個話題,你們均可以圍繞這個話題進行討論。只要查看Issue,就能知道全部和這個更改相關的內容,以此進行管理。

    若是別人對你的項目發起了一個Issue,你會經過郵件收到提醒前去查閱便可。

  4. Wiki

    wiki功能,任何人都能隨時對一篇文章進行更改並保存,所以能夠多人共同完成一篇文章。

    經常使用此功能來編寫開發文檔或手冊。

    wiki頁也是做爲Git倉庫進行管理的,能夠記錄各個修改版本。

  5. Pull Request

    開發者向GitHub的倉庫推送更改或功能添加後,能夠經過Pull Request功能向別人的倉庫提出申請,請求對方合併。是GitHub的核心功能。

    GitHub提供了對Pull Request和源代碼先後差異進行討論的功能,可讓程序員更高效的交流。

    在Pull Request頁面可以查看當前處於Open狀態的Pull Request。

    若是你想要以.diff或者.patch格式文件的形式來處理Pull Reques,能夠在URL末尾添加.diff或.patch,例如:

    github.com/userName/re…

    github.com/userName/re…

GitHub界面基本介紹

頂部工具欄

1. LOGO

2. Search 搜索窗口

除了 Trending ,還有一種最主動的獲取開源項目的方式,那就是 GitHub 的 Search 功能。

3. Pull requests 發起請求

Pull requests 是指開發者在本地對源代碼進行更改後,向GitHub中託管的Git倉庫請求合併的功能。

功能:

  1. 開發者能夠在Pull requests上經過評論進行交流,例如:"我試着作了這樣一個新功能,能夠合併一下嗎"等。

Pull requests 這個功能,開發者能夠輕鬆更改源代碼,並公開細節,而後向倉庫提交合並請求,倉庫的建立者選擇性的對其進行合併。

  1. Pull requests 能夠查看源代碼的先後差異

4. Issues 事物卡片

任務管理和 BUG 報告能夠經過 Issue 進行交互。

  • 在團隊協做中,每一個 issue 能夠表明一個任務,Product Owner 爲每個人的每一項任務建立一個issue,由組員自行管理關於本身的issue
  • 每個issue被分配有不一樣的標籤,分爲:
    • new tasks
    • user story
    • working on
    • waiting for checking
    • pass checking
    • pass tests
    • task completed

每名成員動態調整標籤,組長檢查全部帶有waiting for checking的標籤,完成檢查後標記爲pass checking. 經過測試後標記爲pass tests

  • 在project中創建一個新項目,經過看板管理全部的issues,組員動態拖動關於本身的issues,組長按期查看。

若是你是項目的維護者,github還支持你以下的操做:

  • 將一個issue分配給參與者
  • 爲一個issue打上標籤
  • 將一個issue添加到項目的看板
  • 爲一個issue關聯到某個里程碑

github還支持您爲倉庫中或者是pull request中的特定代碼行添加issue

5. Marketplace 集市

向開發者提供工具改進和定製工做流,是一個購買和發現應用的市場。

  • LogRocket 可讓您重播問題,就像在本身的瀏覽器中發生的那樣。 LogRocket不是猜想爲何發生錯誤或向用戶詢問屏幕截圖和日誌,而是爲您提供了用戶看到的視頻記錄,以及控制檯日誌,網絡請求和應用程序狀態,以便您能夠快速找出出錯的內容。

6. Explore

Explore GitHub 會把全部近期有活躍的項目呈現給你們,是沒有通過篩選的,按照默認排序。

例如:

  • Trending,潮流熱門趨勢的意思。這頁裏有一些熱門的開源項目,GitHub就經過這個頁面,作了篩選功能,是你們主動獲取一些開源項目最好的途徑,能夠選擇[當天熱門]、[一週內熱門]、[一月內熱門]。也能夠經過語言分類來查找想要學習的編程語言,例如你想看最近熱門的ios項目,能夠選擇Objective-C語言

7. 鈴鐺🔔 Notifications

鈴鐺旁邊藍色的點提示用戶是否有新的通知。(默認設置中,用戶在GitHub收到通知會同時發送到該帳戶的註冊郵箱)

8. 加號➕ Create a new...

建立新的Git倉庫,或Organization,向Organization添加成員、小組、倉庫,爲倉庫添加Issue或collaborator等操做的殘帶都彙集在這裏。

9. 頭像

用戶設置(我的信息、安全管理、付費方案等)

倉庫(Repository)的功能介紹

Repository,倉庫,存放本身或別人建立的開源項目,也就是若是你想要在Github上建立一個開源項目用來存放代碼,必須建立一個Repository,若是你的開源項目多了,你就會擁有多個Repositories

1. 用戶名/倉庫名

2. Watch/Star/Fork

  • 若是Watch了某倉庫,從此該倉庫的更新信息會顯示在用戶的公開活動中,用戶能夠追蹤倉庫的內容。
  • Star 表示給這個倉庫加星的人數,數量越高,表明該倉庫越受關注。star更像是書籤,能夠在user裏面的Your stars中查看到本身標記了的star倉庫列表。
  • Fork後面的數字表明該倉庫被Fork到各用戶倉庫的次數,數越大,表示參與這個倉庫開發的人越多。

3.Code:

顯示倉庫的文件列表,倉庫名下方是該倉庫的簡單說明和URL。

4.Issues:

用於bug報告、功能添加、方向性討論等,將這些以Issue形式進行管理。Pull Requests時也會建立Issue。旁邊顯示的數字是當前處於Open狀態的Issue數。

5.Pull requests:

Pull Request 是用戶修改代碼後向對方倉庫發送採納請求的功能,是GitHub的核心功能。代碼的更改和討論都在這裏進行,旁邊的數字表示還沒有關閉的Pull Request的數量。

  • Conversation

在Conversation標籤頁中,能夠查看與當前Pull Request相關的全部評論,以及提交歷史。

小功能:想要引用別人的評論,能夠選中當前評論,按R鍵,被選擇的部分會自動以評論語法寫入評論文本框。

  • Commits

Pull Request裏面的commits標籤頁中,按時間順序顯示了與當前Puss Request相關的提交。標籤上的數字爲提交的次數。

  • Checks
  • Files Changed

Files Changed標籤頁中,能夠查看當前Pull Request更改的文件內容以及先後差異。數字表示新建及被更改的文件數。

6.Projects

GitHub的項目管理模式

7.Wiki:

wiki 是一種比HTML語法更簡單的頁面描述功能。經常使用於記錄開發者之間應該共享的信息活着軟件文檔。

全部人均可以對文章進行修改,因此比較適合多人共同編寫文章的狀況。很適合用來針對更新頻率較高的軟件進行文檔等信息方面的彙總。

8.Insights

洞察: Pulse:體現該倉庫軟件開發活躍度的功能。該倉庫中的軟件是 無人問津,仍是在火熱的開發之中,從這裏能夠一目瞭然。 Graphs:以圖表形式顯示該倉庫的各項指標。讓用戶輕鬆瞭解該倉庫的活動傾向。

  • Pulse:體現該倉庫軟件開發活躍度的功能,近期該倉庫建立了多少Pull Request 或 Issue,有多少人蔘與了這個倉庫的開發等,都在這裏一目瞭然
    • Active Pull Requests:經過特按期間內活動過的Pull Request數量
    • Active Issues:特按期間內活動過的issue數
    • commits:commits顯示與提交相關的信息
      • 編寫過代碼的人數
      • 提交的次數
      • default branch 中修改過的文件數
      • default branch 中添加/刪除的行數
  • Contributors:每一個用戶在相應的日期中發送提交、添加代碼、刪除代碼的大體數量。可以瞭解到該倉庫的代碼主要由哪些人編寫。
  • Traffic:
  • Commits:顯示一年內每週收到的提交的大體數量。
  • Code Frequency:顯示了該倉庫中代碼行數的增/刪量。
  • Dependence graph:
  • Network:以圖表形式顯示包括克隆倉庫在內的全部分支的提交。從圖上能夠直觀的看出每一個人作了多少工做。
  • Forks:

9.Settings

更改當前倉庫的設置,用戶必須擁有更改設置的權限才能看到這個菜單。

10.Create new file

能夠在當前倉庫的路徑下新建文件。新建文件做爲一個新的提交記錄在Fork出的分支中。 若是用戶對該倉庫擁有足夠權限,該項則顯示爲Create a new file,用戶能夠直接在當前路徑下新建文件。

11.Upload files

上傳文件到GitHub的倉庫。

12.Find File

能夠查看當前分支的文件。

13.Clone or download

以SSH協議/HTTPS協議下載該倉庫;

Open in Desktop 啓動GitHub客戶端 並進行下載;

經過瀏覽器等下載倉庫的ZIP包

14.項目相關信息

  • a、 commits

    commits 查看當前分支的提交歷史。左側數字表示提交數。

  • b、 branches

    branches 查看倉庫的分支列表。數字表示當前擁有的分支數。

  • c、 releases

    releases 顯示倉庫的標籤(Tag)列表,能夠將標籤加入時的文件以歸檔(.zip、tar.gz)形式下載到本地。

    軟件在版本升級時,通常都會打標籤,若是須要特定版本的文件,從這裏尋找。

  • d、environment

  • e、contributors

    顯示對該倉庫進行過提交的程序員名單。

    若是你對該倉庫發送過Pull Request而且被採納,那麼在這裏就能找到本身的名字。數字表示程序員人數。

  • f、branch

    顯示當前分支的名稱,從這裏能夠切換倉庫內分枝,查看其餘分支的文件。

  • g、new pull request

  • h、files

    files裏面能夠查看當前分支的文件,以及READEME文件。

文件的相關操做

點開文件後,會顯示文件的內容,同時也會顯示一些做用於文件的菜單。

Raw

直接在瀏覽器中顯示該文件的內容。

Blame

按行顯示最新提交的信息。打開之後,左側爲commit時候的提交備註,右側爲當次提交時修改的內容。

History

查看該文件的歷史記錄

本地查看/編輯/刪除

經過部分名稱搜索文件

進入倉庫頁面後,按下鍵盤t鍵,而後輸入要找的目錄貨文件的部分名稱,篩選器會在倉庫的目錄和文件中進行篩選。

查看差異的方法

  1. 查看分支間的差異

    例如:要查看master和patch-1這兩個分支之間的差異,能夠在URL末尾這樣寫:

    github.com/user/projec…master...patch-1

  2. 查看與幾天前的差異

    例如:要查看master分枝在最近7天內的差異,能夠在URL末尾這樣寫:

    github.com/user/projec…master@{7.day.ago}...master

  3. 查看與指定日期之間的差異

    例如:要查看master分枝2019年1月1日與如今的區別,能夠在URL末尾這樣寫:

    github.com/user/projec…master@{2019-01-01}...master

相關文章
相關標籤/搜索