漫話:如何給女朋友解釋什么是Git和GitHub?
周末,我正在家里看電視,女朋友在一旁刷手機(jī),相安無事。誰知道,剛過了沒多久,她突然問我:
版本控制
想要介紹什么是GitHub,就要介紹下什么是Git,想要介紹什么是Git,那就不得不提版本控制。
我們知道,如果多臺計算機(jī)在同一個局域網(wǎng)中,是可以進(jìn)行局域網(wǎng)文件共享的。共享者可以通過設(shè)置把自己文件共享給他人進(jìn)行閱讀和修改。
對于同一份共享文件,如果又多個人需要修改的話會發(fā)生什么事情呢?假設(shè)現(xiàn)在有三個人,A分享了文件夾mhcoding,其中包含了三個文件mhcoding1.png,mhcoding2.png,mhcoding3.png,B和C需要對這份文件進(jìn)行修改。
B和C分別把mhcoding文件夾拷貝到自己的電腦上,然后進(jìn)行修改,改完之后需要再把自己修改上傳上去。B先改完了之后把自己的文件上傳上去,覆蓋了A的分享。之后C也改完了,也把自己的改動上傳上去。這樣,C就會把B的修改覆蓋掉。
為了上述這種問題,就需要通過一種方式來在C想要上傳文件的時候來提醒他,告訴他需要考慮到B已經(jīng)改過文件的事情。
比較好的方式就是通過版本控制。
如果使用了版本控制系統(tǒng),每一個團(tuán)隊(duì)成員都可以在任何時間對任何文件毫無顧慮的進(jìn)行修改,版本控制系統(tǒng)可以提醒我們文件修改沖突,甚至可以幫我們自動把多個人的改動合并到一起。
有了版本控制,我們還可以回溯查看以前某一個版本中具體文件的內(nèi)容,還可以查看某一次改動的變更內(nèi)容。非常適合團(tuán)隊(duì)協(xié)作。
版本控制的方式
本地版本控制系統(tǒng)
許多人習(xí)慣用復(fù)制整個項(xiàng)目目錄的方式來保存不同的版本,或許還會改名加上備份時間以示區(qū)別。這么做的好處就是簡單。不過壞處也不少:有時候會混淆所在的工作目錄,一旦弄錯文件丟了數(shù)據(jù)就沒法撤銷恢復(fù)。
為了解決這個問題,人們很久以前就開發(fā)了許多種本地版本控制系統(tǒng),大多都是采用某種簡單的數(shù)據(jù)庫來記錄文件的歷次更新差異。
集中化的版本控制系統(tǒng)
接下來人們又遇到一個問題,如何讓在不同系統(tǒng)上的開發(fā)者協(xié)同工作?于是,集中化的版本控制系統(tǒng)應(yīng)運(yùn)而生。
這類系統(tǒng),都有一個單一的集中管理的服務(wù)器,保存所有文件的修訂版本,而協(xié)同工作的人們都通過客戶端連到這臺服務(wù)器,取出文件或者提交更新。
這種做法帶來了許多好處,特別是相較于老式的本地版本來說。現(xiàn)在,每個人都可以在一定程度上看到項(xiàng)目中的其他人正在做些什么。而管理員也可以輕松掌控每個開發(fā)者的權(quán)限,并且管理起來也輕松容易的多。
分布式版本控制系統(tǒng)
集中化最顯而易見的缺點(diǎn)是中央服務(wù)器的單點(diǎn)問題。如果中央服務(wù)器宕機(jī)一小時,那么在這一小時內(nèi),誰都無法提交更新,也就無法協(xié)同工作。
要是中央服務(wù)器的磁盤發(fā)生故障,碰巧沒做備份,或者備份不夠及時,就會有丟失數(shù)據(jù)的風(fēng)險。
于是分布式版本控制系統(tǒng)面世了。在這類系統(tǒng)中,客戶端并不只提取版本的文件快照,而是把代碼倉庫完整地鏡像下來。這么一來,任何一處協(xié)同工作用的服務(wù)器發(fā)生故障,事后都可以用任何一個鏡像出來的本地倉庫恢復(fù)。因?yàn)槊恳淮蔚奶崛〔僮?,?shí)際上都是一次對代碼倉庫的完整備份。
Git
git其實(shí)就是一款我們前面介紹的分布式版本控制軟件,Git具有以下特點(diǎn):
- 直接記錄快照,而非差異比較
- 近乎所有操作都是本地執(zhí)行
- 時刻保持?jǐn)?shù)據(jù)完整性
- 多數(shù)操作僅添加數(shù)據(jù)
程序員是比較典型的需要團(tuán)隊(duì)協(xié)作的職業(yè),大多數(shù)情況下,都是需要多個程序員同時開發(fā)同一個項(xiàng)目的,就好像多個程序員要同時修改一份word文檔一樣。所以,Git是很多程序員的必備工具。
GitHub
GitHub是一個面向開源及私有軟件項(xiàng)目的托管平臺,因?yàn)橹恢С謌it 作為版本庫格式進(jìn)行托管,故名GitHub。
所謂托管平臺,也就是說他可以用于存放文件。只不過上面的文件都是可以公開被訪問到的。
GitHub是通過Git進(jìn)行版本控制的軟件源代碼托管服務(wù),并且,GitHub還引入了一些社交屬性。
簡單的說,在GitHub上面,你可以提交你自己寫的代碼(發(fā)微博)、關(guān)注(粉)某人、關(guān)注(贊)某個項(xiàng)目、添加評論、Fork(轉(zhuǎn)發(fā))一個項(xiàng)目來自己修改,這些功能和微博都是一樣的,只是將我們的吐槽換成了由各種編程語言寫的代碼。我們平時見到的大部分開源代碼也都是掛在上面的。
最近比較火的996icu項(xiàng)目我們說他有10多萬的Star,就是說由10W+的人關(guān)注了這個項(xiàng)目。
GitHub上那些奇葩"項(xiàng)目"
Dress - 女裝大佬聚集地
有129名貢獻(xiàn)者在這個名為Dress的項(xiàng)目里集結(jié),上傳了數(shù)千張女裝照,收獲了8000余顆星。
你敢相信這是個碼農(nóng)?
地址:https://github.com/komeiji-satori/Dress
Thanos - 滅霸命令
Thanos.sh是一個開源的個滅霸命令,可隨機(jī)刪除電腦上一半文件。
地址:https://github.com/hotvulcan/Thanos.sh
nocode - 一行代碼都沒有
這是一個Issue比項(xiàng)目更精彩的項(xiàng)目,項(xiàng)目中一行代碼都沒有。
想問下,Star這個項(xiàng)目的2.7萬人是有多無聊???
地址:https://github.com/kelseyhightower/nocode
programmer-job-blacklist 碼農(nóng)找工作黑名單
地址:https://github.com/shengxinjing/programmer-job-blacklist
hangzhou_house_knowledge 杭州買房攻略
地址:https://github.com/houshanren/hangzhou_house_knowledge
howmanypeoplearearound 通過 Wi-Fi 信號估計附近有多少人
地址:https://github.com/schollz/howmanypeoplearearound
參考資料:
https://git-scm.com/book/zh/v1/
https://www.jianshu.com/p/b2ad5d9daa23
https://www.zhihu.com/question/23498424