Git 與 GitHub

一济锄、Git 與 GitHub 的歷史

你來(lái)了步清,快坐下瘪撇,今天我們來(lái)講講編程界的兩大神器: GitGithub

圖片描述

GitGithub 都是程序員每天都要用到的東西 —— 前者是目前最先進(jìn)的 版本控制工具侣灶,擁有最多的用戶,且管理著地球上最龐大的代碼倉(cāng)庫(kù)缕碎;而后者是全球最大 同性交友 代碼托管平臺(tái)褥影、開源社區(qū)

如果你之前沒接觸過「版本控制」的概念咏雌,看到這里一定是一臉 xx 的凡怎,別急,看了這篇文章你一定能明白:

什么是版本控制

簡(jiǎn)單復(fù)述一下文章中的例子:

大四畢業(yè)生 小張 在寫 畢業(yè)論文赊抖,他經(jīng)常刪刪改改统倒,有時(shí)還會(huì)后悔“昨天那個(gè)思路那么好,我怎么就給刪了”……

有了多次教訓(xùn)后氛雪,他決定每次寫之前都先復(fù)制一份房匆,在復(fù)制的那份里修改,這么一來(lái)报亩,文件夾里有了:

畢業(yè)論文_初稿.doc
畢業(yè)論文_修改1.doc
畢業(yè)論文_修改2.doc
畢業(yè)論文_修改3.doc
畢業(yè)論文_完整版1.doc
畢業(yè)論文_完整版2.doc
畢業(yè)論文_完整版3.doc
畢業(yè)論文_最終版1.doc
畢業(yè)論文_最終版2.doc
畢業(yè)論文_確定版1.doc
畢業(yè)論文_確定版2.doc
……

小張想:“雖然很痛苦浴鸿,但不至于丟掉以前的靈感了吧……等等,最終版和確定版哪個(gè)是昨天寫的來(lái)著弦追?岳链??”

同時(shí)骗卜,他還要把論文發(fā)給學(xué)霸女友求幫忙,第二天他的文件夾里又有了:

畢業(yè)論文_最終版3.doc
畢業(yè)論文_女友版1.doc
畢業(yè)論文_女友版2.doc

幾星期的煎熬下來(lái)左胞,文件夾里多了幾十份文件寇仓,小張的論文也快成型了,是時(shí)候把自己和女朋友的內(nèi)容合并起來(lái)了烤宙。

這時(shí)又發(fā)生了一件喜聞樂見的事:U 盤中病毒了遍烦,而電腦里只有 1 個(gè)月前的版本……

如何拯救生無(wú)可戀的小張?其實(shí)躺枕,如果小張一早知道用「版本控制」工具就好了服猪,他的文件可以整整齊齊地排列,就像這樣:

圖片描述

“哎呀拐云,早知道能這樣罢猪,就不用手動(dòng)控制那么多版本啦!”

但這還不夠叉瘩,如果能有一個(gè)支持「論文托管 + 論文版本控制」的網(wǎng)站就更好了膳帕。這樣一來(lái),小張不但能和女朋友合作編輯內(nèi)容薇缅,還不用擔(dān)心因電腦故障危彩,導(dǎo)致之前論文版本的丟失攒磨。

這時(shí) —— 論文Hub 出現(xiàn)了,它可以幫你托管論文汤徽,而且和版本控制工具無(wú)縫連接娩缰。

越來(lái)越多人發(fā)現(xiàn)了 論文Hub 的好處,相繼把論文托管在論文 Hub 上 谒府,網(wǎng)站上的論文越來(lái)越多拼坎。一些優(yōu)秀的作者還會(huì)把論文開源出來(lái),讓每個(gè)人都可以查閱狱掂、交流演痒、學(xué)習(xí)……

慢慢的,論文 Hub 變成了全球最大的「交友社區(qū)」趋惨,并逐漸演化成了一種時(shí)尚 —— 找工作時(shí)鸟顺,面試官會(huì)先問你有沒有 論文 hub 的賬號(hào),有多少個(gè)贊器虾、多少粉絲讯嫂;而有優(yōu)秀作品的人,會(huì)被大公司爭(zhēng)搶錄用……

這個(gè) 論文 hub兆沙,就是我們今天要學(xué)習(xí)的 Github 欧芽,只不過論文換成了程序代碼。Github 大概長(zhǎng)這樣:

圖片描述

在沒有這兩個(gè)工具時(shí)葛圃,編程可能是這樣的:

  • 哪個(gè)同事修改了我的代碼??我要?dú)⒘怂?/li>
  • 我把自己的代碼改崩潰了???我選擇自殺
  • 電腦崩潰千扔、硬盤損壞、中毒库正,幾萬(wàn)行代碼找不到了??

但有了他們曲楚,一切都不一樣了:

  • 同步代碼到網(wǎng)絡(luò)倉(cāng)庫(kù),在家里寫好代碼上傳褥符,回到公司就可以繼續(xù)寫了龙誊,而且不怕丟失。
  • 記錄每次代碼的修改喷楣,即使把程序?qū)懕懒颂舜螅材芗词够厮莸缴弦粋€(gè)版本。這在產(chǎn)品更新時(shí)也經(jīng)常使用铣焊。
  • 可以多人協(xié)作完成項(xiàng)目逊朽,每個(gè)人的提交都有清晰的記錄。

你也會(huì)不斷用到 GitGithub曲伊,把你完成的項(xiàng)目惋耙、學(xué)習(xí)記錄,同步在 Github 的倉(cāng)庫(kù)中。這樣做的結(jié)果是:你將有一份 非常漂亮的 Github 主頁(yè)绽榛,能給你的簡(jiǎn)歷加分很多湿酸。

Linux 之父 林納斯(Linus) 在 1991 年創(chuàng)建了開源的 Linux 系統(tǒng),隨著 Linux 代碼量越來(lái)越大灭美,合并志愿者提交的代碼已經(jīng)無(wú)法依靠人工完成推溃,所以 林納斯 選擇了商業(yè)的管理軟件 BitKeeper ,來(lái)管理 Linux 的代碼版本届腐。

在 2005 年铁坎,BitKeeper 公司發(fā)現(xiàn),有 Linux 社區(qū)的人試圖破解 BitKeeper 軟件犁苏,他們決定收回 Linux 社區(qū)的免費(fèi)使用權(quán)硬萍。林納斯 對(duì)此事調(diào)解數(shù)周無(wú)果,決定自己搞一個(gè)围详。他花了十天時(shí)間用 C 語(yǔ)言寫好了一個(gè)開源的版本控制系統(tǒng)朴乖,就是著名的 Git。

圖片描述

(先寫出一個(gè)操作系統(tǒng)助赞,再用 10 天寫出 Git买羞,林納斯已經(jīng)不能用大神來(lái)形容,只能理解為外星人來(lái)技術(shù)扶貧的)

2007 年雹食,舊金山的三個(gè)年輕人覺得 Git 是個(gè)好東西畜普,創(chuàng)建一個(gè)公司名字叫 GitHub,第二年上線了使用 Ruby 編寫的同名網(wǎng)站群叶。這是一個(gè)基于 Git 的免費(fèi)代碼托管網(wǎng)站(有付費(fèi)服務(wù))吃挑,十年間迅速躥紅,擊敗了實(shí)力雄厚的 Google Code街立,成為全世界最受歡迎的代碼托管網(wǎng)站舶衬。根據(jù) 2018 年 10 月的 GitHub 年度報(bào)告顯示,目前有 3100 萬(wàn)開發(fā)者創(chuàng)建了 9600 萬(wàn)個(gè)項(xiàng)目倉(cāng)庫(kù)几晤,有 210 萬(wàn)企業(yè)入駐约炎。

值得一提的是植阴,GitHub 的 創(chuàng)始人蟹瘾、CEO —— Wanstrath 是一位大學(xué)肄業(yè),自學(xué)成才的程序員掠手。而他大學(xué)的專業(yè)是英語(yǔ)憾朴,相當(dāng)于我們的“漢語(yǔ)言文學(xué)”專業(yè),是一名地地道道的 “文科生” 喷鸽,如今众雷,他的身家可能超過了10億美元,也算是一位自學(xué)編程成才的標(biāo)志人物吧。

圖片描述

二砾省、我們?nèi)绾斡?Git 來(lái)控制本地目錄demo鸡岗?

在demo目錄中右鍵點(diǎn)擊 git bash here打開git命令窗口,在命令行內(nèi)輸入 git init 即可编兄。

git init
image.png

這是 Git 的初始化操作轩性,作用是將一個(gè)已存在文件夾,置于 Git 的控制管理之下狠鸳。

ls -la 命令揣苏,會(huì)發(fā)現(xiàn)一個(gè)名叫 .git 的目錄被創(chuàng)建了,這意味著倉(cāng)庫(kù)初始化成功件舵⌒恫欤可以進(jìn)入到 .git 目錄查看下有哪些內(nèi)容。

image.png

Git 提交代碼的基本流程是這樣的:

  • 創(chuàng)建或修改 本地文件
  • 使用 git add 命令铅祸,將創(chuàng)建或修改的文件添加到本地的 暫存區(qū)坑质,這里保存的是你的臨時(shí)更改
  • 使用 git commit 命令,提交文件到 本地倉(cāng)庫(kù)
  • 使用 git push命令个少,將本地代碼庫(kù)同步到 遠(yuǎn)端倉(cāng)庫(kù)
圖片描述

目前為止洪乍,我們實(shí)現(xiàn)了第一步,創(chuàng)建了一個(gè)文件夜焦,我們的最終目標(biāo)是:將本地的 demo 倉(cāng)庫(kù)壳澳,同步到 GitHub 上的 demo 倉(cāng)庫(kù)中。

?? git add

使用 git add + 文件名/目錄名 命令茫经,可以將你需要同步的文件巷波,添加到本地的暫存區(qū)。我們先進(jìn)入 demo 目錄卸伞,然后把 README.md 文件添加一下:

$ git add README.md

輸入 git status 抹镊,可以檢測(cè)當(dāng)前目錄和暫存區(qū)的狀態(tài),查看哪些修改被暫存了:

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md

可以看到我們剛剛 add 的文件已經(jīng)被初始提交了荤傲。

?? git commit

git commit 提交是你工作的一個(gè)里程碑 —— 每當(dāng)你完成一些工作垮耳,都可以創(chuàng)建一次提交,保存當(dāng)前的版本遂黍。

這樣一來(lái)终佛,無(wú)論你何時(shí)修改了文件,都創(chuàng)建一個(gè)新版本的文件雾家,你可以很方便地查看以往所有版本的文件和內(nèi)容铃彰。

在提交之前,你必須先設(shè)置你的名字和 email芯咧,這是你在提交 commit 時(shí)的簽名牙捉,每次提交記錄里都會(huì)包含這些信息竹揍。

使用 git config 命令進(jìn)行配置:

$ git config --global user.name "YourName"
$ git config --global user.email "YourEmail@xxx.com"

完成配置后,我們可以創(chuàng)建提交了邪铲,請(qǐng)輸入:

git commit -m "first commit"

commit 的語(yǔ)法結(jié)構(gòu)是 git commit -m "注釋"芬位,通過上個(gè)命令,你創(chuàng)建了一條注釋為 “first commit” 的 Git 提交带到。

$ git commit -m "fisrt commit"
[master (root-commit) d1202f9] fisrt commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

?? 注意:每次提交晶衷,您都必須用 -m + '注釋' 編輯注釋信息 。它不僅能協(xié)助您辨別不同的版本阴孟,而且能讓你理解晌纫,自己當(dāng)時(shí)對(duì)文件做了什么修改。

比如當(dāng)你每次在文件中添加了新的代碼后永丝,你可以寫一句提交信息:“添加了 XXX 代碼” —— 當(dāng)你一個(gè)月后回來(lái)看提交記錄或者 Git 日志 時(shí)锹漱,你還能知道當(dāng)時(shí)做了什么。

三慕嚷、與 Github 倉(cāng)庫(kù)同步

終于到了激動(dòng)人心的時(shí)刻哥牍,我們要把本地倉(cāng)庫(kù)提交到遠(yuǎn)端倉(cāng)庫(kù)(即 Github 倉(cāng)庫(kù))中。

?? 連接 Github 倉(cāng)庫(kù)

使用如下命令喝检,將本地倉(cāng)庫(kù)連接到 GitHub 倉(cāng)庫(kù)中:

git remote add origin 倉(cāng)庫(kù)鏈接

倉(cāng)庫(kù)鏈接請(qǐng)?jiān)谶@里復(fù)制嗅辣,并用剪切板功能粘貼進(jìn)去:

!
image.png

我們分析一下這個(gè)命令,首先 remote 的意思是遠(yuǎn)程

圖片描述

add 很容易明白 —— 添加挠说。git remote add 表示通知 Git 去添加一個(gè)遠(yuǎn)程倉(cāng)庫(kù)澡谭,后面接上的 origin 是這個(gè)倉(cāng)庫(kù)的小名,方便以后溝通损俭,通常默認(rèn)用 origin 來(lái)表示蛙奖;最后再接上遠(yuǎn)程倉(cāng)庫(kù)的地址,即你剛剛創(chuàng)建的 Github 倉(cāng)庫(kù)鏈接杆兵。

圖片描述

?? push 命令

push 顧名思義雁仲,就是推送, 使用 push 可以把本地倉(cāng)庫(kù)推送到遠(yuǎn)端倉(cāng)庫(kù)中琐脏。

具體命令如下:

git push origin master

執(zhí)行后攒砖,GitHub服務(wù)器 需要驗(yàn)證你的身份,按提示輸入你的用戶名和密碼即可完成 push 同步日裙。

?? 注意:在Linux 中輸入密碼是不可見的吹艇,輸完后直接按回車鍵即可。

CBI-IT-05@DESKTOP-5HSUPIA MINGW64 /d/project/demo (master)
$ git remote add origin https://github.com/cfe/demo.git

CBI-IT-05@DESKTOP-5HSUPIA MINGW64 /d/project/demo (master)
$ git push origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 211 bytes | 211.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/cfe/demo.git
 * [new branch]      master -> master

CBI-IT-05@DESKTOP-5HSUPIA MINGW64 /d/project/demo (master)
$gti

接下來(lái)就是見證奇跡的時(shí)刻 —— 再刷新你的 Github 倉(cāng)庫(kù)阅签,就會(huì)發(fā)現(xiàn)多了這些東西:

!
image.png

??分支的概念:分支在多人協(xié)作中經(jīng)常會(huì)被用到掐暮,但前期我們用不到這個(gè)功能蝎抽,為了不給你增加認(rèn)知負(fù)擔(dān)政钟,這里就先不講了路克。你只需知道 Git 管理的項(xiàng)目進(jìn)程中,有一條默認(rèn)的主分支 - master 即可养交。(想象 Git 是一棵樹精算,master 就是樹干,樹干上還可以生出很多分支來(lái)碎连,如 master 2.0灰羽、master 3.0 等)

四、克隆 GitHub 上的倉(cāng)庫(kù)

本節(jié)實(shí)驗(yàn)最后一個(gè)知識(shí)點(diǎn)是 git clone 命令鱼辙,它可以幫你拷貝一個(gè) Git 倉(cāng)庫(kù)到本地廉嚼,讓自己能夠查看該項(xiàng)目,或者進(jìn)行修改倒戏。

圖片描述

如果你想要復(fù)制一個(gè)項(xiàng)目怠噪,看看代碼,或者把自己的遠(yuǎn)程倉(cāng)庫(kù)復(fù)制到本地杜跷,可以執(zhí)行命令:

git clone [url]

[url] 指的就是你想復(fù)制的倉(cāng)庫(kù)傍念,我們?cè)?github.com 上提供了一個(gè)名字為 gitproject 的公開倉(cāng)庫(kù), 供大家測(cè)試葛闷,現(xiàn)在你要把這個(gè)倉(cāng)庫(kù)復(fù)制到實(shí)驗(yàn)環(huán)境中憋槐,只需輸入:

$ git clone https://github.com/cfe/demo.git
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市淑趾,隨后出現(xiàn)的幾起案子阳仔,更是在濱河造成了極大的恐慌,老刑警劉巖扣泊,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驳概,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡旷赖,警方通過查閱死者的電腦和手機(jī)顺又,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)等孵,“玉大人稚照,你說(shuō)我怎么就攤上這事「┟龋” “怎么了果录?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)咐熙。 經(jīng)常有香客問我弱恒,道長(zhǎng),這世上最難降的妖魔是什么棋恼? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任返弹,我火速辦了婚禮锈玉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘义起。我一直安慰自己拉背,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布默终。 她就那樣靜靜地躺著椅棺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪齐蔽。 梳的紋絲不亂的頭發(fā)上两疚,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音含滴,去河邊找鬼鬼雀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛙吏,可吹牛的內(nèi)容都是我干的源哩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼鸦做,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼励烦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起泼诱,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坛掠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后治筒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屉栓,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年耸袜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了友多。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堤框,死狀恐怖域滥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜈抓,我是刑警寧澤启绰,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站沟使,受9級(jí)特大地震影響委可,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜腊嗡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一着倾、第九天 我趴在偏房一處隱蔽的房頂上張望拾酝。 院中可真熱鬧,春花似錦屈呕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至镶摘,卻和暖如春嗽桩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凄敢。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工碌冶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涝缝。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓扑庞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親拒逮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罐氨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • 版本控制系統(tǒng) 為什么要有版本控制系統(tǒng) 通過注冊(cè)與登錄的需求引入版本控制系統(tǒng) 在開發(fā)過程中,經(jīng)常需要對(duì)一個(gè)文件進(jìn)行修...
    隔壁老王z閱讀 295評(píng)論 0 0
  • 一滩援、git的安裝 1.1栅隐、命令行方式安裝 ??1)、下載windows git:https://git-scm.c...
    從菜鳥到老菜鳥閱讀 335評(píng)論 0 1
  • Git分布式版本控制工具 Git概述和基本使用 git分布式版本管理與svn(cvs)對(duì)比 類型:git是開源的分...
    進(jìn)擊的大東閱讀 667評(píng)論 0 1
  • 這里是本人所需的相關(guān)筆記玩徊,如果需要詳細(xì)的教程可以點(diǎn)擊這里附上git常用命令git cheatsheet 使用Git...
    ACphart閱讀 307評(píng)論 0 0
  • 關(guān)于版本控制系統(tǒng)(即VCS:Version Control Systems) 歷程:什么是版本控制系統(tǒng)(VCS)租悄?...
    DHFE閱讀 588評(píng)論 1 1