在介紹Github以前,咱們一塊兒瞭解一下SVN、Git、Github這三個概念、分別的責任以及相關聯的區別。ios
SVN(Subversion)是集中式管理的版本控制器。git
SVN只有一個單一的集中管理的服務器,保存全部文件的修訂版本,而協同工做的人們都經過客戶端連到這臺服務器,取出最新的文件或者提交更新。就比如是一個圖書館,你要改一本書,必須先從圖書館借出來,而後回到家本身改,改完了,再放回圖書館。程序員
集中式版本控制系統最大的問題就是必須聯網才能工做,若是在局域網內還好,帶寬夠大,速度夠快,可若是在互聯網上,遇到網速慢的話,可能提交一個10M的文件就須要5分鐘。 github
Git是分佈式管理的版本控制器。web
簡單介紹一下Git:shell
Linux的創始人Linus Torvalds在2015年開發了Git的原型程序。Linux內核的更新速度在全世界也是數一數二。數據庫
Git 像是把數據看做是對小型文件系統的一組快照。 每次你提交更新,或在 Git 中保存項目狀態時,它主要對當時的所有文件製做一個快照並保存這個快照的索引。 爲了高效,若是文件沒有修改,Git 再也不從新存儲該文件,而是隻保留一個連接指向以前存儲的文件。 Git 對待數據更像是一個 快照流。編程
Git每個終端都是一個倉庫,客戶端並不僅提取最新版本的文件快照,而是把原始的代碼倉庫完整地鏡像下來。每一次的提取操做,實際上都是一次對代碼倉庫的完整備份。瀏覽器
Git 有三種狀態,你的文件可能處於其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。 已提交表示數據已經安全的保存在本地數據庫中。 已修改表示修改了文件,但還沒保存到數據庫中。 已暫存表示對一個已修改文件的當前版本作了標記,使之包含在下次提交的快照中。安全
基本的 Git 工做流程以下:
- 在工做目錄中修改文件。
- 暫存文件,將文件的快照放入暫存區域。
- 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。
分佈式版本控制系統一般也有一臺充當
「中央服務器」
的電腦,但這個服務器的做用僅僅是用來方便「交換」你們的修改,沒有它你們也同樣幹活,只是交換修改不方便而已。
Github是一個基於Git的代碼託管平臺,主要爲開發者提供基於Git倉庫的版本託管服務,並提供一個web界面。
Github的付費用戶能夠建私人倉庫,免費用戶只能使用公共倉庫,也就是代碼要公開。
Github 由Chris Wanstrath, PJ Hyett 與Tom Preston-Werner三位開發者在2008年4月創辦。 總部位於美國舊金山。
GitHub最大的特徵:"面向人"。
- GitHub 與以往的倉庫管理服務最大的不一樣,就在於它以人爲中心,以往的倉庫託管都是以項目爲中心,每一個項目就是一個信息封閉的世界。
版本管理系統分爲Subversion這種集中型和Git這種分散型。
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. | 【略】 複製代碼
在GitHub中添加公開密鑰,從此就能夠用私有密鑰進行認證了。
New SSH Key
後,會要求輸入Title和Key:
Title中請輸入適當的密鑰名稱
Key部分請粘貼 id_rsa.pub 公開密鑰 文件裏的內容,其中獲取 id_rsa.pub 公開密鑰的方式以下:
$ cat ~/.ssh/id_rsa.pub
複製代碼
會獲得如下形式的內容:
添加成功後,建立帳戶時,該郵箱會接到一封"公共密鑰添加完成"的郵件。
只有公開密鑰添加完成後,纔可添加私人密鑰,經過私人密鑰與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. 複製代碼
Follow
Watch
右上角的➕/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,完成倉庫的建立。
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命令
以下:
$ mkdir 文件夾名字
$ cd 文件夾名字
本地倉庫連接Github遠程倉庫時,內容上的推送和拉取,必要經過git操做命令來完成。
打開GitHub快捷鍵一覽表的方式:shift+/
Git倉庫
咱們能夠免費創建任意個GitHub提供的Git倉庫(可是若是須要建立私有倉庫,則須要花錢)。
Organization 組織、團體
通常咱們只用我的帳戶就夠了,若是是公司,建議使用Organization帳戶(要花錢),優勢是能夠統一管理帳戶和全縣。
若是隻是用公開倉庫,是能夠免費建立Organization帳戶的。
Issue
Issue功能,是將一個任務或問題分配給一個Issue進行追蹤和管理的功能。
管理issue的系統稱爲BTS(Bug Tracking System,BUG跟蹤系統)。
遇到如下狀況時,可以使用Issue功能:
- 發現軟件的bug並報告
- 有事想向做者詢問、探討
- 事先列出從此準備實施的任務
每一個功能更改或修正都對應一個Issue,討論或修正都以這個Issue爲中心進行,發佈一個Issue,就相似發佈了一個話題,你們均可以圍繞這個話題進行討論。只要查看Issue,就能知道全部和這個更改相關的內容,以此進行管理。
若是別人對你的項目發起了一個Issue,你會經過郵件收到提醒前去查閱便可。
Wiki
wiki功能,任何人都能隨時對一篇文章進行更改並保存,所以能夠多人共同完成一篇文章。
經常使用此功能來編寫開發文檔或手冊。
wiki頁也是做爲Git倉庫進行管理的,能夠記錄各個修改版本。
Pull Request
開發者向GitHub的倉庫推送更改或功能添加後,能夠經過Pull Request功能向別人的倉庫提出申請,請求對方合併。是GitHub的核心功能。
GitHub提供了對Pull Request和源代碼先後差異進行討論的功能,可讓程序員更高效的交流。
在Pull Request頁面可以查看當前處於Open狀態的Pull Request。
若是你想要以.diff或者.patch格式文件的形式來處理Pull Reques,能夠在URL末尾添加.diff或.patch,例如:
除了 Trending ,還有一種最主動的獲取開源項目的方式,那就是 GitHub 的 Search 功能。
Pull requests 是指開發者在本地對源代碼進行更改後,向GitHub中託管的Git倉庫請求合併的功能。
功能:
- 開發者能夠在Pull requests上經過評論進行交流,例如:"我試着作了這樣一個新功能,能夠合併一下嗎"等。
Pull requests 這個功能,開發者能夠輕鬆更改源代碼,並公開細節,而後向倉庫提交合並請求,倉庫的建立者選擇性的對其進行合併。
- Pull requests 能夠查看源代碼的先後差異
任務管理和 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
向開發者提供工具改進和定製工做流,是一個購買和發現應用的市場。
Explore GitHub 會把全部近期有活躍的項目呈現給你們,是沒有通過篩選的,按照默認排序。
例如:
- Trending,潮流熱門趨勢的意思。這頁裏有一些熱門的開源項目,GitHub就經過這個頁面,作了篩選功能,是你們主動獲取一些開源項目最好的途徑,能夠選擇[當天熱門]、[一週內熱門]、[一月內熱門]。也能夠經過語言分類來查找想要學習的編程語言,例如你想看最近熱門的ios項目,能夠選擇Objective-C語言
鈴鐺旁邊藍色的點提示用戶是否有新的通知。(默認設置中,用戶在GitHub收到通知會同時發送到該帳戶的註冊郵箱)
建立新的Git倉庫,或Organization,向Organization添加成員、小組、倉庫,爲倉庫添加Issue或collaborator等操做的殘帶都彙集在這裏。
用戶設置(我的信息、安全管理、付費方案等)
Repository,倉庫,存放本身或別人建立的開源項目,也就是若是你想要在Github上建立一個開源項目用來存放代碼,必須建立一個Repository,若是你的開源項目多了,你就會擁有多個Repositories
- 若是Watch了某倉庫,從此該倉庫的更新信息會顯示在用戶的公開活動中,用戶能夠追蹤倉庫的內容。
- Star 表示給這個倉庫加星的人數,數量越高,表明該倉庫越受關注。star更像是書籤,能夠在user裏面的Your stars中查看到本身標記了的star倉庫列表。
- Fork後面的數字表明該倉庫被Fork到各用戶倉庫的次數,數越大,表示參與這個倉庫開發的人越多。
顯示倉庫的文件列表,倉庫名下方是該倉庫的簡單說明和URL。
用於bug報告、功能添加、方向性討論等,將這些以Issue形式進行管理。Pull Requests時也會建立Issue。旁邊顯示的數字是當前處於Open狀態的Issue數。
Pull Request 是用戶修改代碼後向對方倉庫發送採納請求的功能,是GitHub的核心功能。代碼的更改和討論都在這裏進行,旁邊的數字表示還沒有關閉的Pull Request的數量。
- Conversation
在Conversation標籤頁中,能夠查看與當前Pull Request相關的全部評論,以及提交歷史。
小功能:想要引用別人的評論,能夠選中當前評論,按R鍵,被選擇的部分會自動以評論語法寫入評論文本框。
- Commits
Pull Request裏面的commits標籤頁中,按時間順序顯示了與當前Puss Request相關的提交。標籤上的數字爲提交的次數。
- Checks
- Files Changed
Files Changed標籤頁中,能夠查看當前Pull Request更改的文件內容以及先後差異。數字表示新建及被更改的文件數。
GitHub的項目管理模式
wiki 是一種比HTML語法更簡單的頁面描述功能。經常使用於記錄開發者之間應該共享的信息活着軟件文檔。
全部人均可以對文章進行修改,因此比較適合多人共同編寫文章的狀況。很適合用來針對更新頻率較高的軟件進行文檔等信息方面的彙總。
洞察: 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:
更改當前倉庫的設置,用戶必須擁有更改設置的權限才能看到這個菜單。
能夠在當前倉庫的路徑下新建文件。新建文件做爲一個新的提交記錄在Fork出的分支中。 若是用戶對該倉庫擁有足夠權限,該項則顯示爲Create a new file,用戶能夠直接在當前路徑下新建文件。
上傳文件到GitHub的倉庫。
能夠查看當前分支的文件。
以SSH協議/HTTPS協議下載該倉庫;
Open in Desktop 啓動GitHub客戶端 並進行下載;
經過瀏覽器等下載倉庫的ZIP包
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文件。
點開文件後,會顯示文件的內容,同時也會顯示一些做用於文件的菜單。
直接在瀏覽器中顯示該文件的內容。
按行顯示最新提交的信息。打開之後,左側爲commit時候的提交備註,右側爲當次提交時修改的內容。
查看該文件的歷史記錄
進入倉庫頁面後,按下鍵盤t鍵,而後輸入要找的目錄貨文件的部分名稱,篩選器會在倉庫的目錄和文件中進行篩選。
查看分支間的差異
例如:要查看master和patch-1這兩個分支之間的差異,能夠在URL末尾這樣寫:
github.com/user/projec…master...patch-1
查看與幾天前的差異
例如:要查看master分枝在最近7天內的差異,能夠在URL末尾這樣寫:
github.com/user/projec…master@{7.day.ago}...master
查看與指定日期之間的差異
例如:要查看master分枝2019年1月1日與如今的區別,能夠在URL末尾這樣寫:
github.com/user/projec…master@{2019-01-01}...master