Github是一個面向開源及私有軟件項目的託管平臺,因爲用戶人羣中多可是男女比例嚴重失調,在程序屆被戲稱全球最大同性交友網站。當年Linux系統橫空出世,盛況空前,愈來愈多的程序猿加入到開發維護大軍中,如此龐大的項目體量沒有一個好的項目託管平臺怎麼行,因而Linux的創始人Linus大牛花了兩週的時間本身用C語言編寫了一個分佈式版本控制系統,就是Git,而後Git就迅速成爲最流行的分佈式版本控制系統,在2008年,Github網站上線了,它爲開源項目免費提供Git存儲,就在去年以75億美金的價格被微軟爸爸收購了(來自貧窮的凝視)。git
如今VS Code中內置Git,配置一下文件路徑和默認打開方式就能夠直接在VS Code中進行Git操做,十分方便快捷。
github
全球不少頂級的科技公司都將本身的項目貢獻到Github上,同時咱們也能夠在上面找到許多很是優秀的開源項目。感謝Github讓咱們能夠在一個開放暢通的互聯網世界任意馳騁,如今Github已經成了產品開發過程當中的門面擔當,不少企業在面試的時候都會要求應試者提供下Github帳戶,一個出色的Github帳號確定會爲你在求職中增色很多。面試
簡單介紹了GitHub 的誕生和歷史,接下來就爲你們講解一下,如何使用操做。windows
這裏是Git的官方網站,涵蓋了很是全面的Git文檔:
https://git-scm.com/安全
市面上有不少Git教程,也有相關書籍,一般都是很厚一本,若是你是初學者,推薦廖雪峯老師的Git教程,基本功能都有涵蓋,由淺入深,可讓你快速上手使用。這篇文章就是基於他的教程,按照我本身的使用習慣,從一個新手角度再從新整理,認真學習後每一個人都會有不一樣的收穫,找到適合本身的就好。網絡
首先須要在本身的電腦上本地安裝GIt,Mac系統自帶Git,windows系統須要下載安裝一下,過程很簡單方便,這裏就不贅述了,針對各個不一樣系統的具體安裝方法請參考廖雪峯老師的博客:
https://www.liaoxuefeng.com/w...ssh
在Github網站填寫用戶名、郵箱、密碼註冊我的帳戶。
分佈式
註冊成功以後你就會進入到Github主頁,上方是導航欄,下方從左到右依次是:學習
倉庫:你建立的全部倉庫會在這裏顯示網站
時間線:你關注的人的一些活動,好比說他建立了新的倉庫,或者star、fork了某些項目等等這些操做就會顯示在這裏,相似微博動態。
發現新倉庫:這裏會給推薦一些標星比較高的優秀項目,相似於熱門微博。
簡單介紹下頭部導航欄的各個模塊:
LOGO:點擊進入Github首頁
搜索框:搜索用戶或者項目
Pull requestes:查看推送請求信息
Issues:查看問題推送信息
Marketplace:這裏提供最新的軟件,是代碼軟件集市
Explore:介紹Github上的熱門軟件
安裝Git完成以後,在命令行輸入:
$ git config --global user.name "你的Github用戶名"
$ git config --global user.email "你的Github註冊郵箱"
來配置你本身的Github用戶名和Email地址
github須要經過ssh協議來確認內容是你推送的,否則任何人均可以往你的倉庫中提交修改,就很危險了。使用多臺電腦開發就要配置多個SSH Key,經過SSH key來確保你能把內容推送到你本人的倉庫中。
首先在本地找到.ssh目錄,mac用戶使用快捷鍵:shift+command+G輸入~/.ssh快速查找。查看目錄下有沒有id_rsa(私鑰)和id_rsa.pub(公鑰)這兩個文件,若是沒有,能夠在終端中運行ssh-keygen -t rsa -C 「你的github郵箱"來生成ssh Key。
進入github網站在右上角點擊我的頭像,在下方找到Settings,在左側第六個選項中找到SSH and GPG Keys,點擊New SSH key,將你的id_rsa.pub裏的內容粘貼到Key中,填上任意的Title,保存,此時你就能夠在本地向遠程github倉庫推送內容。
(1)初始化一個git倉庫:git init
執行完這條命令後當前目錄下會多一個.git目錄,這個目錄是git來跟蹤管理版本庫的,千萬不要把它刪除,看不到這個文件的修改一下本身的文件項,打開顯示隱藏文件。
(2)把文件添加到倉庫命令:
git add 文件名 將指定文件添加到暫存區,多個文件之間用空格隔開
git add /git add -A/git add --all 將工做區內容所有加入暫存區(包括新增、修改、刪除文件操做)
git add .將當前目錄下的全部內容所有加入暫存區(包括新增、修改文件操做)
執行完添加操做,沒有任何顯示就對了,在使用git的過程當中牢記:沒有消息就是好消息,只有出錯的時候它纔會給你報錯的提示信息。
這條命令能夠反覆屢次使用,將你須要添加的文件都提交到暫存區,而後執行一次git commit就能夠將屢次提交到暫存區的文件一次性提交到當前分支。
(3)把文件提交到當前分支
git commit -m 「提交說明」
git status 查看當前工做區的提交狀態。所有提交後顯示:
nothing to commit, working tree clean
git diff 查看修改的內容。會比對暫存區和工做區的文件內容。
(4)推送到遠程倉庫
首先新建一個遠程倉庫,在Github主頁右上角點擊加號,選擇第一個選項new repository,填寫Repository name倉庫名,Description描述,選擇public屬性,勾選Initial this repository with a README會自動生成一個MarkDown格式的README文檔。這樣咱們就在遠程建立好了一個Git倉庫。目前Github上建立公開倉庫是免費的,全部人均可以看到倉庫中的內容,若是想建立私人倉庫是收費的,它鼓勵你們開源。
建立好倉庫以後他分三種狀況給出不一樣提示:
在本地新建倉庫,並推送內容到遠程倉庫
咱們只須要按照以下指令,依次執行:
echo "# Git-Test-Demo" >> README.md 新建一個README文件並寫入內容
git init 生成.git版本庫
git add README.md將當前工做區的文件提交到暫存區
git commit -m "first commit」將暫存區的內容提交到當前分支
git remote add origin git@github.com:Hanxueqing/Git-Test-Demo.git 在本地關聯遠程庫
這裏你能夠選擇使用HTTPS鏈接或者SSH鏈接,使用HTTPS鏈接時每次推送都會要求有密碼驗證,相對來講比較安全,缺點是速度慢。若是使用SSH鏈接,第一次使用Git的clone或者push命令鏈接GitHub時,會獲得一個警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established. RSA key fingerprint is xx.xx.xx.xx.xx. Are you sure you want to continue connecting (yes/no)?
輸入yes便可
Git會輸出一個警告,告訴你已經把GitHub的Key添加到本機的一個信任列表裏了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
這個警告只會出現一次,後面的操做就不會有任何警告了。
git push -u origin master將當前分支推送到origin主機的對應分支。
因爲遠程庫是空的,咱們第一次推送master分支時,加上了-u參數,將本地的master分支推送到origin主機,同時指定origin爲默認主機,在之後的推送或者拉取時就能夠簡化命令,不加任何參數直接使用git push來推送了。
若是本地已有倉庫,想的內容快速推送到當前倉庫,只須要執行以下兩條指令:
git remote add origin git@github.com:Hanxueqing/Git-Test-Demo.git
git push -u origin master
你也能夠從其餘版本控制系統如Subversion, Mercurial, or TFS project中導入倉庫
因爲我一開始新建倉庫的時候勾選了自動生成README文檔,而我本地的文件中又不存在這個文檔,因此向遠程倉庫push的時候會報錯,提示:
error: failed to push some refs to 'git@github.com:Hanxueqing/Maoyan-API.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
緣由是本身當前版本低於遠程倉庫版本,能夠在push以前先將遠程倉庫pull到本地,執行git pull origin master命令,再執行git push -u origin master命令推送到遠程倉庫。
或者新建立一個分支git branch 分支名,而後push到這個新分支上去git push -u origin 分支名。
這裏我就直接使用了強制push的方法:git push -u origin master -f,可是它會覆蓋遠程的文件,通常不建議使用,尤爲是多人開發的時候。
在本地執行完以上操做後就能夠終端中出現提交成功的命令。
此時咱們在github帳戶上進入以前建立的倉庫會發現,全部工做區的文件已經在遠程同步上傳好了。
簡單講解一下倉庫中各個模塊的功能:
Watch:相似於關注,watch了某個項目以後,之後只要這個項目有任何更新,你都會收到通知提醒。
Star:相似於點贊,在Github上得到標星可比在社交網絡中困難多了,通常能得到1000+star的項目就已經很是不錯了。前一陣子在開發圈大火的996icu項目目前標星已經達到了245k。
Fork:將這個倉庫的項目建立一個分支,添加到本身的倉庫中,你就能夠在原有倉庫的基礎上本身開發,等功能完善後再發起pull request請求與原倉庫合併分支,將功能進行整合。
Code:顯示該倉庫的文件列表。
Issues:主要用於BUG報告、功能添加、方向性討論等,相似於一個討論區留言板功能,將BUG以Issues的形式進行管理,解決掉後能夠手動關閉Issues。
Pull request:查看並管理別人發來的pull request請求。
Projects:這是一個很強大的項目管理模式,能夠將你的issues更好地進行管理,有人利用Project+Issues在Github上編寫技術博客。
感興趣的能夠關注下:
https://github.com/johnnian/Blog
Wiki:Wiki 是一種比 HTML 語法更簡單的頁面描述功能。經常使用於記錄開發者之間應該共享的信息或軟件文檔。
Security:安全警告
Insights:顯示倉庫的活動信息,檢測開發進度
Settings:設置,在這裏能夠對當前倉庫進行設置,例如倉庫名更改,描述信息更改,以及刪除當前倉庫,不過這個操做比較危險,它會讓你輸入當前倉庫名稱進行二次確認,若是是倉庫中有內容還會讓你輸入帳戶和密碼再次進行確認,安全等級很是高。
commits:提交日誌
branches:分支管理
releases:發行版本管理
contributors:參與開發的人員
Branch:master :切換分支,顯示不一樣分支下的文件列表
New pull request :向原有倉庫發起合併請求
Create new file :建立新文件
Upload files :上傳文件
Find files :查找文件
Clone or download :提供克隆、下載的https協議或者SSH協議
這裏咱們得先明確幾個概念:工做區、暫存區、當前分支、遠程倉庫
工做區:咱們本身電腦裏的文件目錄
暫存區:.git目錄中的stage文件,暫時存放咱們對於文件的修改,git add就是把文件添加到暫存區。
當前分支:git爲咱們自動建立一個master主分支,git commit就是把文件修改提交到當前分支。
遠程倉庫:咱們一開始建立的Repository,git push就是把全部修改推送到遠程倉庫。
撤銷工做區的修改(此時你只是修改了文件,可是尚未進行任何git操做):git checkout -- file
撤銷暫存區的修改(此時你不只修改了文件,還git add將修改添加到了暫存區):git reset HEAD <file> 再執行git checkout -- file
撤銷提交到分支的修改(此時你不只修改了文件,還git add將修改添加到了暫存區,同時git commit提交到了當前分支):進行接下來要講到的版本回退操做
若是你向當前的倉庫中屢次提交了修改文件,可使用git log查看完整的提交日誌,commit後面的一大串數字就是版本號,git經過讓內部HEAD指針指向特定版本號來實現版本的回退與前進。
若是你屢次提交,有一長串的提交日誌,不想顯示Author和Date,只須要第一行數據能夠運行git log --pretty=oneline
若是你以爲commitId太長,只想保留幾位有效數字,能夠運行git log --oneline --graph
回退命令:git reset --hard commit_id 能夠回退到指定版本
git reset --hard HEAD^ HEAD指向的是當前版本,HEAD就是上一個版本,上上個版本就是HEAD^,若是回退到更早期的版本能夠寫成HEAD-數字(回退到以前的多少個版本)
前進命令:執行過版本回退命令後再執行git log會發現此版本以後更新的版本不見了,此時也不用驚慌,它並無被刪除或者覆蓋,git提供了一個命令:git reflog來記錄你的每一次命令,只要找到你想恢復文件的commit id,再執行git reset --hard commit_id就能夠來到指定版本了。
(1)你在工做區刪除了某一個文件,想同步修改到遠程倉庫。
git status查看當前狀態,顯示當前工做區中該文件已被刪除,使用git rm 文件名命令將版本庫中的該文件刪除,而後git commit上傳到當前分支。
(2)你在工做區誤刪除了某一個文件,想從遠程倉庫將該文件恢復回來。(前提是你在工做區刪除的這個文件以前已經提交過版本庫)
git checkout -- 文件名
Git checkout實際上是用版本庫裏的文件替換工做區的文件,不管工做區是修改仍是刪除文件,均可以一鍵還原,可是你只能恢復文件到版本庫中的最新版本,若是你在提交版本庫後又作了一些修改可是沒有及時提交,git不會自動幫你記錄這些修改。
首先咱們來理解一下分支的概念,以前已經提到過git會爲咱們自動建立一個master主分支,可是在多人項目開發的時候,咱們不能全部人都往主分支上提交修改,那樣存在很大的安全隱患,這時候git鼓勵咱們使用分支完成任務,HEAD指針指向當前分支,每一個人往本身的分支上提交文件,互不干擾,平時本身開發項目時也可使用分支來管理不一樣功能模塊,最後使用合併分支命令,將文件整合到一塊兒,這和直接在master分支上工做效果是同樣的,但過程更安全。
也就是說,在實際開發中,master分支應該是很是穩定的,僅用來發布新版本,平時不能在上面操做,具體的操做咱們能夠在dev上進行,把每一個人的分支合併到dev分支上,在版本發佈的時候再把dev的分支合併到master上。
建立分支
git checkout -b 分支名
git checkout命令加上-b參數表示建立並切換,至關於如下兩條命令:
$ git branch 分支名建立分支
$ git checkout 分支名切換分支
將本地建立的分支推送到遠程
git push origin 分支名
查看分支
git branch命令會列出全部分支,當前分支前面會標一個*號。
git branch -r查看遠程分支
git branch -a查看全部分支
合併分支
git merge 分支名 (注:合併前要切回要併入的分支,不能在當前分支下進行合併)
刪除分支
git branch -d 分支名
git branch -D 分支名強行刪除一個沒有被合併過的分支,默認狀況下是不容許刪除沒有被合併過的分支的。
git clone 倉庫地址倉庫首頁能夠找到倉庫地址,經過clone命令克隆到本地。
關於Github的使用就簡單介紹到這裏,可是它的功能遠不止於此,知乎上有個回答,如何有效的使用Github,有人用它放簡歷、寫博客、寫書、看資訊,有人把它當朋友圈、微博,跟技術大牛互動,把連接貼上來,有興趣的能夠關注看看:
https://www.zhihu.com/questio...
總之,它就像一個寶藏,永遠有閃光點和值得學習的地方有待於咱們去發掘。