1 可愛的 git 勾搭上高富帥 vscode

本章導(dǎo)航:

  • 介紹 Git 與 vscode 的安裝步驟
  • 敘述 Git 的基礎(chǔ)知識

本章僅僅考慮在 Windows10 系統(tǒng)的電腦上配置軟件??蓯鄱中銡獾?Git 作為分布式版本控制的大姐頭,搭配上高富帥 vscode 將會擦出什么樣的火花?本章內(nèi)容將帶您感受其魅力。

1.1 安裝 Git 與 vscode

您需要獲取下載鏈接:

軟件名稱 下載鏈接 版本選擇
Git https://git-scm.com/download/win 64-bit Git for Windows Setup
vscode https://code.visualstudio.com/Download System Installer-64 bit

下載 Git 與 vscode 之后,需要先安裝 vscode(直接按照提示進行安裝即可)。為了方便使用,在安裝其進行到圖 1.1 的界面時請全選:

圖1.1 vscode 安裝注意

您安裝的 vscode 的界面語言默認(rèn)是英文的,如果想要使用中文界面請?zhí)砑?strong>中文語言包:

圖1.2 安裝中文語言擴展包

接著,安裝 Git,也是安裝提示安裝即可。不過,需要注意其安裝進行到圖1.3 的界面時,請選擇圖中打?qū)吹牟糠?,即使?vscode 作為 Git 的編輯器。

圖1.3 安裝 Git 注意

至此,您便完成了軟件的安裝部分。

提高工作效率的小技巧

在 vscode 中有一個不錯的設(shè)定,將您想要使用的文件夾均保存在一個工作區(qū)之中,避免繁瑣的切換目錄。該功能的實現(xiàn),很簡單,僅僅需要兩步:

  1. 打開 VSCode ==> ctrl + shift + o (打開文件夾,比如 study);
  2. 選擇 文件 ==> 將工作區(qū)另存為。選擇保存位置,并取名為 study,則會生成一個名為 study.code-workspace 的文件。
圖1.4 配置 vscode 的工作區(qū)

現(xiàn)在該工作區(qū)僅僅保存了 study 目錄的信息,雙擊 study.code-workspace 文件,vsocde 將自動打開 study 目錄。為了令工作效率更高,您可以向該工作區(qū)添加更多的目錄,這些目錄可以來自電腦的任意位置。最終,您僅僅需要打開此工作區(qū),便可以管理工作區(qū)的任意文件夾了。

1.2 學(xué)習(xí) Git 基礎(chǔ)理論

Git 是目前世界上最先進的分布式版本控制系統(tǒng)(沒有之一,??高端大氣上檔次?。?。

1.2.1 使用 Git 讓工作更輕松

場景1.1:如果您使用 Microsoft Word 寫過長篇大論,那么,您想要想刪除某些內(nèi)容,又怕將來想恢復(fù)找不回來怎么辦?對于不了解版本控制的您,也許會把當(dāng)前文件“另存為……”一個新的 Word 文件,再接著改,改到一定程度,再“另存為……”一個新文件,如此循環(huán)往復(fù),最后您的 Word 文檔變成了這樣:

圖1.5 保存不同的修改版本

過了一周、一個月甚至更長時間,想找回您的不同版本之間你具體做出了什么改動,只好一個一個文件去找,真麻煩??粗欢褋y七八糟的文件,想保留最新的一個,然后把其他的刪掉,又怕哪天會用上,還不敢刪,真郁悶。更要命的是,有些部分需要你的財務(wù)同事幫助填寫,于是你把文件 Copy 到 U 盤里給她(也可能通過 Email 發(fā)送一份給她),然后,你繼續(xù)修改 Word 文件。一天后,同事再把 Word 文件傳給你,此時,你必須想想,發(fā)給她之后到你收到她的文件期間,你作了哪些改動,得把你的改動和她的部分合并,真困難。

如果有一個軟件,不但能自動幫您記錄每次文件的改動,還可以讓同事協(xié)作編輯,這樣就不用自己管理一堆類似的文件,也不需要把文件傳來傳去。如果想查看某次改動,只需要在軟件里查找即可,豈不是很方便?這個軟件用起來就應(yīng)該像這個樣子,能記錄每次文件的改動:

版本 文件名 用戶 說明 日期
1 財務(wù)報表軟件開發(fā).docx 張三 發(fā)起項目 10/11 14:00
2 財務(wù)報表軟件開發(fā).docx 李四 編寫項目自述文檔 10/12 10:00
3 財務(wù)報表軟件開發(fā).docx 杰克 新增軟件功能1 10/13 9:00
4 財務(wù)報表軟件開發(fā).docx 張三 新增軟件功能2 10/13 16:00
5 財務(wù)報表軟件開發(fā).docx 張吳 合并版本3與4 10/14 15:00

這樣,您就結(jié)束了手動管理多個“版本”的史前時代,進入到版本控制的大時代。使用 Git 將極大的緩解您的工作壓力,提高您的工作效率。

1.2.2 配置 git 的設(shè)置

一般地,一個工具使用之前都需要做一些準(zhǔn)備工作來提高您使用該工具的效率。下面將展開說明如何在 vscode 中使用 Git。

1.2.2.1 創(chuàng)建一個 終端

雖然網(wǎng)上存在許多 Git 的客戶端,但是,客戶端它們不能將 Git 的全部功能完美的集成極大地限制了 Git 的使用。想要更好的掌握 Git,您需要學(xué)習(xí)如何使用終端。

如果您從未使用過終端,不用擔(dān)心,跟著本書進行操作,慢慢學(xué)習(xí)就行。

圖1.6 使用 vscode 創(chuàng)建終端

從圖1.6 可以看出,終端的創(chuàng)建很簡單,同時也支持使用快捷鍵 Ctrl+Shift+` 創(chuàng)建。

1.2.2.2 初識 Git

??到底 Git 是什么?是不是很懵?下面我們將揭開 Git 的神秘面紗。

Git = [底層]內(nèi)容尋址文件系統(tǒng)(content-addressable filesystem)+ [頂層]分布式 VCS 用戶界面

其中 VCS 是版本控制系統(tǒng)(Version Control System)的縮寫。簡言之,Git 就是一個簡單的鍵值對數(shù)據(jù)庫(key-value datastore)。Git 更像是一個小型的文件系統(tǒng),提供了許多以此為基礎(chǔ)構(gòu)建的超強工具,而不只是一個簡單的 VCS。

您可以將 Git 簡單的看作是由“底層(plumbing,更適合作為新命令和自定義腳本的組成部分)命令” + “高層(porcelain,更加友好的面向用戶)命令”組成的工具集(文件系統(tǒng)的一組快照(Snapshots))。本章僅僅介紹一些常用的命令,更多命令請??Git 參考[1]

1.2.2.3 初始化倉庫

在 Git 中,運行命令 git init 會生成目錄 .git,該目錄包含了 Git 存儲和操作的幾乎所有對象。在 Git 中稱目錄 .git倉庫 或者版本庫,英文名 repository。可以將倉庫簡單理解成一個可以被 Git 管理的目錄,在這個目錄里面的所有文件的每次修改、刪除等操作 都能被 Git 跟蹤。

實例:創(chuàng)建并切換到 GitStudy 文件夾下,同時使用 git init 命令初始化該文件夾:

圖1.7 初始化:git init

接著,在 GitStudy 目錄下便會出現(xiàn) .git 目錄:

圖1.8 .git 目錄一覽

如若您想備份或復(fù)制一個版本庫,只需把這個目錄拷貝至另一處即可。

實際上,Git 倉庫中保存的信息都是以文件內(nèi)容的哈希值(SHA-1 散列,校驗和)來索引的,而不是文件名。

1.2.2.4 配置 Git

因為 Git 是分布式版本控制系統(tǒng),所以,每個機器都必須自報家門:你的名字和 Email 地址:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

其中,--global 參數(shù)表示你這臺機器上所有的 Git 倉庫都會使用這個配置。如果您不想對全局進行設(shè)置,僅僅需要將 --global 參數(shù)去掉即可。

有時,您需要一個文本編輯器用來處理一些復(fù)雜的任務(wù),本書使用 vscode 作為編輯器。您可以這樣設(shè)置:

$ git config --global core.editor "code --wait"

1.2.3 管理倉庫

前面我們已經(jīng)學(xué)會如何創(chuàng)建倉庫 GitStudy,下面我們將要向該倉庫中添加“東西”。前文提到的 .git 文件默認(rèn)是隱藏的,直接使用 ls 是不能看到的,需要改為:ls -ah

圖1.9 使用終端查看 .git 目錄

現(xiàn)在我們在倉庫中編寫一個 README.md 文件,內(nèi)容如下:

Git 是一個開源的版本控制系統(tǒng)。
  1. 用命令 git add 告訴 Git,把文件修改添加到暫存區(qū)
$ git add .\README.md
  1. 用命令 git commit 告訴 Git,把暫存區(qū)內(nèi)容提交到倉庫:
$ git commit -m "wrote a README file"
圖1.10 Git 的基本操作

為什么 Git 添加文件需要 add,commit 一共兩步呢?這是因為 commit 可以一次提交很多文件,所以你可以多次 add 不同的文件,比如:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

下面考慮對文件進行修改,比如:修改 README.md 為:

Git 是一個開源的分布式版本控制系統(tǒng)。

現(xiàn)在,運行 git status 命令看看結(jié)果:

圖1.11 查看工作目錄的狀態(tài)

git status 命令可以讓我們時刻掌握倉庫當(dāng)前的狀態(tài),圖1.11 告訴我們, README.md 被修改過了,但還沒有準(zhǔn)備提交。為了比較與修改之前的不同,可以通過 git diff 查看你是如何修改的:

圖1.12 git diff

提交修改的命令和添加文件到倉庫的命令是一樣的:



圖1.13 再次提交修改并查看狀態(tài)

Git 告訴我們當(dāng)前沒有需要提交的修改,而且,工作目錄是干凈(working tree clean)的。

在 Git 中,我們用 git log 命令查看版本控制系統(tǒng)的歷史記錄:

git log

如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上 --pretty=oneline 參數(shù):

圖1.14 查看版本控制系統(tǒng)的歷史記錄

1.2.4 切換不同版本

在 Git 中,用 HEAD 表示當(dāng)前版本,也就是最新的提交。上一個版本就是 HEAD^,上上一個版本就是 HEAD^^,當(dāng)然往上 100 個版本寫 100 個 ^ 比較容易數(shù)不過來,所以寫成 HEAD~100。

這樣就可以使用 git reset 命令回退到上一個版本:

圖1.15 git reset

此時再查看 git log

圖1.16 回到過去

此時 03b671a8a41eacfa1947d5d96817e8d8ccdb0434 版本找不到了,如果要回到“未來”,可以如下操作:

圖1.17 回到未來

版本號沒必要寫全,前幾位就可以了,Git 會自動去找。切換不同版本,commit id 很重要,如果你忘記了,你可以這樣做:

圖1.18 git reflog

命令 git reflog 記錄了你的每一次命令,以便確定要回到未來的哪個版本。

1.2.5 Git 的四個工作區(qū)域

在1.2.3 與 1.2.4 中出現(xiàn)了許多專業(yè)名稱,本小結(jié)將逐一解釋。

  • 工作區(qū)GitStudy/,你工作的位置。
  • 倉庫GitStudy/.git/,用來保存項目的元數(shù)據(jù)和對象數(shù)據(jù)庫。
  • 暫存區(qū)GitStudy/.git/index,保存了下次將提交的文件列表信息。
  • 遠(yuǎn)程倉庫:保存項目的元數(shù)據(jù)和對象數(shù)據(jù)庫的地方(托管代碼的服務(wù)器);克隆倉庫時,即拷貝此部分的數(shù)據(jù)。
圖1.18 git 的結(jié)構(gòu)

Git 的倉庫里存了很多東西,其中最重要的就是稱為 stage(或者叫 index)的暫存區(qū),還有 Git 為我們自動創(chuàng)建的第一個分支 master,以及指向 master 的一個指針叫 HEAD。

1.2.6 其他常用命令

  • git checkout -- filename:可以丟棄工作區(qū)的修改
  • git checkout -b dev:創(chuàng)建并切換 dev 分支,相當(dāng)于以下兩條命令:
    • git branch dev:創(chuàng)建分支 dev
    • git checkout dev:切換到 dev 分支
  • git branch:查看當(dāng)前分支(git branch 命令會列出所有分支,當(dāng)前分支前面會標(biāo)一個 * 號。)
  • git merge:命令用于合并指定分支到當(dāng)前分支,例如 git merge dev,合并完成后,就可以放心地刪除dev 分支了:
    • git branch -d dev
  • git reset HEAD filename:把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū)
  • 命令 git rm 用于刪除一個文件。如果一個文件已經(jīng)被提交到版本庫,那么你永遠(yuǎn)不用擔(dān)心誤刪,但是要小心,你只能恢復(fù)文件到最新版本,你會丟失最近一次提交后你修改的內(nèi)容。

1.3 GitHub

  • 要關(guān)聯(lián)一個遠(yuǎn)程庫,使用命令 git remote add origin git@server-name:path/repo-name.git;
  • 關(guān)聯(lián)后,使用命令 git push -u origin master(實際上是把當(dāng)前分支 master 推送到遠(yuǎn)程 origin) 第一次推送 master 分支的所有內(nèi)容;
    此后,每次本地提交后,只要有必要,就可以使用命令 git push origin master 推送最新修改。
  • 要克隆一個倉庫,首先必須知道倉庫的地址,然后使用 git clone 命令克隆。
    Git 支持多種協(xié)議,包括 https,但通過 ssh 支持的原生 git 協(xié)議速度最快。

1.4 分支管理

假設(shè)你準(zhǔn)備開發(fā)一個新功能,但是需要兩周才能完成,第一周你寫了 50\% 的代碼,如果立刻提交,由于代碼還沒寫完,不完整的代碼庫會導(dǎo)致別人不能干活了。如果等代碼全部寫完再一次提交,又存在丟失每天進度的巨大風(fēng)險。

現(xiàn)在有了分支,就不用怕了。你創(chuàng)建了一個屬于你自己的分支,別人看不到,還繼續(xù)在原來的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到開發(fā)完畢后,再一次性合并到原來的分支上,這樣,既安全,又不影響別人工作。

1.4.1 創(chuàng)建與合并分支

你已經(jīng)知道,每次提交,Git 都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在 Git 里,這個分支叫主分支,即 master 分支。HEAD 嚴(yán)格來說不是指向提交,而是指向master,master 才是指向提交的,所以,HEAD 指向的就是當(dāng)前分支。詳細(xì)內(nèi)容見 創(chuàng)建與合并分支。

因為創(chuàng)建、合并和刪除分支非??欤?Git 鼓勵你使用分支完成某個任務(wù),合并后再刪掉分支,這和直接在 master 分支上工作效果是一樣的,但過程更安全。

1.4.2 解決沖突

如果不同分支之間存在沖突,這種情況下,Git無法執(zhí)行“快速合并”,只能試圖把各自的修改合并起來,Git 會用 <<<<<<<,=======>>>>>>> 標(biāo)記出不同分支的內(nèi)容,修改之后再提交便可以解決沖突問題,詳細(xì)內(nèi)容見:解決沖突。

一般可以使用如下命令查看各個分支的合并情況:

git log --graph --pretty=oneline --abbrev-commit

1.5 Git 服務(wù)器搭建

一個團隊,如果不想將他們的項目進行開源,但又想要使用 Git 這一強大的分布式版本控制工具,那么搭建 Git 本地服務(wù)器便是一個很不錯的選擇!為了區(qū)分,本文將用來團隊共享的機器稱之為服務(wù)端,而團隊內(nèi)部每個人的工作機器被稱為客戶端。

其他參考資料

1.6 進一步的學(xué)習(xí)資料


  1. https://git-scm.com/docs ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容