一、前言
本文來為讀者介紹一下分布式版本控制工具Git,可能你聽說過Gitee/GitHub,里面都帶有g(shù)it的字樣,那它們和Git之間有什么關(guān)聯(lián)呢? Git又是何物,讓我們一起走進(jìn)本文的學(xué)習(xí)??
Git(讀音為/g?t/)是一個(gè)開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項(xiàng)目版本管理。 [1] 也是Linus Torvalds為了幫助管理Linux內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件 —— 來自百度百科
上面說到了對(duì)于git來說支持分布式管理,簡單來說就是【多分支】,所以它在團(tuán)隊(duì)協(xié)作中也是起到尤為重要的作用,大家可以將自己的代碼上傳到同一個(gè)倉庫中進(jìn)行管理,方便了項(xiàng)目開發(fā)時(shí)的多人協(xié)作。因此git其實(shí)對(duì)于我們?cè)陧?xiàng)目開發(fā)過程中也是重要的一個(gè)工具??
不過本文不會(huì)涉及到分布式,因?yàn)椴┲鬟€沒有學(xué)習(xí)得那么深入,只是了解了一下。不過會(huì)帶大家了解git 的歷史背景,知道它的由來。并且做到能在 LInux 上使用 git ,完成代碼的提交等基本操作??
二、有關(guān)git的相關(guān)歷史介紹
首先我們要說說Git這個(gè)東西是怎么來的,是誰發(fā)明創(chuàng)造了它
- 對(duì)于Git的創(chuàng)建者,就是下面這個(gè)“小伙子”,它叫做【Linus Torvalds】,被稱做Linux之父、Linux內(nèi)核的發(fā)明人及該計(jì)劃的合作者
- 他在開創(chuàng)Linux系統(tǒng)的時(shí)候,開發(fā)了一段時(shí)間后便將他的代碼開源出來,使得全世界的頂級(jí)黑客、工程師可以一起參與到Linux的開發(fā)與制作中來,所以每天都會(huì)有很多人給他發(fā)代碼,那么他只能復(fù)制粘貼,這顯得很煩很累,于是他便想到有沒有這么一款版本控制和多人協(xié)作的軟件呢,這樣可以提高我們的開發(fā)效率?
- 于是他找到了這么一款軟件叫做【BitKeeper】,不過呢它是收費(fèi)的,就很難受。這件商業(yè)公司的老板就找到【Linus Torvalds】覺得很欣賞他,于是就免費(fèi)提供給他的社區(qū)使用,于是大家就使用它進(jìn)行了高效地開發(fā)
- 但是呢,那些世界級(jí)的頂級(jí)黑客、工程師充滿著好奇心,就想要去破解一下這塊軟件。于是有一天,一個(gè)小白工程師在完成了某項(xiàng)破解工作后將他的成果發(fā)布到社區(qū)中,就被這家公司的人看到了,于是老板很憤怒(我給你免費(fèi)使用,但你來搞我?),于是就不給他們免費(fèi)用了
- 那此時(shí)【Linus Torvalds】就又開始了他的Ctrl + c/v。。。直到有一天終于受不了了,便自己用了兩三周的時(shí)間開發(fā)出了一款版本控制和多人協(xié)作的軟件,它就是 —— git。直到現(xiàn)今的代碼托管平臺(tái)【Gitee】【GitHub】都是基于它實(shí)現(xiàn)的
而Git 也因?yàn)槠渚喌脑O(shè)計(jì)、易于學(xué)習(xí)、占地面積小、性能快等一些系列優(yōu)點(diǎn)深受程序員喜愛
三、Git版本管理
接下去我們來聊聊有關(guān)Git的版本管理。其實(shí)對(duì)于Git還有很多其他的功能,像分支管理、版本管理、版本回退、項(xiàng)目發(fā)布等等,這些功能可以支撐我們進(jìn)行多人協(xié)作
1、感性理解 —— 大學(xué)生實(shí)驗(yàn)報(bào)告
因?yàn)閷?duì)于Git的版本管理這一塊挺難理解的,所以我會(huì)通過一個(gè)小案例來幫助大家理解,那就是我們大學(xué)生都要寫的一樣?xùn)|西 —— 實(shí)驗(yàn)報(bào)告
對(duì)于實(shí)驗(yàn)報(bào)告呢,相信大家都寫過,額。。。應(yīng)該說是都抄過。各種像大物實(shí)驗(yàn)報(bào)告、英語翻譯實(shí)驗(yàn)報(bào)告、網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告、電路實(shí)驗(yàn)報(bào)告等等,對(duì)于這個(gè)報(bào)告而言一般有一兩個(gè)人寫好了那基本大家也都可以寫好了,看上去也是差不多的樣子,因?yàn)榭倳?huì)有那么一兩個(gè)人會(huì)認(rèn)真地去寫實(shí)驗(yàn)報(bào)告?
好,話不多說,我們繼續(xù)扯
- 你呢是一所普通高校的學(xué)生,叫做【張三】,你的室友叫做【小明】,今天是周一,明天就有大物實(shí)驗(yàn)課,所以就要交實(shí)驗(yàn)報(bào)告,不過你們是不同組的,所以你可以后天再交,到時(shí)候可以抄小明的。此時(shí)你的室友小明正在奮筆疾書地“寫”著它的實(shí)驗(yàn)報(bào)告,爭取要做寫得最好的那一個(gè),于是將它的報(bào)告改來改去,最后改的自己非常滿意之后才上床睡覺??
- 到了第二天,小明開開心心地找到老師(^ _ ^),交上了他的實(shí)驗(yàn)報(bào)告,不過到了下午老師就把小明叫到了辦公室,和它講了有關(guān)實(shí)驗(yàn)報(bào)告的內(nèi)容,挑出了小明實(shí)驗(yàn)報(bào)告中的很多問題,于是原本信心滿滿的小明在聽了老師這番說辭之后便很郁悶地回到了宿舍開始了它的 實(shí)驗(yàn)報(bào)告修改之路。于是他將實(shí)驗(yàn)報(bào)告該來改來改去,終于將老師和它講的這些修改好了,于是后一天來到物理老師的辦公室交上了他的那份實(shí)驗(yàn)報(bào)告??
- 這天當(dāng)老師收到小明修改后的【第二份】實(shí)驗(yàn)報(bào)告后,看來看去又指出了他一些地方的問題,于是就再讓小明回去修改,那此時(shí)的小明沒辦法,只能按照老師的要求來,繼續(xù)回去修改自己的報(bào)告。有耐心的小明在又一次修改了自己的報(bào)告后找到老師,可老師還是說:“小明,你這報(bào)告怎么越改越差呀,還不如第二版來得好呢,我看你也別改了,就把第二份的實(shí)驗(yàn)報(bào)告交上來,我看看給你些分?jǐn)?shù)”
- 聽了老師的這番說辭,小明心想,我每次都是在上一次的報(bào)告上直接做修改的呀,怎么還找得到第二版的實(shí)驗(yàn)報(bào)告呢?那此時(shí)的小明就非?;艔?,不知道該如何是好,只能回憶那個(gè)時(shí)候自己的報(bào)告是如何寫的,然后再慢慢地做修改
此時(shí)的你【張三】目睹了上面這一切過程,于是心中便多了一個(gè)心眼??
- 在小明交完實(shí)驗(yàn)報(bào)告的后一天,你也需要交實(shí)驗(yàn)報(bào)告了。 當(dāng)報(bào)告交上去后,果然老師也把你叫過去然后讓你修改實(shí)驗(yàn)報(bào)告里的很多內(nèi)容,于是呢你也回到寢室準(zhǔn)備開始你的修改,此時(shí)的你因?yàn)樵诳戳耸矣研∶鞯脑庥鲋螅谑蔷投嗔艘环菥?,你呢就將原先的那份?bào)告
ctr + c,ctrl + v
在當(dāng)前目錄下保留了一份,將原先的這份記為【版本1】,然后拷貝出來的副本修改為【版本2】,然后在版本2上去做一個(gè)修改,修改完之后,又拿到物理老師那里。果然,她又指出了其他的一堆問題讓你去繼續(xù)修改 - 回到宿舍后,你也是和上次一樣,將【版本2】進(jìn)行
ctr + c,ctrl + v
在當(dāng)前目錄下保留了一份,然后再【版本3】上面做修改,改了一個(gè)晚上,第二天拿去給她看的時(shí)候,她依舊是不滿意(一般的老師也不會(huì)這樣),于是就說:“張三呀,你和是不是和小明一個(gè)宿舍的呀?你們這個(gè)報(bào)告都寫得差不多,而且都不怎么樣,這樣吧,你把第二份的報(bào)告交上來,我給你個(gè)成績” - 此時(shí)你心中暗暗竊喜,回到宿舍后馬上打開電腦,然后將這個(gè)目錄下的【版本2】實(shí)驗(yàn)報(bào)告立馬發(fā)給了老師
2、程序員與產(chǎn)品經(jīng)理
在上一個(gè)案例的基礎(chǔ)上,我使用【程序員與產(chǎn)品經(jīng)理】的關(guān)系再來解釋一下
- 其實(shí)對(duì)于學(xué)生來說,可以看作是我們程序員;對(duì)于老師來說,可以看作是產(chǎn)品經(jīng)理。當(dāng)我們將業(yè)務(wù)邏輯寫好將代碼上傳的時(shí)候,終于歇了一口氣,可以回家休息了。但是過段時(shí)間產(chǎn)品經(jīng)理又打電話來說這個(gè)地方寫得不對(duì),要你重新寫的時(shí)候就會(huì)很郁悶,以及有時(shí)候和【測(cè)試人員】之間都會(huì)發(fā)生一些沖突
- 當(dāng)產(chǎn)品經(jīng)理讓你改來改去,發(fā)現(xiàn)這塊功能沒有之前好的時(shí)候想讓你重寫改回兩個(gè)禮拜前的那個(gè)版本,此時(shí)若是你沒有提前保存一份的話就【抓瞎】了,又得去重新寫一遍,畢竟我們都是打工人??
難道代碼也和實(shí)驗(yàn)報(bào)告一樣,使用
ctr + c,ctrl + v
復(fù)制嗎,那萬一代碼多了怎么辦,這就需要有東西可以來專門管理我們的代碼
3、張三的CEO之路 —— 版本管理工具的誕生
是的,故事還沒完,我們接著上面的實(shí)驗(yàn)報(bào)告講??
- 你,也就是【張三】在經(jīng)歷了這一切后,知道了這個(gè)老師是怎樣的教學(xué)方式。而且這個(gè)老師還要帶張三和他這個(gè)班其他的課程,所以張三便害怕再出現(xiàn)這樣反復(fù)修改實(shí)驗(yàn)報(bào)告的狼狽樣子???,于是呢他就把這次的實(shí)驗(yàn)報(bào)告修改過程經(jīng)歷做了一個(gè)總結(jié),保留下來??
- 他呢也是一個(gè)很熱心腸的人,就和其他同學(xué)說:“以后若是這個(gè)老師的其他實(shí)驗(yàn)報(bào)告,如果不給你通過的話就來找我,把修改前后修改后的版本都保存在我這里,如果想要哪個(gè)版本都可以來找我拿?!坝谑悄卦絹碓蕉嗟耐瑢W(xué)來找到張三讓他幫忙,到了后面不僅是同班同學(xué),其他專業(yè)、甚至是其他學(xué)院的同學(xué)知道了又張三這么一個(gè)人,于是都來找他,此時(shí)張三就忙不過來了,和【Linus Torvalds】一樣就是每天Ctrl + c/v。。。
- 于是他也和【Linus Torvalds】一樣開發(fā)出來這么一種軟件,擁有服務(wù)端和客戶端,其他同學(xué)只需要在自己本地做管理,將他們的實(shí)驗(yàn)報(bào)告上傳到這個(gè)軟件中,就可以實(shí)現(xiàn)自己對(duì)自己的提交記錄進(jìn)行管理(功能:新建管理文件夾,然后將自己原本的內(nèi)容保存在這個(gè)里面,自己可以再做其他修改)。接下去他自己就很方便了,不需要再幫別人做這么多事
- 但是呢他又一想,不光光是我們學(xué)校會(huì)出現(xiàn)這樣的老師,像清北、一些985/211的學(xué)生可能也會(huì)有這樣的困惑,
于是呢就將自己的這款軟件發(fā)布了出去,推向了全國
,為他取了個(gè)名字。之后當(dāng)張三畢業(yè)之后,就開了一家公司,是這家公司的CEO,于是就聯(lián)合其他程序員優(yōu)化了這個(gè)軟件,將其部署到Web上,而且開發(fā)了客戶端,客戶可以直接在本地瀏覽操作,界面點(diǎn)擊就可以完成內(nèi)容的托管。- 它就是—— gitee/GitHub【底層基于git】
故事講完了,這其實(shí)就是Gitee發(fā)明者故事,它知道了Linux之父發(fā)明了Git,于是便在它的基礎(chǔ)上實(shí)現(xiàn)更趨向于大眾化、專業(yè)化的成就,使得大家也可以使用它來進(jìn)行版本的管理
四、如何在Linux上使用Git
我這里以Gitee為例為大家演示一下如果將自己的代碼上傳進(jìn)行托管
1、創(chuàng)建倉庫
- 通過上面的一系列操作將倉庫創(chuàng)建好之后我們就可以將其拷貝到我們的本地倉庫中了。點(diǎn)擊【克隆/下載】中的復(fù)制即可,通過HTTPS的形式將倉庫的頁面地址拷貝下來
2、將倉庫克隆到本地
- 然后我們來到Xshell中的命令行使用
git clone + 倉庫頁面地址
,這樣就可以將遠(yuǎn)端倉庫中的內(nèi)容全部克隆過來,此時(shí)我們本地也相當(dāng)于是擁有了這個(gè)【GitTest】的倉庫
- 接下去輸入你gitee的用戶名和密碼之后就可以將這個(gè)倉庫克隆你的本地了
- 此時(shí)我們?nèi)ァ緇s】一下就可以發(fā)現(xiàn)
那這時(shí)候就有同學(xué)說了,我把倉庫克隆下來了,那么這個(gè)倉庫在哪里呢?它長什么樣?
- 此時(shí)我們只需在在這個(gè)
git-test
中執(zhí)行一下【ls -la】即可,-l
代表以列表的形式呈現(xiàn)當(dāng)前目錄下的內(nèi)容;-a
表示會(huì)顯示隱藏的文件,也就是以.
開頭的文件 - 那么我們就可以看到有一個(gè)【.git】的東西被顯示出來,其實(shí)它就是我們從遠(yuǎn)端克隆下來的那個(gè)倉庫,其實(shí)通俗點(diǎn)說它就是一個(gè)【目錄/文件夾】
- 其實(shí)這個(gè)倉庫在我們Windows下也是可以看到的,只需要修改一下【查看】方式中【顯示隱藏的文件、文件夾和驅(qū)動(dòng)器】便可以看見這個(gè)
.git
的倉庫了
那這個(gè)倉庫里面有哪些東西呢?我們來看看
- 通過
tree .git
就可以看到這個(gè)目錄中的所有內(nèi)容了
- 我們主要來說一下這個(gè)通過算法生成的隨機(jī)二進(jìn)制通過到Gitee上觀看可以了解到它就是【本地修改記錄的版本號(hào)】
- 然后的話就是【refs (references)】,一些這個(gè)倉庫中有關(guān)我們個(gè)人的資料
好,到這里,相信你對(duì)遠(yuǎn)程倉庫克隆到本地以及對(duì)這個(gè)克隆過來的倉庫有了一定的了解。其實(shí)對(duì)于Gitee來說就是【可視化地展現(xiàn)了我們的倉庫】。接下去我們就要去使用一下這個(gè)倉庫了??
3、git三板斧
倉庫克隆到本地之后,我們就可以將自己的代碼托管到這個(gè)倉庫中了
① git add
首先進(jìn)行的就是【add】,也就是將當(dāng)前目錄下所有文件添加到倉庫里
② git commit
接下去進(jìn)行的就是【commit】,是提交的意思。是什么提交呢?是真正的提交。把我們修改的內(nèi)容提交到本地倉庫
語法格式:git commit -m "日志"
- 不過可以看到,似乎并沒有提交成功的感覺,而是報(bào)出了一些異常的錯(cuò)誤
- 因?yàn)檫@是我們第一次提交內(nèi)容到Gitee倉庫中,但是人家還不認(rèn)識(shí)你,也不會(huì)讓你隨便提交什么東西。所以只需要配置一下我們每次提交的【郵箱】和【用戶名】即可
- 然后我們?cè)偃ァ綾ommit】一下就可以看到這兩個(gè)文件就被提交到了本地倉庫中
那有同學(xué)問,那我要怎么查看我確實(shí)是將這些東西提交到倉庫中了呢??
此時(shí)我們就可以使用到git log
去查看我們提交的一些日志
- 可以看到,里面就有本次【commit】修改后的版本號(hào),而且還會(huì)顯示出我們本次修改的日志。包括更多的還有上面配置的【用戶名】和【郵箱】以及本次提交修改的時(shí)間,都是可以查詢到的
溫馨提示:【日志】不要隨便亂寫,要寫你本次修改了什么內(nèi)容
- 對(duì)于日志來說,是很重要的,因?yàn)橛涗浟四惚敬涡薷膫}庫中的什么內(nèi)容,方便以后可以快速查詢到修改的時(shí)間和位置
- 你之后在公司里寫好代碼后進(jìn)行上傳也是一樣的,對(duì)于日志而言要好好寫,因?yàn)橹罂赡苣愕念I(lǐng)導(dǎo)會(huì)看你的代碼、你的同事可能會(huì)看你的代碼、你們公司的實(shí)習(xí)生也有可能會(huì)看到你的戴代碼。此時(shí)他們就可以通過查看Gitee上面的提交記錄或者是直接
git log
一下就可以搜索到你之前提交的記錄,這個(gè)只要寫了是無法修改的,所以我們對(duì)于每一次的代碼修改都要認(rèn)真記錄日志
??對(duì)于以上我們所做的【add】和【push】,其實(shí)已經(jīng)完成了代碼的托管,因?yàn)檫@個(gè)倉庫就在我們本地,將代碼放到這個(gè)倉庫中,只要我們的服務(wù)器沒壞掉,那都是可以找得到的
??此時(shí)對(duì)應(yīng)的就是張三前面在為同學(xué)服務(wù)時(shí)將他們的代碼拷貝到本地電腦中的過程
③ git push
最后要進(jìn)行的就是【push】,為何要push呢,其實(shí)也就是將本地倉庫中保存的內(nèi)容推送到遠(yuǎn)程倉庫,讓本地倉庫和遠(yuǎn)端倉庫保持一致
- 剛才說到過,對(duì)于本地的倉庫雖然可以起到一個(gè)永久的保存,但是難免會(huì)出現(xiàn)突發(fā)事故導(dǎo)致本地機(jī)器故障,此時(shí)就找不到之前寫的代碼了【當(dāng)然你也可以使用U盤保存,不過U盤也是有使用年限的,不可以一直用過去】
- 但是對(duì)虛擬的云端就會(huì)一直存在,不會(huì)丟失,所以我們可以將本地倉庫中的內(nèi)容進(jìn)行一個(gè)推送
- 不過若是你第一次進(jìn)行
git push
的話,就出現(xiàn)上面這樣的警告提示?這點(diǎn)的話是由于你git push
沒有指定分支,只有當(dāng)前分支會(huì)被 push 到你使用 git pull 獲取的代碼。
此時(shí)運(yùn)行一下上面我框出的兩句git config –global push.default matching
或: git config –global push.default simple
。之后再去【git push】的時(shí)候就不會(huì)出現(xiàn)類似的問題了
- 然后我們?cè)偃ァ緂it push】一下就可以發(fā)現(xiàn)不會(huì)出現(xiàn)像剛才那樣的問題了,那也就推送成功了( ?? ω ?? )
- 通過來到Gitee上的遠(yuǎn)程倉庫中可以看到我們剛才從本地倉庫【push】上來的內(nèi)容,這也就實(shí)現(xiàn)了本地倉庫和遠(yuǎn)端倉庫保持一致
4、有關(guān)git的其他指令
講完了基本的git三板斧后,我們?cè)賮碚f說有關(guān)Linux下git的其他指令操作
-
刪除倉庫中的文件 ——
git rm 文件名
-
查看本地和遠(yuǎn)端之間同步的狀態(tài) ——
git status
-
刪除本地倉庫 ——
git .git rm
- 首先我們來看看如何去刪除倉庫中的文件
- 在刪除掉這個(gè)文件之后我們?cè)賮砜纯催@個(gè)本地倉庫和遠(yuǎn)程倉庫的狀態(tài)
- 所有的操作都展示完了,我們就將這個(gè)本地倉庫刪除吧!
- 可以看到,在刪除完后再去
git status
查看狀態(tài)的話就會(huì)檢測(cè)出來本地的并不是一個(gè)git倉庫(repository)
除了刪除本地倉庫,在Gitee上創(chuàng)建的遠(yuǎn)程倉庫也是可以刪除的
- 首先點(diǎn)擊【管理】
- 點(diǎn)擊左側(cè)菜單欄的【刪除倉庫】
- 根據(jù)提示操作即可,輸入內(nèi)容
- 最后再進(jìn)行一下密碼驗(yàn)證就可以刪除成功了
- 此時(shí)返回Gitee的大廳就可以看到我們刪除倉庫的記錄了
五、總結(jié)與提煉
最后來總結(jié)一下本文所學(xué)習(xí)的內(nèi)容
- 首先我們介紹了有關(guān)【git】的相關(guān)知識(shí),知道了它是由Linux之父【Linus Torvalds】在迫于某些需求的時(shí)候創(chuàng)建的,git是一款版本控制和多人協(xié)作的軟件
- 然后我們便說到了有關(guān)git的【版本控制】,因?yàn)榫W(wǎng)上大多數(shù)的文章都講解了非常深?yuàn)W難懂,于是我就使用到一些生活中的小案例來幫助大家理解,不過可不要真的和產(chǎn)品經(jīng)理吵架哦,那就會(huì)很麻煩了~
- 最后呢我們就說到了如何在Linux上去使用git,教了大家如何在Gitee上創(chuàng)建倉庫并且將倉庫克隆到本地。然后就可以使用git三板斧將本地的代碼/文件托管到本地倉庫進(jìn)行管理了,但是本地倉庫可能會(huì)存在風(fēng)險(xiǎn),所以我們就可以使用第三板斧【push】將本地倉庫中的內(nèi)容推送到遠(yuǎn)端倉庫,實(shí)現(xiàn)了一個(gè)云端備份
以上就是本文要介紹的所有內(nèi)容,感謝您的觀看文章來源:http://www.zghlxwxcb.cn/news/detail-790439.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-790439.html
到了這里,關(guān)于Linux | 分布式版本控制工具Git【版本管理 + 遠(yuǎn)程倉庫克隆】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!