當前位置:
首頁 > 知識 > Github入門與實踐

Github入門與實踐

作者:small2


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


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


拒絕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 內核開發而開發的一個開放源碼的版本控制軟體。


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


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


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

基本操作


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


:初始化倉庫


:查看倉庫狀態


:向暫存區中添加文件


:保存倉庫的歷史記錄


:查看提交日誌


:查看更改前後的差別


:顯示分支一覽表


:創建並切換分支

:切換分支


:合并分支


:回溯歷史版本


:添加遠程倉庫


:推送至遠程倉庫


:獲取遠程倉庫


分支


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


master分支是Git默認創建的分支,它就像河流的主幹,而我們根據需要,創建的一個個分支,就相當於河流分化出來的一個個小分流。


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

特性分支


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


在日常開發過程中,我們常常會創建數個特性分支,同時在保留一個隨時可以發布軟體的穩定分支。穩定分支的角色通常由master擔當。


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


Github


Github是什麼?


Github是一個網站。

Github入門與實踐



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

所以,在我看來,它們兩者的關係就是:Git是一個系統,相當於一個工具,而Github就是基於這樣一個系統的平台,讓開發者更高效地使用Git去託管自己的代碼。


如何使用Github?


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


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


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


在本地通過Git建立一個倉庫,我們稱之為「本地倉庫」,然後進行我們的編程工作。使用Git,可以幫助實現版本控制。


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


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


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


本地倉庫創建——初始化倉庫

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


建立一個目錄,並初始化倉庫。

Github入門與實踐



如果初始化成功,執行了命令的目錄下就會生成.git目錄。這個.git目錄里存著管理當前目錄內容所需的倉庫數據。我們將這個目錄的內容成為「附屬於該倉庫的工作樹」。


查看倉庫狀態


工作樹和倉庫在被操作過程中,狀態會不斷變化,所以需要經常用查看當前狀態。


提交——版本更新


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


——查看倉庫狀態:

Github入門與實踐



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


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

Github入門與實踐



此時再運行,提示「Change to be committed」,說明是提交狀態。


——保存倉庫的歷史記錄:將剛剛的提交狀態保存,這樣就算完成了一個版本控制。


-m 參數後的字元串稱作提交信息,是對這個提交的描述。


查看——倉庫狀態

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


git diff——查看更改前後的差別:查看工作樹、暫存區、最新提交之間的差別。


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

Github入門與實踐



查看工作樹與最新提交的差別:先執行將修改提交到暫存區;如果此時執行,會發現沒有任何顯示,這是因為執行了後工作樹和暫存區的狀態並無差別。要查看與最新提交的差別,要執行。

Github入門與實踐



遠程倉庫準備


創建賬戶:如果你還沒有Github賬戶,那麼你需要先創建一個賬戶。

登錄後,即可使用Github的功能,創建倉庫。

Github入門與實踐



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


打開Git Bash,創建SSH Key。


運行命令:


輸入密碼後,會出現以下結果,表明創建成功:

Github入門與實踐



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


在Github中添加公開密鑰。

Github入門與實踐


Github入門與實踐



創建——建立遠程倉庫


創建:

Github入門與實踐



倉庫配置:

Github入門與實踐



如果想向Github添加手中已有的Git倉庫,建議不要勾選選項;


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


Add a license:選擇要添加的許可協議文件,一般可不選。


創建成功:

Github入門與實踐



克隆——獲取遠程倉庫


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


複製HTTPS鏈接:

Github入門與實踐



打開Git Bash,進入要作為倉庫的文件目錄:


運行命令:


克隆成功:


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


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


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


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


添加遠程倉庫:你需要將遠程倉庫與本地倉庫連接起來,我們用命令來設置本地倉庫的遠程倉庫。


推送至遠程倉庫:如果想將當前本地倉庫分支下的內容推送給遠程倉庫,要用命令。假定我們在master分支(如果是其他分支,最後的參數就改為其它分支對應名稱下操作)

Github入門與實踐


Github入門與實踐



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


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


運行命令行:


拉取成功:

Github入門與實踐



Github幾大功能Issue


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


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


Issue可以在以下情況使用:


發現軟體的Bug並報告;


有事想向作者詢問、探討;


事先列出今後準備實施的任務。


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


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


Pull Request


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


Pull Request的流程:


Fork:將你要修改代碼的項目倉庫Fork到自己的Github賬號上,創建一個屬於你的倉庫;

Github入門與實踐


Github入門與實踐



Clone:將其clone到本地


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

Github入門與實踐



Commit:提交修改

Github入門與實踐



Push:要從Github發送Pull Ruquest,Github端的倉庫必須有一個包含了修改後代碼的分支。所以,要創建本地特性分支的相應遠程分支。


Send:發送Pull Request。

Github入門與實踐


Github入門與實踐


Github入門與實踐



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


Wiki


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


所有有許可權的人都可以對文中進行修改。


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


微信公眾號內回複數字「1」


小編拉你進粉絲微信群


不是在文章評論里回復


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員之家 的精彩文章:

TAG:程序員之家 |

您可能感興趣

Docker 從入門到實踐
Github 代碼實踐:Pytorch 實現的語義分割器
Github代碼實踐:Pytorch實現的語義分割器
GemFire與Greenplum的最佳集成實踐之實施經驗談
router-router 4 按需載入實踐
Georgia Tech-真正的理論與實踐結合
技術解析系列PouchContainer Goroutine Leak 檢測實踐
從Paxos到zookeeper分散式一致性原理與實踐-Zookeeper與Paxos
TalkingData的Spark On Kubernetes實踐
Android Studio中的13條Git實踐
5分鐘了解TencentHub技術架構與DevOps實踐揭秘
GitHub 開源跨平台神器 Electron 實踐 | 技術頭條
快速搭建你的 github pages 個人博客——基於 Create-React-App 的單頁面應用實踐
Apache Storm流計算模型 及WordCount源碼實踐
華為在OpenStack Days China上分享混合雲行業場景及優秀實踐
Git 最佳實踐:commit msg
深度學習之CapsuleNets理論與Python實踐!
RPC框架實踐之:Apache Thrift
從選擇到實踐——It』s now or never
9項Kubernetes安全最佳實踐