Git 和 GitHub 教程——版本控制入門

大家好,我是若川。持續組織了6個月源碼共讀活動,感興趣的可以點此加我微信 ruochuan12?參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》?包含20余篇源碼文章。歷史面試系列

Learn to Code RPG 是一個完全開源免費的項目,你將在其中自學編程,結交科技行業的朋友,并實現成為開發者的夢想。社區的志愿貢獻者們正在協作翻譯不同語言版本,感興趣參與中文版翻譯的朋友們可以聯系小助手(微信:fcczhongguo)。歡迎大家閱讀《從 freeCodeCamp 視覺小說游戲 Learn to Code RPG 學習計算機科學概念》了解詳情。

Git 和 GitHub 是各個領域的開發者都應該學習的兩項技術。

如果你是一個初級開發者,你可能會認為這兩個術語意味著同樣的事情——但它們是不同的。

本教程將幫助你了解什么是 Git 和版本控制,你需要知道的基本 Git 命令,如何使用其功能來提高工作效率,以及如何使用 GitHub 來擴展這些功能。

本指南對初學者友好,因為例子將非常容易理解。它也將是一個通用的教程,所以不管你最喜歡的編程語言是什么,你都可以跟著學。

對于我們的項目,我們將做一個寫在文本(txt)文件中的待辦事項清單。你將看到我們如何使用 Git 的功能來工作,并創建列表的最終版本。

你需要先準備好的

為了完成本教程,你將需要以下條件:

  • 一個命令行界面(或者說是終端)

  • 一個你喜歡的文本編輯器(我將使用 VS Code)

  • 一個 GitHub 賬戶

什么是 Git

Git 是一個版本控制系統,可以讓你跟蹤你對文件所做的修改。使用 Git,你可以恢復到文件的各種狀態(就像一臺時間旅行機)。你也可以制作一個文件的副本,對該副本進行修改,然后將這些修改合并到原來的副本中。

例如,你可以在一個網站的登陸頁面上工作,發現你不喜歡這個導航欄。但與此同時,你可能不想開始改變它的組件,因為它可能會變得更糟。

有了 Git,你可以為該文件創建一個相同的副本,然后對導航欄進行修改。然后,當你對你的改動感到滿意時,你可以把副本合并到原文件中。

你并不局限于將 Git 僅僅用于源代碼文件,你也可以用它來跟蹤文本文件,甚至是圖像。這意味著,Git 不僅僅是為開發者服務的,任何人都可以找到它的幫助。

如何安裝 Git

為了使用 Git,你必須在你的電腦上安裝它。要做到這一點,你可以在官方網站 下載最新版本。你可以從給出的選項中下載適合你的操作系統。

你也可以用命令行來安裝 Git,但由于每個操作系統的命令都不一樣,我們將專注于更通用的方法。

如何配置 Git

我將假設此時你已經安裝了 Git。為了驗證這一點,你可以在命令行上運行這個命令:git --version。這將顯示當前安裝在你電腦上的版本。

接下來,你需要做的是設置你的用戶名和電子郵件地址。Git 會使用這些信息來識別誰對文件進行了修改。

要設置你的用戶名,輸入并執行這些命令 : git config --global user.name "YOUR_USERNAME"git config --global user.email "YOUR_EMAIL"。請確保用你選擇的值替換 "YOUR_USERNAME""YOUR_EMAIL"

如何在 Git 中創建和初始化一個項目

我們終于完成了安裝和設置 Git 的工作,現在是時候創建我們的項目了。

我在桌面上創建了一個名為 Git and GitHub tutorial的文件夾。使用命令行,進入到你新項目的文件夾位置。對我來說,我將運行以下命令。:

cd desktop

cd Git and GitHub tutorial

如果你是命令行的新手,并且還在學習如何使用它來查看你的電腦文件夾,那么我建議使用微軟的 Visual Studio Code。它是一個代碼編輯器,有一個內置的終端來執行命令。你可以下載它這里。

安裝VS Code后,在編輯器中打開你的項目,為你的項目打開一個新的終端。這將自動把終端/命令行指向你的項目的路徑。

現在要初始化你的項目,只需運行git init。這將告訴 Git 準備好開始監視你的文件的每一個變化。它看起來像這樣:

461ce2f2d55b20ce091d74975fbc9992.png


git?init

第一行是關于我的電腦的信息和文件夾存在的路徑。第二行是命令git init,第三行是發回的響應,告訴我我的倉庫(repo)已經被初始化了。它被認為是空的,因為我們還沒有告訴 Git 要追蹤哪些文件。

倉庫只是定義一個被 Git 監視/跟蹤的項目的另一種方式。

Git 項目文件

我只創建了一個名為 "todo.txt "的文件。這個文件看起來是這樣的:

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.

在我們繼續學習其他 Git 命令之前,讓我們先談談 GitHub。

什么是 GitHub

GitHub 是一個為 Git 存儲庫提供的在線托管服務。想象一下,你在家里做一個項目,當你不在的時候,也許是在朋友那里,你突然想起了一個代碼錯誤的解決方案,讓你幾天都坐立不安。

你不能進行這些修改,因為你的電腦不在你身邊。但如果你的項目托管在 GitHub 上,你就可以在你能接觸到的任何電腦上用命令訪問和下載該項目。然后你就可以進行修改,并將最新版本推送回 GitHub。

總之,GitHub 可以讓你在他們的平臺上存儲你的 repo。GitHub 的另一個了不起的功能是你可以在任何地方與其他開發者進行合作。

現在我們已經在本地創建并初始化了我們的項目,讓我們把它推送到 GitHub。

如果你是初學者,你會遇到一些新的術語,比如推送(push)、提交(commit)、添加(add)等等——但不要被它們嚇倒,只要多加練習,你就能記住這些術語和它們的作用。

如何推送一個倉庫到 GitHub

我將把本節分為幾個步驟,以幫助你更清楚地了解這個過程。

第一步 - 創建一個 GitHub 賬戶

為了能夠使用 GitHub,你必須先創建一個賬戶。你可以在他們的[網站](https://github.com/) 創建。

第二步 - 創建一個存儲庫

你可以點擊頁面右上角的+符號,然后選擇 “New repository”。給你的版本庫起個名字,然后向下滾動并點擊 “Create repository”。

第三步 - 添加和提交文件

在我們添加(add)和提交(commit)我們的文件之前,你需要了解一個文件被 Git 跟蹤的階段。

已經提交的狀態

當一個文件的所有修改都被保存在本地的 repo 中時,該文件就處于提交的(committed)狀態。處于提交階段的文件是可以被推送到遠程 repo(在 GitHub 上)的文件。

已修改狀態

處于修改(modified)狀態的文件已經做了一些修改,但還沒有保存。這意味著該文件的狀態與之前在提交狀態下的狀態有了改變。

暫存狀態

處于暫存(staged)狀態的文件意味著它可以被提交了。在這種狀態下,所有必要的修改都已經完成,所以下一步就是把文件移到提交狀態。

你可以把 Git 想象成一臺攝像機,這樣就能更好地理解。只有當文件到達提交狀態時,相機才會進行快照。在這個狀態之后,相機開始比較正在對同一文件進行的修改和最后一次快照(這就是修改狀態)。而當所需的修改完成后,文件就會被分階段移動到提交狀態,以便進行新的快照。

目前,這可能是一個很大的信息量,但不要氣餒——隨著實踐的進行,它變得更容易。

如何在 Git 中添加文件

當我們第一次初始化我們的項目時,該文件沒有被 Git 追蹤到。要做到這一點,我們使用這個命令git add .,將添加當前目錄下所有文件。如果你想添加一個特定的文件,也許是一個名為about.txt的文件,你可以用git add about.txt

現在,我們的文件已經處于暫存狀態(staged state)。這條命令之后你不會得到回應,但要知道你的文件處于什么狀態,你可以運行git status命令。

如何在 Git 中提交文件

文件下一個狀態處于提交狀態(committed state)。為了提交我們的文件,我們使用git commit -m "first commit"命令。

命令的第一部分 "git commit "告訴 Git,所有被暫存的文件都準備好提交了,所以是時候進行快照了。第二部分 -m "first commit" 是提交信息。-m是信息的縮寫,而括號內的文字是提交信息。

執行這個命令后,你應該得到一個類似這樣的響應:

f44e4abc42ffad6e04e68cac02964029.png


git?commit

現在我們的文件已經處于提交狀態(committed state)。

第四步 - 推送倉庫到 GitHub

創建完倉庫后,你的瀏覽器應該跳到一個頁面,告訴你如何在本地創建一個倉庫或推送一個現有倉庫。

在我們的例子中,項目已經存在于本地,所以我們將使用 “.…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

第一個命令 git remote add origin [https://github.com/ihechikara/git-and-github-tutorial.git](https://github.com/ihechikara/git-and-github-tutorial.git),在你的本地 repo 和 Github 上的遠程 repo 之間建立連接。

你的遠程項目的 URL 應該與上面的完全不同。所以要根據你的實際 URL,確保你是按照步驟,用你自己的遠程 repo 工作。執行這個命令后,你通常不會得到回應,但要確保你有互聯網連接。

第二個命令 git branch -M main 將主分支的名字改為 "main"。默認的分支可能被創建為 "master",但 "main "是現在這個 repo 的標準名稱。這里通常沒有回應。

最后一個命令 git push -u origin main ?將你的 repo 從本地設備推送到 GitHub。你應該得到與此類似的回應:

663c584a33d45e06dd55fe3e92548375.png


git?push

為了幫助你加深對文件階段的理解,我將對文件進行修改,然后將新版本推送到 GitHub。

回顧一下,我們的文件現在處于提交狀態。讓我們對文件進行修改,并注意到這些狀態。

我將在待辦事項列表中添加一個新任務:

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

添加新任務后,運行git status命令。你應該看到這樣的情況:

d02033984a3d2b8a6f383f87e18fbf23.png


git?status

在對文件進行修改后,它移到了修改狀態--但它還沒有被分期提交,所以你還不能把它推送到 GitHub。Git 并沒有對這個當前狀態進行最終的快照,因為它只是將我們現在所做的修改與最后的快照進行比較。

現在我們要添加(stage)這個文件,然后提交(commit )并推送(push)它。這與上一節的做法相同。

我們首先使用git add .添加文件,它添加了當前目錄下的所有文件(在我們的例子中是一個文件)。然后我們通過運行git commit -m "added new task"來提交該文件,接著是git push -u origin main

這就是將修改過的文件推送到 GitHub 的三個步驟。添加(add),提交(commit),然后推送(push)。我希望你現在理解了文件階段和與之相關的命令。

如何在 Git 中使用分支(branch)

有了分支,你可以在不破壞原始副本的情況下,創建一個你想要處理的文件副本。你可以把這些修改合并到原始副本上,或者讓分支保持獨立。

在我們開始使用分支之前,我想給大家看一下我們的 repo 的可視化表示,它看起來像這樣:

cfa49cb304f991eff0d6a852a8359917.png


上圖顯示了我們的主分支和最近的兩次提交(第一次提交和添加的新任務提交)。

在這一點上,我想在列表中添加更多的任務,但我還不確定是否要把它們放在主列表中。因此,我將創建一個名為 test 的新分支,看看加入更多任務后我的列表會是什么樣子。

要創建一個新的分支,運行這個命令。git checkout -b test。我將把它分開來。

checkout告訴 Git 它應該切換到一個新的分支。b告訴 Git 創建一個新的分支。test是要創建和切換到的分支的名字。以下是你應該得到的響應:

b8f765d53287f538d53fc71e220bf472.png

git?checkout?-b

現在我們已經創建了一個新的分支,這就是我們的 repo 的樣子:

bfc8110aaa3dd607a94f0e81d3ef5171.png


git?branch

我們從上次提交的狀態中創建了新的分支。現在讓我們為這個新分支添加更多任務。

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.

我增加了四個新任務。要把新的狀態合并到主分支(main branch)。你必須先把這個分支分階段并提交,由于我們在上一節中做了兩次,我就不詳細介紹如何提交。

你應該自己試著做一下,這樣你就會明白它是如何工作的。作為提示,先添加文件,然后帶著信息提交(參考上一節的細節,告訴你如何做)。

提交完測試分支后,通過運行以下命令切換回主分支,git checkout main

你是否注意到,我們沒有添加-b?這是因為我們不是在創建一個新的分支,而是切換到一個現有的分支。你可以通過運行git branch命令來檢查你的 repo 中存在的所有分支。

現在,我們可以通過運行git merge test,將測試分支中的修改合并到主分支中。這時,你會看到測試分支中的所有改動都反映在主分支中。你還應該收到類似這樣的回復:

952644aa72da86705d6cb109f1358398.png


git?merge

下面是我們的 repo 的圖示:

81750e05ac80cf950096b72d8a896ef7.png


如果你繼續將你的 repo 推送到 GitHub,你會發現測試分支不會被推送。它只會保留在你的本地 repo 中。如果你想推送你的測試分支,可以用git checkout test切換到該分支,然后運行git push -u origin test

如何在 Git 中拉取一個倉庫

在 Git 中拉取意味著將遠程倉庫的當前狀態克隆到你的電腦/倉庫中。當你想在不同的電腦上操作你的倉庫時,或者當你在網上為一個開源項目做貢獻時,這就很方便了。

要測試這一點,不用擔心切換到新的電腦。只要運行cd .. 就可以離開當前目錄并返回上一層目錄。在我自己的例子中,我已經導航回到了我的桌面。

進入 GitHub,在你的倉庫的主頁上,你應該看到一個綠色的按鈕,上面寫著 "code"。當你點擊這個按鈕時,你應該在一個下拉菜單中看到一些選項。繼續并復制 HTTPS URL。

之后,運行git clone YOUR_HTTPS_URL。這個命令會把遠程版本庫拉到你的本地電腦上,放在一個叫git-and-git-tutorial的文件夾里。就是說:

f7aa210f6a3324bc7180c07290b11b82.png


git?clone

結語

本文介紹有助于你開始使用 Git 的基本命令。我們還開始學習如何使用 GitHub。

如果你已經跟到了這一步,那么恭喜你,你已經可以開始了。現在無論你使用什么編程語言,都可以在你的項目中使用 Git。

你應該知道,這些并不是 Git 中存在的所有命令,所以你可以隨時做更多的研究來了解更多的命令和它們的用途。這篇文章和手冊是很好的開始。這個 gist 是查看更多 Git 命令的詳細列表的好地方。

祝你編程愉快!

原文鏈接:https://www.freecodecamp.org/news/git-and-github-for-beginners/

作者:Ihechikara Vincent Abba

譯者:luojiyin

1df06e813ebe5dc843d25cb213d758d4.gif

·················?若川簡介?·················

你好,我是若川,畢業于江西高校。現在是一名前端開發“工程師”。寫有《學習源碼整體架構系列》20余篇,在知乎、掘金收獲超百萬閱讀。
從2014年起,每年都會寫一篇年度總結,已經寫了7篇,點擊查看年度總結。
同時,最近組織了源碼共讀活動,幫助3000+前端人學會看源碼。公眾號愿景:幫助5年內前端人走向前列。

cb711daf050e6a55709be8854dc98420.png

識別方二維碼加我微信、拉你進源碼共讀

今日話題

略。分享、收藏、點贊、在看我的文章就是對我最大的支持~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274872.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274872.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

matlab中的:的優先級_內容早期設計:內容優先

matlab中的:的優先級By Simone Ehrlich, Content Strategy Manager由 西蒙埃利希 ,內容策略經理 Words are cheap. Cheaper than wires; cheaper than mocks. That doesn’t mean words aren’t important, just less expensive to produce as a design asset. So …

Nunit2.5.10快速上手

1、下載Nunit:http://www.nunit.org/index.php?pdownload,下載MSI格式的安裝包; 2、安裝Nunit,根據提示安裝即可,沒有什么需要配置的,直接下一步就可以了。 3、新建類庫項目NUnitQuickStart,在…

我真的哭了,哭過后呢(-)

這些是山區的孩子們! 這是他們的教室。這個也算是!如此的師資力量自己解決吃飯問題冬天到了,一起烤烤火與泥土污水一起還好,最大的數字只是10老師抱著孩子來給我們上課了不知道山那邊會是什么呢?又一雙充滿了渴望的大眼…

腦裂問題解決方案_從解決方案到問題

腦裂問題解決方案Once upon a time a couple of years ago, one of my mentors (and favourite people in the world) repeatedly drilled the idea above into my brain. Her advice for Product people was to “fall in love with the problem, not the solution”. At the …

Vue.js 官方團隊成員霍春陽新作,深入解析 Vue.js 設計細節【文末送書】

霍春陽(Hcy),Vue.js 官方團隊成員。專注于 Web 研發領域,是 Vue.js 3 的核心貢獻者之一,Vue.js 文檔生成工具 Vuese 的作者,技術社區活躍者,曾撰寫大量頗受好評的技術博客。經過一年的準備&…

分享memcache和memcached安裝過程(轉)

Memcache是什么?源代碼地址:http://code.google.com/p/memcached/downloads/list Memcache是一個自由和開放源代碼、高性能、分配的內存對象緩存系統。用于加速動態web應用程序,減輕數據庫負載。 它可以應對任意多個連接,使用非阻…

LINQ之路 5:LINQ查詢表達式

書寫LINQ查詢時又兩種語法可供選擇:方法語法(Fluent Syntax)和查詢表達式(Query Expression)。 LINQ方法語法的本質是通過擴展方法和Lambda表達式來創建查詢。C# 3.0對于LINQ表達式還引入了聲明式的查詢表達式&#xf…

調查謀殺案以換取Obra Dinn

回顧性 (RETROSPECTIVE) I am not sure if this is intentional, but Lucas Pope has a knack for turning the mundane into something special. This was evident in his release of Papers Please. In that game, you’re a border patrolman trying to provide for your fa…

9年前的大一,我們這樣為女生過37女生節【祝節日快樂】

這是一篇水文~沒啥目的,若說要有,就是希望大家參加源碼共讀學起來。公眾號后臺顯示所有讀者朋友中大約有23%的女生。前端工程師中女生應該占比相對多些。祝關注我公眾號的女生3.7女生節快樂,大部分公司明天應該都有半天假期。可以留言大學時你…

Jquery ajax 訪問調用帶參數的服務方法!

頁面腳本中的寫法: $.ajax({url: "http://localhost:3510/WebSite/WebService/ExceptionRecoder.asmx/SetExceptionInfo",contentType: "application/json; charsetutf-8", type: "POST", dataType: "js…

requests模塊發送帶headers的Get請求和帶參數的請求

1.在PyCharm開發工具中新建try_params.py文件; 2.try_params.py文件中編寫代碼: import requests#設置請求Headers頭部header {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}#請求輸入參數p…

面試官問:跨域請求如何攜帶cookie?

大家好,我是若?川。持續組織了6個月源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列本文…

Method not found: '!!0[] System.Array.Empty()'.

一開始不知道啥情況,原來是自己把.net 框架改成4.6.1了,客戶機是4.0 so.... 把項目改低點,就ok了。轉載于:https://www.cnblogs.com/ZaraNet/p/11100207.html

記錄點滴8

第8~9周 4月7日~4月22日 第八周的時候實在太多東西要做了,我把寫周記這件事給忘了,其實也沒太大關系,寫跟不寫之間也沒有太大的鴻溝,只是寫了之后,會讓我的記憶更加清晰,讓自己明白,最近自己做了…

ux設計中的各種地圖_移動應用程序設計中的常見UX錯誤

ux設計中的各種地圖Have you ever tried a new app, only to realize you have no idea how to use it?您是否曾經嘗試過一個新的應用程序,卻發現自己不知道如何使用它? Few things can transport a person from calm and happy, to frustrated and an…

如何使用 Node 后端創建 React 應用程序:完整指南

大家好,我是若川。持續組織了6個月源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列React…

FP error code老是忘記的看這里:只給出最常用的幾個。

把常見的幾個記牢,不要在比賽時糾結。 錯誤2:輸入文件未找到。 錯誤106:數據讀入的格式錯誤,往往是讀入語句出錯。 錯誤200:被零除。 錯誤201:范圍檢查錯誤,數組越界。 錯誤202:棧溢…

快速求冪算法

1 #include <stdio.h>2 #include <math.h>3 //遞歸算法4 int recursion(int a,int b)5 {6 int tem 1;7 if(b0)return 1;8 else if(b1)return a;9 tem recursion(a,b>>1); 10 tem tem*tem; 11 if(b&1) tem tem * a; 12 r…

工業儀器儀表 界面設計_如何設計時尚的儀表板界面

工業儀器儀表 界面設計重點 (Top highlight)Welcome to the second step by step UI guide. Since you really liked my first article on “How to achieve Friendly, Lightweight UI”, I decided to make another one in a similar manner. Please note, that this is not a…

linux ifconfig命令參數及用法詳解--linux查看配置網卡命令

ifconfig 是一個用來查看、配置、啟用或禁用網絡接口的工具&#xff0c;這個工具極為常用的。可以用這個工具來臨時性的配置網卡的IP地址、掩碼、廣播地址、網關等。也可以把 它寫入一個文件中&#xff08;比如/etc/rc.d/rc.local)&#xff0c;這樣系統引導后&#xff0c;會讀取…