給新手的github教程

我寫(xiě)東西廢話向來(lái)很多,這次不扯東扯西,爭(zhēng)取20分鐘之內(nèi)進(jìn)入正題。

Just kidding.

今天來(lái)介紹一下Git和Github。本文必將有不少奇怪和模糊(但足夠初學(xué)者大致理解)的比喻以及極度口語(yǔ)化的文字,請(qǐng)慎重閱讀。

Git & Github:

Git是一個(gè)版本控制軟件。你在寫(xiě)代碼的時(shí)候想要測(cè)試一個(gè)新功能,卻并不想在已經(jīng)穩(wěn)定的版本上做實(shí)驗(yàn)(萬(wàn)一刪刪改改出了問(wèn)題,想要恢復(fù)到之上個(gè)版本怎么辦?),這時(shí)就需要版本控制,將當(dāng)前的代碼保護(hù)起來(lái),另起爐灶;如果測(cè)試結(jié)果不滿意,把不穩(wěn)定的爐灶全部推倒,還能滾回之前好用的版本。
你用git控制的文件和這些文件的修改記錄都是保存在本地的,為了多人協(xié)作/不把雞蛋放在一個(gè)籃子里,某位古神(應(yīng)該是Linus)創(chuàng)建了網(wǎng)站github。你可以用git在本地控制每個(gè)文件,記錄每一次增刪,然后把這些文件連同所有的修改記錄推送到github上。

好的,跟我重復(fù)重點(diǎn):
Git是本地的版本控制軟件,可以跟蹤文件的所有修改記錄;
Github是修改記錄和文件的在線保存地。

Github和多人協(xié)作:

張三等人一起用github開(kāi)發(fā)一個(gè)軟件,他們認(rèn)為該軟件主要有3個(gè)功能。
張三寫(xiě)好了功能1,測(cè)試穩(wěn)定了;
李四在張三的基礎(chǔ)上寫(xiě)好了功能2,測(cè)試穩(wěn)定了;
王五覺(jué)得自己能寫(xiě)出更高效的功能2,就從張三的版本上另起爐灶,寫(xiě)了功能2',測(cè)試穩(wěn)定了,三人討論后決定采用2'版本,于是王五把自己的功能2'推送回了主程序,成為主程序的一部分;
張三和李四也一起寫(xiě)好了功能3,和王五同步完成工作;

bad bad example, just for reference.

最簡(jiǎn)單的git指令以及工作流程

定義

  1. zelda.txt是我需要版本控制的文件
  2. 我的項(xiàng)目名稱(chēng)叫mario
    往下看之前確認(rèn)你知道cd是什么意思。
    另外強(qiáng)烈建議邊看教程邊動(dòng)手做一遍。

1. 創(chuàng)建repository

為了版本控制任何文件,你首先要?jiǎng)?chuàng)建一個(gè)修改記錄儲(chǔ)藏中心,又叫做repository。
這個(gè)中心可以

  1. 從無(wú)到有生成(如果你在寫(xiě)一個(gè)全新的項(xiàng)目)

或者

  1. 從別人已有的儲(chǔ)藏中心拷貝一份過(guò)來(lái)(如果你想接著別人的進(jìn)度繼續(xù)寫(xiě))

對(duì)于1,你又有兩種方法
a. cd到任意一個(gè)文件夾里,比如說(shuō)~/Desktop/,用git init mario來(lái)創(chuàng)建新的repository。這步之后你會(huì)在桌面上看到一個(gè)叫做mario的文件夾,點(diǎn)進(jìn)去,把你的zelda.txt文件拷貝進(jìn)去,之后就可以在mario這個(gè)repository之中開(kāi)始版本控制啦。
b. 到github官網(wǎng),點(diǎn)擊一個(gè)綠色的按鍵(new repository),在新頁(yè)面中給新repository起名叫mario,確定;然后他會(huì)在新頁(yè)面中有一個(gè)地方讓你復(fù)制鏈接(非常類(lèi)似于https://github.com/chenxi-ge/mario.git的一個(gè)鏈接);復(fù)制,cd到任意一個(gè)文件夾里,用git clone 剛才的鏈接來(lái)把在線創(chuàng)建的repository聯(lián)動(dòng)到本地。

對(duì)于2,直接用git clone 別人的repository就可以了。

好的,重復(fù)重點(diǎn):
本地生成,git init folder_name
在線拷貝下來(lái)(不管是自己的還是別人的),git clone repo_url

插一句,Github是可以免費(fèi)使用的。但免費(fèi)使用的代價(jià)是,你也要保持所有的代碼開(kāi)源:任何人都可以查看你的代碼,你也可以下載別人的代碼,程序員們?cè)诨ハ鄬W(xué)習(xí)中成長(zhǎng)。開(kāi)源是我非常欽佩和堅(jiān)持的精神——不然寫(xiě)啥教程啊。
當(dāng)然對(duì)于企業(yè)用戶(hù),每人每月7刀,可以創(chuàng)建私人repository用于公司項(xiàng)目,也挺好。

2. 管理文件

那么現(xiàn)在你有一個(gè)文件夾,叫mario,在本地;這個(gè)文件夾里有一個(gè)幽靈(.git)在監(jiān)視著所有你讓他監(jiān)視的文件;還有一個(gè)你剛剛拷貝進(jìn)去的zelda.txt。
現(xiàn)在這個(gè)zelda.txt是沒(méi)有被監(jiān)視的,幽靈也是有拖延癥的,不會(huì)主動(dòng)幫你干活的。
何以見(jiàn)得?用git status查看當(dāng)前管理進(jìn)度。
git status之后,你會(huì)看到zelda.py是在'Untracked Files'里面的,并且是紅色的。于是我們使用git add zelda.txt ,告訴git開(kāi)始監(jiān)視zelda.txt的每一行增刪(把這個(gè)文件add到監(jiān)視列表里)。
增加之后再用git status,會(huì)發(fā)現(xiàn)文件進(jìn)入了'Changes to be committed'的列表里,并且名字前面顯示'new file'。
那么我們來(lái)談?wù)刢ommit。什么叫commit呢?就是告訴git:在這兒存?zhèn)€檔,記錄一下當(dāng)前文件和上一次commit的差異。這樣追根溯源,之后就能恢復(fù)每個(gè)文件每個(gè)版本。
我習(xí)慣在add新文件之后進(jìn)行一次commit。
git commit -a -m 備注內(nèi)容是commit的常用方法,這里-a 是要求“記錄所有修改”,-m是提示后面緊跟著備注,而備注內(nèi)容當(dāng)然是人類(lèi)能看懂的語(yǔ)言,不好好寫(xiě)吊起來(lái)打。
在commit之后,再再再git status一下,發(fā)現(xiàn)所有的改動(dòng)都已提交,無(wú)比清爽。

我猜這兒正經(jīng)教程要開(kāi)始講什么叫stage,不然沒(méi)法講清git commit -a-a是什么。然而這種會(huì)搞亂新手的東西我也不能說(shuō)完全能講清,想了解的請(qǐng)自己去看官方文檔。

這時(shí)我們手賤去改動(dòng)一下zelda.txt的內(nèi)容,然后git status,會(huì)發(fā)現(xiàn)zelda.txt又變成了modified,并且是紅色狀態(tài)。很好,如果改動(dòng)是你需要的,就commit;如果是commit之后發(fā)現(xiàn)不需要的(比如十幾個(gè)commit后發(fā)現(xiàn)性能反而降低了),之后會(huì)講如何回滾。
在commit之前,如果你想了解一下你的改動(dòng),用git diff可以做到這一點(diǎn)。但綠色代表什么,加減號(hào)又代表什么,請(qǐng)查閱文檔。

好的重復(fù)重點(diǎn),
git add 跟蹤文件
git status 查看當(dāng)前跟蹤進(jìn)度
git commit 存檔一下

3. 版本控制

最后光速講一下log, resetpush然后我就去睡覺(jué)。
首先,之前吹了半天版本控制,到底怎么才能回滾到之前的一個(gè)穩(wěn)定可用版本呢?

首先是查看記錄,用git log可以查看到歷史上所有的commit編號(hào)、commit的提交者和提交時(shí)間,還有當(dāng)時(shí)的備注。假設(shè)你在有一個(gè)穩(wěn)定可用版本時(shí)commit了一下,這條commit記錄會(huì)留在log上。

然后是回滾版本,用git reset --hard log編號(hào)。所謂log編號(hào)是用git log查看時(shí)在每個(gè)commit最頂端的一串30個(gè)字母左右的亂碼,在reset的時(shí)候只要輸入前六位就可以回滾版本。執(zhí)行完git reset指令后,再次查看zelda.txt就會(huì)發(fā)現(xiàn)回到了那條特定的commit時(shí)的樣子。
git reset log編號(hào)和有--hard的版本不一樣,前者是回滾所有commit但不修改本地文件,后者是回滾所有commit并且修改本地文件。新手不必在意

最后就是git push。之前所有的版本控制都是在本地的,如果想把本地的所有修改都推送到github上存儲(chǔ)怎么辦呢?git push origin master,認(rèn)準(zhǔn)這一條。其中git push很顯然是推送,origin master是說(shuō)推送目標(biāo)是主分支,對(duì)于沒(méi)有開(kāi)其他分支的你——你要能讀到這兒,肯定是還沒(méi)用到啦——也是唯一選擇。
git push的頻率當(dāng)然可以自己定,我習(xí)慣是每寫(xiě)好一個(gè)功能/最多15分鐘commit一下,而每寫(xiě)完一個(gè)項(xiàng)目(比如說(shuō)一次作業(yè)),如果是連續(xù)的幾個(gè)小時(shí)寫(xiě)完就最后push一次,否則今天的份額寫(xiě)完了就push。

PS,如果忘記在寫(xiě)完項(xiàng)目之后做git push,這個(gè)project就拿零分了。

重點(diǎn)?
git log 查看所有commit
git reset 回滾版本
git push 推送修改到Github——在線的數(shù)據(jù)中心

4. 坑

說(shuō)了是坑嘛,肯定不會(huì)填的。
這個(gè)教程最主要是面向新手,展示一個(gè)文件跟蹤的流程,用到的都是最基本的幾個(gè)指令:git init, git clone, git add, git commit, git log, git push, git reset,讓人能跟蹤一個(gè)文件,不斷記錄修改,可以方便回滾,也可以提交到github,這些足夠啦。
度過(guò)了最開(kāi)始的confusion,任何一個(gè)官方文檔不比我說(shuō)的嚴(yán)謹(jǐn)標(biāo)準(zhǔn)一萬(wàn)倍么。

所以這一塊主要是說(shuō)一下還有哪些沒(méi)說(shuō)到的,留給讀者自行探索吧。

  1. git merge, git fetch, git branch分支控制
  2. git stash 暫存修改
  3. git pull 下載別人的修改
安得repository千萬(wàn)間,大庇天下丟失重要文件之人俱歡顏。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評(píng)論 6 538
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,067評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,467評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,468評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,184評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,582評(píng)論 1 325
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,794評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,343評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,096評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,291評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,513評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,941評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,190評(píng)論 1 291
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,026評(píng)論 3 396
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,253評(píng)論 2 375

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

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,689評(píng)論 4 54
  • 第一章 安裝Git工具 下載GitHub for Windows,直接點(diǎn)擊安裝,安裝完成后,可以看到“Git Sh...
    不圓的石頭閱讀 11,901評(píng)論 5 63
  • Hi,你現(xiàn)在還能找到自我嗎?或者是你曾經(jīng)迷失過(guò)嗎?不管你有沒(méi)有這樣的困惑,請(qǐng)聽(tīng)我為你講一個(gè)故事吧,或許聽(tīng)完這個(gè)...
    竹林逍遙閱讀 317評(píng)論 2 1
  • 昨天死活打不開(kāi)簡(jiǎn)書(shū),現(xiàn)在打開(kāi)了已經(jīng)不太記得昨天要寫(xiě)什么。 早上起床的時(shí)候距鬧鈴設(shè)定的時(shí)間已經(jīng)過(guò)了一小時(shí),泡咖啡比平...
    Lebkuchen閱讀 207評(píng)論 0 1
  • 感覺(jué)好久沒(méi)去上班,好久沒(méi)晚上在地鐵更新簡(jiǎn)書(shū)。那為什么今天又在地鐵更新呢?因?yàn)椋珠_(kāi)始工作了。 簡(jiǎn)單回顧下最近找工作...
    聞舒閱讀 273評(píng)論 0 1