Git 和 GitHub 教程——版本控制入门
大家好,我是若川。持續(xù)組織了6個(gè)月源碼共讀活動(dòng),感興趣的可以點(diǎn)此加我微信 ruochuan12?參與,每周大家一起學(xué)習(xí)200行左右的源碼,共同進(jìn)步。同時(shí)極力推薦訂閱我寫(xiě)的《學(xué)習(xí)源碼整體架構(gòu)系列》?包含20余篇源碼文章。歷史面試系列
Learn to Code RPG 是一個(gè)完全開(kāi)源免費(fèi)的項(xiàng)目,你將在其中自學(xué)編程,結(jié)交科技行業(yè)的朋友,并實(shí)現(xiàn)成為開(kāi)發(fā)者的夢(mèng)想。社區(qū)的志愿貢獻(xiàn)者們正在協(xié)作翻譯不同語(yǔ)言版本,感興趣參與中文版翻譯的朋友們可以聯(lián)系小助手(微信:fcczhongguo)。歡迎大家閱讀《從 freeCodeCamp 視覺(jué)小說(shuō)游戲 Learn to Code RPG 學(xué)習(xí)計(jì)算機(jī)科學(xué)概念》了解詳情。
Git 和 GitHub 是各個(gè)領(lǐng)域的開(kāi)發(fā)者都應(yīng)該學(xué)習(xí)的兩項(xiàng)技術(shù)。
如果你是一個(gè)初級(jí)開(kāi)發(fā)者,你可能會(huì)認(rèn)為這兩個(gè)術(shù)語(yǔ)意味著同樣的事情——但它們是不同的。
本教程將幫助你了解什么是 Git 和版本控制,你需要知道的基本 Git 命令,如何使用其功能來(lái)提高工作效率,以及如何使用 GitHub 來(lái)擴(kuò)展這些功能。
本指南對(duì)初學(xué)者友好,因?yàn)槔訉⒎浅H菀桌斫狻K矊⑹且粋€(gè)通用的教程,所以不管你最喜歡的編程語(yǔ)言是什么,你都可以跟著學(xué)。
對(duì)于我們的項(xiàng)目,我們將做一個(gè)寫(xiě)在文本(txt)文件中的待辦事項(xiàng)清單。你將看到我們?nèi)绾问褂?Git 的功能來(lái)工作,并創(chuàng)建列表的最終版本。
你需要先準(zhǔn)備好的
為了完成本教程,你將需要以下條件:
一個(gè)命令行界面(或者說(shuō)是終端)
一個(gè)你喜歡的文本編輯器(我將使用 VS Code)
一個(gè) GitHub 賬戶(hù)
什么是 Git
Git 是一個(gè)版本控制系統(tǒng),可以讓你跟蹤你對(duì)文件所做的修改。使用 Git,你可以恢復(fù)到文件的各種狀態(tài)(就像一臺(tái)時(shí)間旅行機(jī))。你也可以制作一個(gè)文件的副本,對(duì)該副本進(jìn)行修改,然后將這些修改合并到原來(lái)的副本中。
例如,你可以在一個(gè)網(wǎng)站的登陸頁(yè)面上工作,發(fā)現(xiàn)你不喜歡這個(gè)導(dǎo)航欄。但與此同時(shí),你可能不想開(kāi)始改變它的組件,因?yàn)樗赡軙?huì)變得更糟。
有了 Git,你可以為該文件創(chuàng)建一個(gè)相同的副本,然后對(duì)導(dǎo)航欄進(jìn)行修改。然后,當(dāng)你對(duì)你的改動(dòng)感到滿意時(shí),你可以把副本合并到原文件中。
你并不局限于將 Git 僅僅用于源代碼文件,你也可以用它來(lái)跟蹤文本文件,甚至是圖像。這意味著,Git 不僅僅是為開(kāi)發(fā)者服務(wù)的,任何人都可以找到它的幫助。
如何安裝 Git
為了使用 Git,你必須在你的電腦上安裝它。要做到這一點(diǎn),你可以在官方網(wǎng)站 下載最新版本。你可以從給出的選項(xiàng)中下載適合你的操作系統(tǒng)。
你也可以用命令行來(lái)安裝 Git,但由于每個(gè)操作系統(tǒng)的命令都不一樣,我們將專(zhuān)注于更通用的方法。
如何配置 Git
我將假設(shè)此時(shí)你已經(jīng)安裝了 Git。為了驗(yàn)證這一點(diǎn),你可以在命令行上運(yùn)行這個(gè)命令:git --version。這將顯示當(dāng)前安裝在你電腦上的版本。
接下來(lái),你需要做的是設(shè)置你的用戶(hù)名和電子郵件地址。Git 會(huì)使用這些信息來(lái)識(shí)別誰(shuí)對(duì)文件進(jìn)行了修改。
要設(shè)置你的用戶(hù)名,輸入并執(zhí)行這些命令 : git config --global user.name "YOUR_USERNAME" 和 git config --global user.email "YOUR_EMAIL"。請(qǐng)確保用你選擇的值替換 "YOUR_USERNAME" 和"YOUR_EMAIL"。
如何在 Git 中創(chuàng)建和初始化一個(gè)項(xiàng)目
我們終于完成了安裝和設(shè)置 Git 的工作,現(xiàn)在是時(shí)候創(chuàng)建我們的項(xiàng)目了。
我在桌面上創(chuàng)建了一個(gè)名為 Git and GitHub tutorial的文件夾。使用命令行,進(jìn)入到你新項(xiàng)目的文件夾位置。對(duì)我來(lái)說(shuō),我將運(yùn)行以下命令。:
cd desktop
cd Git and GitHub tutorial
如果你是命令行的新手,并且還在學(xué)習(xí)如何使用它來(lái)查看你的電腦文件夾,那么我建議使用微軟的 Visual Studio Code。它是一個(gè)代碼編輯器,有一個(gè)內(nèi)置的終端來(lái)執(zhí)行命令。你可以下載它這里。
安裝VS Code后,在編輯器中打開(kāi)你的項(xiàng)目,為你的項(xiàng)目打開(kāi)一個(gè)新的終端。這將自動(dòng)把終端/命令行指向你的項(xiàng)目的路徑。
現(xiàn)在要初始化你的項(xiàng)目,只需運(yùn)行g(shù)it init。這將告訴 Git 準(zhǔn)備好開(kāi)始監(jiān)視你的文件的每一個(gè)變化。它看起來(lái)像這樣:
git?init
第一行是關(guān)于我的電腦的信息和文件夾存在的路徑。第二行是命令git init,第三行是發(fā)回的響應(yīng),告訴我我的倉(cāng)庫(kù)(repo)已經(jīng)被初始化了。它被認(rèn)為是空的,因?yàn)槲覀冞€沒(méi)有告訴 Git 要追蹤哪些文件。
倉(cāng)庫(kù)只是定義一個(gè)被 Git 監(jiān)視/跟蹤的項(xiàng)目的另一種方式。
Git 項(xiàng)目文件
我只創(chuàng)建了一個(gè)名為 "todo.txt "的文件。這個(gè)文件看起來(lái)是這樣的:
MY TO-DO LIST1. Write an article. 2. Code. 3. Study books. 4. Attend classes on time. 5. Visit aunt. 6. Apply for remote jobs.在我們繼續(xù)學(xué)習(xí)其他 Git 命令之前,讓我們先談?wù)?GitHub。
什么是 GitHub
GitHub 是一個(gè)為 Git 存儲(chǔ)庫(kù)提供的在線托管服務(wù)。想象一下,你在家里做一個(gè)項(xiàng)目,當(dāng)你不在的時(shí)候,也許是在朋友那里,你突然想起了一個(gè)代碼錯(cuò)誤的解決方案,讓你幾天都坐立不安。
你不能進(jìn)行這些修改,因?yàn)槟愕碾娔X不在你身邊。但如果你的項(xiàng)目托管在 GitHub 上,你就可以在你能接觸到的任何電腦上用命令訪問(wèn)和下載該項(xiàng)目。然后你就可以進(jìn)行修改,并將最新版本推送回 GitHub。
總之,GitHub 可以讓你在他們的平臺(tái)上存儲(chǔ)你的 repo。GitHub 的另一個(gè)了不起的功能是你可以在任何地方與其他開(kāi)發(fā)者進(jìn)行合作。
現(xiàn)在我們已經(jīng)在本地創(chuàng)建并初始化了我們的項(xiàng)目,讓我們把它推送到 GitHub。
如果你是初學(xué)者,你會(huì)遇到一些新的術(shù)語(yǔ),比如推送(push)、提交(commit)、添加(add)等等——但不要被它們嚇倒,只要多加練習(xí),你就能記住這些術(shù)語(yǔ)和它們的作用。
如何推送一個(gè)倉(cāng)庫(kù)到 GitHub
我將把本節(jié)分為幾個(gè)步驟,以幫助你更清楚地了解這個(gè)過(guò)程。
第一步 - 創(chuàng)建一個(gè) GitHub 賬戶(hù)
為了能夠使用 GitHub,你必須先創(chuàng)建一個(gè)賬戶(hù)。你可以在他們的[網(wǎng)站](https://github.com/) 創(chuàng)建。
第二步 - 創(chuàng)建一個(gè)存儲(chǔ)庫(kù)
你可以點(diǎn)擊頁(yè)面右上角的+符號(hào),然后選擇 “New repository”。給你的版本庫(kù)起個(gè)名字,然后向下滾動(dòng)并點(diǎn)擊 “Create repository”。
第三步 - 添加和提交文件
在我們添加(add)和提交(commit)我們的文件之前,你需要了解一個(gè)文件被 Git 跟蹤的階段。
已經(jīng)提交的狀態(tài)
當(dāng)一個(gè)文件的所有修改都被保存在本地的 repo 中時(shí),該文件就處于提交的(committed)狀態(tài)。處于提交階段的文件是可以被推送到遠(yuǎn)程 repo(在 GitHub 上)的文件。
已修改狀態(tài)
處于修改(modified)狀態(tài)的文件已經(jīng)做了一些修改,但還沒(méi)有保存。這意味著該文件的狀態(tài)與之前在提交狀態(tài)下的狀態(tài)有了改變。
暫存狀態(tài)
處于暫存(staged)狀態(tài)的文件意味著它可以被提交了。在這種狀態(tài)下,所有必要的修改都已經(jīng)完成,所以下一步就是把文件移到提交狀態(tài)。
你可以把 Git 想象成一臺(tái)攝像機(jī),這樣就能更好地理解。只有當(dāng)文件到達(dá)提交狀態(tài)時(shí),相機(jī)才會(huì)進(jìn)行快照。在這個(gè)狀態(tài)之后,相機(jī)開(kāi)始比較正在對(duì)同一文件進(jìn)行的修改和最后一次快照(這就是修改狀態(tài))。而當(dāng)所需的修改完成后,文件就會(huì)被分階段移動(dòng)到提交狀態(tài),以便進(jìn)行新的快照。
目前,這可能是一個(gè)很大的信息量,但不要?dú)怵H——隨著實(shí)踐的進(jìn)行,它變得更容易。
如何在 Git 中添加文件
當(dāng)我們第一次初始化我們的項(xiàng)目時(shí),該文件沒(méi)有被 Git 追蹤到。要做到這一點(diǎn),我們使用這個(gè)命令git add .,將添加當(dāng)前目錄下所有文件。如果你想添加一個(gè)特定的文件,也許是一個(gè)名為about.txt的文件,你可以用git add about.txt。
現(xiàn)在,我們的文件已經(jīng)處于暫存狀態(tài)(staged state)。這條命令之后你不會(huì)得到回應(yīng),但要知道你的文件處于什么狀態(tài),你可以運(yùn)行g(shù)it status命令。
如何在 Git 中提交文件
文件下一個(gè)狀態(tài)處于提交狀態(tài)(committed state)。為了提交我們的文件,我們使用git commit -m "first commit"命令。
命令的第一部分 "git commit "告訴 Git,所有被暫存的文件都準(zhǔn)備好提交了,所以是時(shí)候進(jìn)行快照了。第二部分 -m "first commit" 是提交信息。-m是信息的縮寫(xiě),而括號(hào)內(nèi)的文字是提交信息。
執(zhí)行這個(gè)命令后,你應(yīng)該得到一個(gè)類(lèi)似這樣的響應(yīng):
git?commit
現(xiàn)在我們的文件已經(jīng)處于提交狀態(tài)(committed state)。
第四步 - 推送倉(cāng)庫(kù)到 GitHub
創(chuàng)建完倉(cāng)庫(kù)后,你的瀏覽器應(yīng)該跳到一個(gè)頁(yè)面,告訴你如何在本地創(chuàng)建一個(gè)倉(cāng)庫(kù)或推送一個(gè)現(xiàn)有倉(cāng)庫(kù)。
在我們的例子中,項(xiàng)目已經(jīng)存在于本地,所以我們將使用 “.…or push an existing repository from the command line” 部分的命令。這些是命令:
git?remote?add?origin?https://github.com/ihechikara/git-and-github-tutorial.git git?branch?-M?main git?push?-u?origin?main第一個(gè)命令 git remote add origin [https://github.com/ihechikara/git-and-github-tutorial.git](https://github.com/ihechikara/git-and-github-tutorial.git),在你的本地 repo 和 Github 上的遠(yuǎn)程 repo 之間建立連接。
你的遠(yuǎn)程項(xiàng)目的 URL 應(yīng)該與上面的完全不同。所以要根據(jù)你的實(shí)際 URL,確保你是按照步驟,用你自己的遠(yuǎn)程 repo 工作。執(zhí)行這個(gè)命令后,你通常不會(huì)得到回應(yīng),但要確保你有互聯(lián)網(wǎng)連接。
第二個(gè)命令 git branch -M main 將主分支的名字改為 "main"。默認(rèn)的分支可能被創(chuàng)建為 "master",但 "main "是現(xiàn)在這個(gè) repo 的標(biāo)準(zhǔn)名稱(chēng)。這里通常沒(méi)有回應(yīng)。
最后一個(gè)命令 git push -u origin main ?將你的 repo 從本地設(shè)備推送到 GitHub。你應(yīng)該得到與此類(lèi)似的回應(yīng):
git?push
為了幫助你加深對(duì)文件階段的理解,我將對(duì)文件進(jìn)行修改,然后將新版本推送到 GitHub。
回顧一下,我們的文件現(xiàn)在處于提交狀態(tài)。讓我們對(duì)文件進(jìn)行修改,并注意到這些狀態(tài)。
我將在待辦事項(xiàng)列表中添加一個(gè)新任務(wù):
MY TO-DO LIST1. Write an article. 2. Code. 3. Study books. 4. Attend classes on time. 5. Visit aunt. 6. Apply for remote jobs. 7. Practice code添加新任務(wù)后,運(yùn)行g(shù)it status命令。你應(yīng)該看到這樣的情況:
git?status
在對(duì)文件進(jìn)行修改后,它移到了修改狀態(tài)--但它還沒(méi)有被分期提交,所以你還不能把它推送到 GitHub。Git 并沒(méi)有對(duì)這個(gè)當(dāng)前狀態(tài)進(jìn)行最終的快照,因?yàn)樗皇菍⑽覀儸F(xiàn)在所做的修改與最后的快照進(jìn)行比較。
現(xiàn)在我們要添加(stage)這個(gè)文件,然后提交(commit )并推送(push)它。這與上一節(jié)的做法相同。
我們首先使用git add .添加文件,它添加了當(dāng)前目錄下的所有文件(在我們的例子中是一個(gè)文件)。然后我們通過(guò)運(yùn)行g(shù)it commit -m "added new task"來(lái)提交該文件,接著是git push -u origin main。
這就是將修改過(guò)的文件推送到 GitHub 的三個(gè)步驟。添加(add),提交(commit),然后推送(push)。我希望你現(xiàn)在理解了文件階段和與之相關(guān)的命令。
如何在 Git 中使用分支(branch)
有了分支,你可以在不破壞原始副本的情況下,創(chuàng)建一個(gè)你想要處理的文件副本。你可以把這些修改合并到原始副本上,或者讓分支保持獨(dú)立。
在我們開(kāi)始使用分支之前,我想給大家看一下我們的 repo 的可視化表示,它看起來(lái)像這樣:
上圖顯示了我們的主分支和最近的兩次提交(第一次提交和添加的新任務(wù)提交)。
在這一點(diǎn)上,我想在列表中添加更多的任務(wù),但我還不確定是否要把它們放在主列表中。因此,我將創(chuàng)建一個(gè)名為 test 的新分支,看看加入更多任務(wù)后我的列表會(huì)是什么樣子。
要?jiǎng)?chuàng)建一個(gè)新的分支,運(yùn)行這個(gè)命令。git checkout -b test。我將把它分開(kāi)來(lái)。
checkout告訴 Git 它應(yīng)該切換到一個(gè)新的分支。b告訴 Git 創(chuàng)建一個(gè)新的分支。test是要?jiǎng)?chuàng)建和切換到的分支的名字。以下是你應(yīng)該得到的響應(yīng):
git?checkout?-b現(xiàn)在我們已經(jīng)創(chuàng)建了一個(gè)新的分支,這就是我們的 repo 的樣子:
git?branch
我們從上次提交的狀態(tài)中創(chuàng)建了新的分支。現(xiàn)在讓我們?yōu)檫@個(gè)新分支添加更多任務(wù)。
MY TO-DO LIST1. Write an article. 2. Code. 3. Study books. 4. Attend classes on time. 5. Visit aunt. 6. Apply for remote jobs. 7. Practice code 8. Complete internship task. 9. Practice chess openings. 10. Solve chess puzzles. 11. Check exam schedule.我增加了四個(gè)新任務(wù)。要把新的狀態(tài)合并到主分支(main branch)。你必須先把這個(gè)分支分階段并提交,由于我們?cè)谏弦还?jié)中做了兩次,我就不詳細(xì)介紹如何提交。
你應(yīng)該自己試著做一下,這樣你就會(huì)明白它是如何工作的。作為提示,先添加文件,然后帶著信息提交(參考上一節(jié)的細(xì)節(jié),告訴你如何做)。
提交完測(cè)試分支后,通過(guò)運(yùn)行以下命令切換回主分支,git checkout main。
你是否注意到,我們沒(méi)有添加-b?這是因?yàn)槲覀儾皇窃趧?chuàng)建一個(gè)新的分支,而是切換到一個(gè)現(xiàn)有的分支。你可以通過(guò)運(yùn)行g(shù)it branch命令來(lái)檢查你的 repo 中存在的所有分支。
現(xiàn)在,我們可以通過(guò)運(yùn)行g(shù)it merge test,將測(cè)試分支中的修改合并到主分支中。這時(shí),你會(huì)看到測(cè)試分支中的所有改動(dòng)都反映在主分支中。你還應(yīng)該收到類(lèi)似這樣的回復(fù):
git?merge
下面是我們的 repo 的圖示:
如果你繼續(xù)將你的 repo 推送到 GitHub,你會(huì)發(fā)現(xiàn)測(cè)試分支不會(huì)被推送。它只會(huì)保留在你的本地 repo 中。如果你想推送你的測(cè)試分支,可以用git checkout test切換到該分支,然后運(yùn)行g(shù)it push -u origin test。
如何在 Git 中拉取一個(gè)倉(cāng)庫(kù)
在 Git 中拉取意味著將遠(yuǎn)程倉(cāng)庫(kù)的當(dāng)前狀態(tài)克隆到你的電腦/倉(cāng)庫(kù)中。當(dāng)你想在不同的電腦上操作你的倉(cāng)庫(kù)時(shí),或者當(dāng)你在網(wǎng)上為一個(gè)開(kāi)源項(xiàng)目做貢獻(xiàn)時(shí),這就很方便了。
要測(cè)試這一點(diǎn),不用擔(dān)心切換到新的電腦。只要運(yùn)行cd .. 就可以離開(kāi)當(dāng)前目錄并返回上一層目錄。在我自己的例子中,我已經(jīng)導(dǎo)航回到了我的桌面。
進(jìn)入 GitHub,在你的倉(cāng)庫(kù)的主頁(yè)上,你應(yīng)該看到一個(gè)綠色的按鈕,上面寫(xiě)著 "code"。當(dāng)你點(diǎn)擊這個(gè)按鈕時(shí),你應(yīng)該在一個(gè)下拉菜單中看到一些選項(xiàng)。繼續(xù)并復(fù)制 HTTPS URL。
之后,運(yùn)行g(shù)it clone YOUR_HTTPS_URL。這個(gè)命令會(huì)把遠(yuǎn)程版本庫(kù)拉到你的本地電腦上,放在一個(gè)叫g(shù)it-and-git-tutorial的文件夾里。就是說(shuō):
git?clone
結(jié)語(yǔ)
本文介紹有助于你開(kāi)始使用 Git 的基本命令。我們還開(kāi)始學(xué)習(xí)如何使用 GitHub。
如果你已經(jīng)跟到了這一步,那么恭喜你,你已經(jīng)可以開(kāi)始了。現(xiàn)在無(wú)論你使用什么編程語(yǔ)言,都可以在你的項(xiàng)目中使用 Git。
你應(yīng)該知道,這些并不是 Git 中存在的所有命令,所以你可以隨時(shí)做更多的研究來(lái)了解更多的命令和它們的用途。這篇文章和手冊(cè)是很好的開(kāi)始。這個(gè) gist 是查看更多 Git 命令的詳細(xì)列表的好地方。
祝你編程愉快!
原文鏈接:https://www.freecodecamp.org/news/git-and-github-for-beginners/
作者:Ihechikara Vincent Abba
譯者:luojiyin
·················?若川簡(jiǎn)介?·················
你好,我是若川,畢業(yè)于江西高校。現(xiàn)在是一名前端開(kāi)發(fā)“工程師”。寫(xiě)有《學(xué)習(xí)源碼整體架構(gòu)系列》20余篇,在知乎、掘金收獲超百萬(wàn)閱讀。
從2014年起,每年都會(huì)寫(xiě)一篇年度總結(jié),已經(jīng)寫(xiě)了7篇,點(diǎn)擊查看年度總結(jié)。
同時(shí),最近組織了源碼共讀活動(dòng),幫助3000+前端人學(xué)會(huì)看源碼。公眾號(hào)愿景:幫助5年內(nèi)前端人走向前列。
識(shí)別上方二維碼加我微信、拉你進(jìn)源碼共讀群
今日話題
略。分享、收藏、點(diǎn)贊、在看我的文章就是對(duì)我最大的支持~
總結(jié)
以上是生活随笔為你收集整理的Git 和 GitHub 教程——版本控制入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 前端学习(2994):vue+eleme
- 下一篇: NekoHTML学习笔记