Github入門與實(shí)踐

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

用github有一陣子了西疤,因?yàn)椴粫?huì)用Git烦粒,所以一直是通過GUI客戶端程序去同步代碼的,這樣明顯很low代赁。而且扰她,好多地方都沒搞清楚,比如芭碍,Issue用來干什么徒役?Pull Request怎么使用?

拒絕GUI窖壕,必須命令行忧勿。

看了《Github入門與實(shí)踐》一書杉女,經(jīng)過一番梳理和實(shí)踐,這次我終于懂得用Git和Github了鸳吸。

思維導(dǎo)圖

思維導(dǎo)圖
思維導(dǎo)圖

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是一款免費(fèi)、開源的分布式版本控制系統(tǒng)晌砾,用于敏捷高效地處理任何或小或大的項(xiàng)目坎拐。]

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

Git可以幫助我們管理代碼养匈,它是一個(gè)分布式版本控制系統(tǒng)哼勇。它設(shè)計(jì)了倉庫(版本庫)這樣一種管理機(jī)制;同時(shí)呕乎,不同于SVN,CVS集中式的版本控制理念积担,Git是分布式版本控制。

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

而且磅轻,Git是通過命令行操作的珍逸。

基本操作

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

  • 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:添加遠(yuǎn)程倉庫
  • git push:推送至遠(yuǎn)程倉庫
  • git clone:獲取遠(yuǎn)程倉庫

分支

在進(jìn)行多個(gè)并行作業(yè)時(shí)谆膳,我們會(huì)用到分支叭爱。

master分支是Git默認(rèn)創(chuàng)建的分支,它就像河流的主干漱病,而我們根據(jù)需要买雾,創(chuàng)建的一個(gè)個(gè)分支,就相當(dāng)于河流分化出來的一個(gè)個(gè)小分流杨帽。

我們?cè)诜种线M(jìn)行編程作業(yè)(例如漓穿,每個(gè)負(fù)責(zé)項(xiàng)目的一個(gè)模塊開發(fā)),當(dāng)完成之后注盈,進(jìn)行審核無誤晃危,再合并到主分支master上,這樣就能合理高效地實(shí)現(xiàn)多人并行開發(fā)老客。

特性分支

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

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

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

Github

Github是什么损话?

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

Github
Github

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

所以拧烦,在我看來,它們兩者的關(guān)系就是:Git是一個(gè)系統(tǒng)钝计,相當(dāng)于一個(gè)工具恋博,而Github就是基于這樣一個(gè)系統(tǒng)的平臺(tái),讓開發(fā)者更高效地使用Git去托管自己的代碼私恬。

如何使用Github债沮?

因?yàn)镚it是使用倉庫進(jìn)行版本控制的,所以我們?cè)贕ithub的操作也是圍繞著倉庫展開本鸣。

當(dāng)我們想管理一個(gè)項(xiàng)目的代碼時(shí)疫衩,我們就在Github上創(chuàng)建一個(gè)倉庫,然后上傳項(xiàng)目代碼荣德,就實(shí)現(xiàn)了代碼托管闷煤。

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

  1. 在本地通過Git建立一個(gè)倉庫涮瞻,我們稱之為“本地倉庫”鲤拿,然后進(jìn)行我們的編程工作。使用Git署咽,可以幫助實(shí)現(xiàn)版本控制近顷。

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

或者督怜,如果是先在Github上建立了倉庫殴瘦,設(shè)置好了項(xiàng)目,那么就將遠(yuǎn)程倉庫的項(xiàng)目克隆到本地倉庫号杠,同理蚪腋。

我個(gè)人的理解是,遠(yuǎn)程倉庫——操作Github姨蟋;本地倉庫——操作Git屉凯。

本地倉庫

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

要使用Git進(jìn)行版本管理,必須先初始化倉庫眼溶。

  1. 建立一個(gè)目錄悠砚,并初始化倉庫。


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

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

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

提交——版本更新

編輯完代碼后稼稿,一個(gè)完整的提交流程應(yīng)該是:git status -> git add -> git commit薄榛。

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

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

  1. git add——加入暫存區(qū):暫存區(qū)是提交之前的一個(gè)臨時(shí)區(qū)域敞恋。git add將其加入暫存區(qū),為保存到工作樹中做準(zhǔn)備谋右。

此時(shí)再運(yùn)行git status硬猫,提示“Change to be committed”,說明是提交狀態(tài)改执。

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

-m 參數(shù)后的字符串稱作提交信息辈挂,是對(duì)這個(gè)提交的描述衬横。

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

  1. git log——查看提交日志:查看以往倉庫中提交的日志,什么人在什么時(shí)候進(jìn)行了提交或合并终蒂,以及操作前后有怎樣的差別蜂林。


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

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

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

遠(yuǎn)程倉庫

準(zhǔn)備

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

  2. 設(shè)置SSH Key:Github上倉庫與本地倉庫連接,是通過使用了SSH的公開秘鑰認(rèn)證方式進(jìn)行的将塑。所以脉顿,得現(xiàn)在本地生成SSH Key,然后設(shè)置到Github上点寥,才能實(shí)現(xiàn)倉庫的遠(yuǎn)程連接艾疟。

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

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


    id_rsa是私有密鑰戚长,id_rsa.pub是公開密鑰盗冷。

  • 在Github中添加公開密鑰。

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

  1. 創(chuàng)建:

  2. 倉庫配置:

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

克隆——獲取遠(yuǎn)程倉庫

當(dāng)你是先在Github上創(chuàng)建好項(xiàng)目倉庫時(shí)帐姻,此時(shí)需要把遠(yuǎn)程倉庫克隆到本地稠集,創(chuàng)建一個(gè)本地倉庫奶段。

  1. 復(fù)制HTTPS鏈接:
  1. 打開Git Bash,進(jìn)入要作為倉庫的文件目錄:


  2. 運(yùn)行命令:git clone https://github.com/Monkey626/test.git

  3. 克隆成功:

  1. 進(jìn)入倉庫:查看當(dāng)前倉庫分支信息剥纷。


執(zhí)行g(shù)it clone命令后痹籍,我們會(huì)默認(rèn)處于master分支下,同時(shí)系統(tǒng)會(huì)自動(dòng)將origin設(shè)置成該遠(yuǎn)程倉庫的標(biāo)識(shí)符(即origin代表了該遠(yuǎn)程倉庫)晦鞋。

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

當(dāng)在本地完成好編程作業(yè)時(shí)蹲缠,此時(shí)需要將代碼同步到遠(yuǎn)程倉庫,以實(shí)現(xiàn)托管悠垛。

  1. 添加遠(yuǎn)程倉庫:你需要將遠(yuǎn)程倉庫與本地倉庫連接起來线定,我們用git remote add命令來設(shè)置本地倉庫的遠(yuǎn)程倉庫。
  1. 推送至遠(yuǎn)程倉庫:如果想將當(dāng)前本地倉庫分支下的內(nèi)容推送給遠(yuǎn)程倉庫确买,要用git push命令斤讥。假定我們?cè)趍aster分支(如果是其他分支,最后的參數(shù)就改為其它分支對(duì)應(yīng)名稱)下操作

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

當(dāng)你的隊(duì)友將完成了編程作業(yè)湾趾,將其代碼推送到遠(yuǎn)程倉庫后芭商,此時(shí),你可能需要將代遠(yuǎn)程倉庫隊(duì)友更新后的代碼拉到本地搀缠,這時(shí)要用到git pull命令铛楣。

  1. 運(yùn)行命令行git pull
  1. 拉取成功:

Github幾大功能

Issue

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

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

Issue可以在以下情況使用:

  • 發(fā)現(xiàn)軟件的Bug并報(bào)告缴罗;
  • 有事想向作者詢問助琐、探討祭埂;
  • 事先列出今后準(zhǔn)備實(shí)施的任務(wù)面氓。

Issue支持markdown語法,也支持添加標(biāo)簽便于管理蛆橡。

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

Pull Request

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

Pull Request的流程:

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



  2. Clone:將其clone到本地


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


  4. Commit:提交修改

  1. Push:要從Github發(fā)送Pull Ruquest猾普,Github端的倉庫必須有一個(gè)包含了修改后代碼的分支袜炕。所以,要?jiǎng)?chuàng)建本地特性分支的相應(yīng)遠(yuǎn)程分支初家。
  1. Send:發(fā)送Pull Request偎窘。


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

Wiki

Wiki是一個(gè)使用簡(jiǎn)單的語法就能編寫文檔的功能陌知。

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

Wiki多被用于編寫博客文章掖肋、教程仆葡、使用手冊(cè)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末志笼,一起剝皮案震驚了整個(gè)濱河市浙芙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌籽腕,老刑警劉巖嗡呼,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異皇耗,居然都是意外死亡南窗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門郎楼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來万伤,“玉大人,你說我怎么就攤上這事呜袁〉新颍” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵阶界,是天一觀的道長(zhǎng)虹钮。 經(jīng)常有香客問我,道長(zhǎng)膘融,這世上最難降的妖魔是什么芙粱? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮氧映,結(jié)果婚禮上春畔,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好律姨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布振峻。 她就那樣靜靜地躺著,像睡著了一般择份。 火紅的嫁衣襯著肌膚如雪铺韧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天缓淹,我揣著相機(jī)與錄音哈打,去河邊找鬼。 笑死讯壶,一個(gè)胖子當(dāng)著我的面吹牛料仗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伏蚊,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼立轧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了躏吊?” 一聲冷哼從身側(cè)響起氛改,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎比伏,沒想到半個(gè)月后胜卤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赁项,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年葛躏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悠菜。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舰攒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悔醋,到底是詐尸還是另有隱情摩窃,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布芬骄,位于F島的核電站猾愿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏德玫。R本人自食惡果不足惜匪蟀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宰僧。 院中可真熱鬧,春花似錦、人聲如沸琴儿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽造成。三九已至显熏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晒屎,已是汗流浹背喘蟆。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鼓鲁,地道東北人蕴轨。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像骇吭,于是被迫代替她去往敵國(guó)和親橙弱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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

  • 1.1 GitHub簡(jiǎn)介 GitHub是為開發(fā)者提供Git倉庫的托管服務(wù)兰绣。這是一個(gè)讓開發(fā)者與朋友竭鞍、同事隐圾、同學(xué)以及陌...
    hainingwyx閱讀 770評(píng)論 0 0
  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,649評(píng)論 4 54
  • 一顆糖 一根棒冰 一本漫畫 一部動(dòng)畫片 自己可以樂呵呵的過一天 還是特滿足特開學(xué) 有一天看見有人有了手機(jī)從此就覺得...
    飯兔的我是文藝女青年閱讀 144評(píng)論 0 3
  • 本來好好的一張名畫 被網(wǎng)友再創(chuàng)(惡)作(搞)后 簡(jiǎn)直好玩的辣眼睛~ 要是藝術(shù)家能看到的話 應(yīng)該分分鐘被氣哭的~哈哈...
    藝伙閱讀 498評(píng)論 0 0
  • 1. 下午6:00 外教老師答疑課,準(zhǔn)備好你的問題像啼,英語角見俘闯。 2. 晚上7:00 Music Night 想唱英...
    Simon_Sun_閱讀 135評(píng)論 0 0