Github學習心得

DreamW1ngs發表於2021-10-05

Github學習心得

Git簡介

Git是一個開源的分散式版本控制系統,可以有效、高速地處理從很小到非常大的專案版本管理,也是[Linus Torvalds](https://baike.baidu.com/item/Linus Torvalds/9336769)為了幫助管理Linux核心開發而開發的一個開放原始碼的版本控制軟體。

可以前往Git官網(https://git-scm.com)安裝對應系統的Git

安裝成功後進入終端(Terminal),鍵入git --version會顯示出對應的git版本資訊

Git運作的整體架構

Git本地的三個工作區域,工作空間(Working Space)、暫存區(Stage/Index)、本地倉庫(Repository/Git Repository)。若再加上遠端倉庫(Remote Directory),大致關係如上圖所示

  • Workspace:工作區,程式碼增刪修改即時更改的區域
  • Index/Stage:暫存區,用來臨時更改工作區的程式碼改動,本質上是一個檔案(可以視為多個檔案二進位制碼集合成的一個黑盒子)
  • Repository:本地倉庫,存放本地commit內容的位置(存在多個歷史記錄的版本),其中HEAD預設指向了最新放入倉庫的commit
  • Remote:遠端倉庫,遠端託管程式碼的伺服器是實現多人快速搭建專案的核心

暫存區和本地倉庫儲存內容都在倉庫目錄下的.git隱藏資料夾

配置指令

git config --list 檢視當前git配置

git本地倉庫配置預設儲存在使用者目錄\.gitconfig檔案下
git系統使用者配置預設儲存在Git安裝目錄\etc\gitconfig

可以採用以下方式進行使用者的名稱以及郵箱配置

git config [--global] user.name [使用者名稱稱]
git config [--global] user.email [使用者郵箱]

git config -l # 檢視配置
git config --[global/system] --list

每次git進行提交時都會使用該資訊

工作流程

  1. 工作空間新增修改刪除檔案
  2. 將需要進行版本管理的檔案放入暫存區
  3. 將暫存區檔案提交到git本地倉庫

Git 倉庫搭建

專案搭建

  • 建立新專案

    1. 建立專案的目錄(即對應的資料夾,最好不要包括中文)

    2. 進入目錄後,輸入git init

  • 克隆已有專案

    1. 輸入git clone [url]

    該url可以從任意遠端倉庫中獲取,如下圖為Github與Gitee中獲取倉庫連結的地方

Git檔案操作

檔案狀態

  • Untraked:未跟蹤狀態,此刻並沒有被加入到git倉庫,可以通過git add使它的狀態變為Staged
  • Unmodify:如果這個檔案在庫中留有副本,且這與本地庫中一致 則為該狀態,此時可以使用對它修改使其變為Modified,也可以使用git rm使其重新變為Untracked(如果此時add,不會使其變為Staged
  • Modified:如果這個檔案在庫中留有副本,且這與本地庫中不一致 則為該狀態,可以使用git checkout用本地庫的檔案代替工作區檔案(可以看作修改的一種撤銷操作)使其狀態變為Unmodify,也可以使用git add使其狀態變為Staged
  • Staged:暫存狀態,可以使用git commit將暫存區內容提交到本地庫中,使得檔案變為Unmodify,或者使用git reset HEAD [檔名稱]讓暫存區內容回滾(相當於從未add過了),使得該檔案變為Modify

忽略檔案

建立.gitignore檔案,使得一些檔案不被納入版本控制範圍(例如使用git add .命令時)、

檔案規則

  1. #為註釋符
  2. 可以使用 linux萬用字元
  3. !代表例外規則,指該檔案符合已指定規則,但不想被忽略(即優先順序高於指定規則)
  4. /放在最前面,表示忽略指定路徑下的檔案
  5. /放在最後面,表示忽略該目錄下的子目錄內的檔案

Git命令

工作區操作

HEAD往往指向當前所在分支中的最後一次commitHead^^^...代表過去前的第X個版本,X等同於^的數量

git checkout [檔案1] [檔案2]... # 恢復暫存區檔案到工作區
git checkout [commithash] [檔案1]... # 將指定commit的檔案恢復到工作區

git reset --hard # 同時重置HEAD,暫存區與工作區
git reset --mixed # 同時重置HEAD,暫存區(預設)
git reset --soft # 只重置HEAD

git diff # 檢視暫存區與工作區的不同
git diff --cached # 檢視暫存區與HEAD的不同
git diff HEAD # 檢視工作區與HEAD的不同
git diff [commithash] # 將工作區內容與某次commit進行比較

如果名稱\(a\)既是某個分支名,又是某個檔名,需要使用--來說明這是一個檔案路徑

暫存區管理

git add [檔案1] [檔案2] ... # 向暫存區中新增指定檔案
git add [目錄1] [目錄2] ... # 向暫存區中新增指定目錄
git add . # 向暫存區新增當前目錄下所有檔案

git rm [檔案1] [檔案2] ... # 向暫存區中新增指定檔案
git rm --force # 強制刪除
git rm --cached # 刪除暫存區中的檔案,但不對工作區改動

git mv [Source] [Destination] # 移動檔案

git status # 檢視暫存區狀態

本地庫操作

git commit -m [備註資訊] # 提交暫存區到本地倉庫
git commit -a # 可以把未進行add命令的修改一併提交到本地庫
git commit # 可以用編輯器對此次提交進行更細緻的備註

git commit 規範

<type>(<scope>): <subject>
// 空行
<body>
// 空行
<footer>

type一般包括

  • feat 新功能
  • fix 補修bug
  • docs 修改文件
  • style 格式化程式碼結構(不影響原始碼正常執行)
  • refactor 重構程式碼(更改程式碼,但邏輯結構與原有結構一致)
  • chore 構建過程或輔助工具改動

分支管理

git branch [新分支名] # 建立新分支
git branch -v # 顯示本地所有分支
git branch -r # 顯示遠端所有分支
git branch -a # 顯示本地遠端所有分支
git branch -d [分支名] # 刪除指定分支 D為強制刪除

git checkout [分支名] # 切換到指定分支
git checkout -b [新分支名] # 建立並切換到新分支

git merge [分支名] # 合併指定分支到當前分支

分支切換時,對應的工作區和暫存區也會被切換

衝突處理

可以參考部落格(https://blog.csdn.net/qq_27905183/article/details/78575247)

遠端庫操作

git clone [遠端庫地址] # 將遠端庫克隆到本地目錄下

git fetch [遠端庫地址] # 獲取遠端庫所有改動

git pull [遠端地址別名] [本地分支名] # 等同於fetch+merge

git remote -v # 顯示遠端地址別名
git remote add [遠端地址別名] [遠端地址] # 新增遠端地址

git push [遠端地址別名] [本地分支名] # 上傳本地分支到遠端倉庫
git push --force # 強制推送
git push -all [遠端地址別名] # 將本地所有分支推送到遠端倉庫

Git track

其實在從遠端分支分出來的分支都是跟蹤分支(track),當對該分支進行 push 和 pull 時,如果該分支和遠端分支同名,git會知道推送到遠端哪個分支,從哪個遠端分支同步到本地分支。每次克隆一個倉庫時,本地都會新建一個master分支來track 遠端的origin/master。如果不同名,我們需要人為指定 git push origin branch_name

Github

Gitee類似,且為中文這裡就不詳細介紹了

是一個開源且免費的遠端倉庫,可以託管程式碼,便於實現專案的團隊開發

網址:https://github.com/

建立遠端倉庫

點選New repository建立自己的遠端倉庫

設定倉庫屬性

Repository name中可以設定自己的遠端倉庫名稱,Description中新增對於倉庫的描述,Public/Private決定了倉庫內容是否被公開(Private的倉庫不可以設為靜態網頁供他人訪問)

常常還會✔上Add a README file為自己的倉庫建立一個介紹文件,讓訪問者更加迅速、便捷地瞭解到專案內容

設定繫結本機SSH金鑰

這步可以實現免密碼登入,當本機與遠端倉庫進行檔案傳輸時,遠端伺服器會用已儲存的公鑰進行檢測,如果有匹配的私鑰則可以免密傳輸

生成SSH金鑰

預設金鑰生成在本地使用者目錄\.ssh
其中私鑰為id_rsa,公鑰為id_rsa.pub

ssh-keygen -t rsa # 生成本機ssh金鑰

之後一路點選回車即可


下圖是Github與Gitee中新增SSH公鑰的皮膚(新增id_rsa.pub中內容)