Git分散式版本控制工具

阿Q熊發表於2024-06-10

瞭解Git基本概念

git是一個免費開源的分散式版本控制系統,它使用一個叫做倉庫的資料庫來記錄檔案的變化,倉庫中的每個檔案都有一個完整的版本歷史記錄。可以看到誰在什麼時間修改了哪些檔案的哪些內容。

現在最流行的版本控制系統有兩種,一種是集中式版本控制系統:SVN、CVS等等;另一種是分散式版本控制系統:Git、Mercurial等等。

集中式版本控制系統中所有的檔案都儲存在中央伺服器上,每個人的電腦上只儲存了一個副本。
修改檔案過程:中央伺服器下載最新的版本->新增修改內容->上傳回中央伺服器
優點:是使用起來非常簡單;缺點:中央伺服器的單點故障問題,如果中央伺服器出現故障或者網路連線出現問題,那麼所有人都無法工作了,只能等待中央伺服器或者網路恢復正常。
而分散式版本控制系統就沒有這個問題,每個人的電腦上都有一個完整的版本庫,所以我們可以在本地進行修改,不需要考慮網路問題。
當需要將我們的修改內容分享給其他人的時候,只需要將倉庫互相同步一下就可以了。

安裝完成之後可以在終端中輸入Git-v命令,如果能夠看到版本資訊,那麼就說明已經安裝成功了
終端的開啟方式:右鍵->Git Bash Here

Git的使用方式主要有三種:命令列、圖形化介面、IDE外掛/擴充套件。
命令列:在終端中輸入Git命令的方式來使用Git
圖形化介面也叫GUI:透過一些專用的圖形化工具軟體來使用Git
ID外掛:在IDE或者VSCode中,透過外掛或者擴充套件的方式來使用Git

為了區分Linux作業系統中的命令,Git的所有命令都以Git開頭,後面跟著具體的命令,比如Git init就是初始化的一個倉庫
設定顏色:
Mac:iTerm2+Zsh+oh-my-zsh+Agnoster
Windows:posh-Git

使用Git Config命令:配置一下使用者名稱和郵箱

Global引數:全域性配置,對所有倉庫都有效
System引數:系統配置,對所有使用者都有效

global credential.helper store
這個命令來儲存使用者名稱和密碼,這樣就不用每次都輸入了

global --list
這個命令來檢視Git的配置資訊

新建一個版本庫來對本地的程式碼進行管理
版本庫又叫倉庫,英文名叫Repository,簡稱Repo,大家可以把倉庫理解成一個目錄,這個目錄裡面所有的檔案都可以被Git管理起來,每個檔案的修改、刪除、新增等操作,Git都能夠跟蹤到。以便任何時候都可以追蹤歷史或者還原到之前的某一個版本
建立一個倉庫非常的簡單,只需要把一個目錄變成Git可以管理的倉庫就可以了

兩種方式:一種是在自己電腦本地直接建立一個倉庫;另一種是從遠端伺服器上克隆一個已經存在的倉庫
首先需要找到一個合適的位置來建立一個空目錄:mkdir learn-git->cd learn-git->git init
ls -a檢視.git隱藏目錄
git init後面還可以指定目錄的名稱,如果指定了,就會在當前目錄下面建立一個新的目錄作為Git倉庫
就是使用git clone命令來從GitHub或者Gitty這種遠端伺服器來克隆一個Git倉庫
提前在GitHub上建好了一個遠端倉庫->git clone +倉庫地址

  版本控制器的方式:

a.集中式版本控制工具:版本庫是集中存放在中央伺服器的, team裡每個人work時從中央伺服器下載程式碼,是必須聯網才能工作,區域網或網際網路。個人修改後然後提交到中央版本庫。
舉例:SVN和CVS

b.分散式版本控制工具:沒有“中央伺服器”,每個人的電腦上都是一個完整的版本庫,這樣工作的時候,無需要聯網了,因為版本庫就在你自己的電腦上。多人協作只需要各自的修改推送給對方,就能互相看到對方的修改了。
舉例:Git

Git分散式版本控制工具

git工作流程:

Git分散式版本控制工具

1.clone(克隆):從遠端倉庫中克隆程式碼到本地倉庫

2.checkout(檢出):從本地倉庫中檢出一個倉庫分支然後進行修訂

3.add(新增):在提交前先將程式碼提交到暫存區

4.commit(提交):提交到本地倉庫。本地倉庫中儲存修改的各個歷史版本

5.ftch(抓取):從遠端庫,抓取到本地倉庫,不進行任何的合併動作,一般操作比較少。

6.pull(拉取):從遠端庫拉到本地庫,自動進行合併(merge),然後放到到工作區,相當於fetch+merge

7.push(推送):修改完成後,需要和團隊成員共享程式碼時,將程式碼推送到遠端倉庫

Git的工作區域和檔案的狀態:
Git的本地資料管理分為三個區域:工作區、暫存區、本地倉庫
工作區就是我們實際操作的目錄,在資源管理器裡面能夠看到的資料夾就是工作區
暫存區就是一箇中間區域,用於臨時存放即將提交的修改內容
本地倉庫就是Git儲存程式碼和版本資訊的主要位置,透過Git init命令建立的那個倉庫

但是如果我們每次修改檔案之後都需要進行一次提交操作的話會比較麻煩,所以Git給我們提供了一種方式,也就是可以將修改的檔案先新增到暫存區中,然後再把所有暫存區中的檔案統一執行一下提交操作

相應的,Git中的檔案也存在幾種狀態:分別是"未跟蹤","未修改","已暫存"和"已提交"
"未跟蹤"就是我們新建立的還沒有被Git管理起來的檔案
"未修改"就是我們已經被Git管理起來,但是檔案的內容沒有變化,還沒有被修改過
"已修改"就是我們已經修改了的檔案,但是還沒有新增到暫存區裡面
"已暫存"就是我們修改之後並且已經新增到暫存區內的檔案

Git分散式版本控制工具

能夠使用Git常用命令:

●ls/ll:檢視當前目錄

●cat:檢視檔案內容

●touch:建立檔案

●vi:vi編輯器(使用vi編輯器是為了方便展示效果,學員可以記事本、editPlus、notPad++等其它編輯器)

環境配置:

在 Linux 上安裝

以 Fedora 為例,如果你在使用它(或與之緊密相關的基於 RPM 的發行版,如 RHEL 或 CentOS),你可以使用 dnf:

$ sudo dnf install git-all

如果你在基於 Debian 的發行版上,如 Ubuntu,請使用 apt:

$ sudo apt install git-all

下載地址:https://git-scm.com/download

Git GUI:Git提供的圖形介面工具

Git Bash:Git提供的命令列工具

當安裝Git後首先要做的事情是設定使用者名稱稱和email地址。

1.開啟Git Bash
2.設定使用者資訊:
git config--global user.name"xxx"
git config--global user.email "xxx@itcast.cn"
檢視配置資訊
git config--global user.name
git config--global user.email
為常用指令配置別名:
1.開啟使用者目錄,建立.bashrc檔案
部分windows系統不允許使用者建立點號開頭的檔案,可以開啟gitBash,執行touch~/.bashrc
2.在.bashrc檔案中輸入如下內容:
#用於輸出git提交日誌 
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit' 
#用於輸出當前目錄所有檔案及基本資訊 
alias 11='1s -al'

3.開啟gitBash,執行source ~/.bashrc

解決GitBash亂碼問題

1.開啟GitBash執行下面命令

git config --global core.quotepath false

2. ${git_home}/etc/bash.bashrc 檔案最後加入下面兩行

export LANG="zh_CN.UTF-8" 
export LC_ALL="zh_CN.UTF-8"

熟悉Git程式碼託管服務

1.獲取本地倉庫:

1)在電腦的任意位置建立一個空目錄(例如test)作為我們的本地Git倉庫

2)進入這個目錄中,點選右鍵開啟Git bash視窗

3)執行命令git init

4)如果建立成功後可在資料夾下看到隱藏的.git目錄。

Git工作目錄下對於檔案的修改(增加、刪除、更新)會存在幾個狀態,這些修改的狀態會隨著我們執行Git的命令而發生變化。

如何使用命令來控制這些狀態之間的轉換:
1. git add(工作區->暫存區)

2. git commit(暫存區->本地倉庫)

touch xxx.txt//建立檔案
git status//檢視狀態
git add .//新增所有檔案進入暫緩區
git commit -m "標記"//提交暫存區到本地倉庫(commit)
git log [options]//檢視提交日誌
    options
    -all:顯示所有分支
    -pretty=oneline:將提交資訊顯示為一行
    -abbrev-commit:使得輸出的commitld更簡短
    -graph:以圖的形式顯示
git-log//檢視提交日誌
git reset --hard commitID//版本切換
git reflog//檢視刪除的記錄

不需要git管理的文字:建立.gitignore檔案

能夠使用idea操作git

將檔案新增到倉庫裡面
git status:檢視倉庫的狀態,比如可以檢視當前倉庫處在哪個分支,有哪些檔案,以及這些檔案當前處在怎樣的一個狀態


首先來建立檔案echo “檔名”>file1.txt
cat file1.txt檢視檔案內容

git add file1.txt
git commit -m "第一次提交"
不指定-m這個引數,會進入一個互動式的介面,預設會使用vim來編輯提交資訊
提交完成之後再來看一下倉庫的狀態

可以使用萬用字元來新增多個檔案
git add *.txt

新增所有檔案:git add .

Reset命令用於回退版本,可以退回到之前的某一個提交的狀態
Reset命令有三種用法
後面可以加上三個不同型別的引數
Soft引數:回退到某一個版本,並且保留工作區和暫存區的所有修改內容
Hard引數:回退到某一個版本,並且丟棄工作區和暫存區的所有修改內容
Mixed:介於Soft和Hard這兩個引數之間,它表示回退到某一個版本,並且只保留工作區的修改內容,而丟棄暫存區的修改內容
Mixed也是Reset命令的預設引數

git diff這命令:檢視檔案在工作區、暫存區以及版本庫之間的差異,檢視兩個版本之間的差異,或者兩個分支之間的差異
git diff預設比較的是工作區和暫存區之間的差異內容,它會顯示發生更改的檔案以及更改的詳細資訊
--hede:比較工作區和版本庫之間的差異
--cache:比較暫存區和版本庫之間的差異

Git diff後面加上兩次版本的提交ID就可以比較這兩個版本之間的差異內容

比較當前版本和上一個版本之間的差異:git diff HEAD~ HEAD

從版本庫中刪除檔案
兩種常用的方式:第一種,就是直接刪除檔案之後提交:rm file1.txt->git add file1.txt->git commit -m"delete file1.txt"
另一種方法:git rm file1.txt->git commit -m"delete file1.txt"

Git中的一個特殊檔案.gitignore這個檔案,這個檔案的作用也就是可以讓我們忽略掉一些不應該被加入到版本庫中的檔案


一般來說,我們應該遵循下面這幾個原則
1.就是一些系統自動生成的檔案
2.就是編譯生成的一些中間檔案,可執行檔案等等
3.就是系統執行過程中自動生成的一些檔案
4.帶有敏感資訊的一些配置檔案

echo "access.log" > .gitignore
vi .gitignore
*.log

如果先把other.log這個檔案新增到倉庫裡面了,再對other.log這個檔案做一些修改的話


如果先把other.log這個檔案新增到了版本庫中,然後才修改的.gitignore檔案,那麼.gitignore檔案對other.log是沒有作用的,因為它已經被新增到了版本庫中
這個時候我們就需要把other.log這個檔案先從版本庫中先刪除掉:git rm -cached other.log

.gitignore檔案的匹配規則
1.空行或者以#開頭的行會被Git忽略。一般空行用於可讀性的分隔,#一般用作註釋
2.使用標準的Blob模式匹配,例如:
星號*通配任意個字元
 問號 ?匹配單個字元
 中括號[]表示匹配列表中的單個字元,比如: [abc] 表示a/b/c
3.兩個星號 ** 表示匹配任意的中間目錄
4.中括號可以使用短中線連線,比如:[0-9]表示任意一位數字,[a-z]表示任意一位小寫字母
5.感嘆號!表示取反
github.com/github/gitignore

如何在GitHub上建立一個我們自己的倉庫,點選一下左上角的logo回到我們的主頁->綠色的建立倉庫的按鈕create repository->

那這是遠端倉庫地址的
SSH協議
git clone SSH地址

配置SSH的金鑰,首先回到我們的使用者根目錄cd,->進入到點SSH這個目錄:cd .shh->ssh-keygen -t rsa -b 4096->test回車
回到GitHub頁面->點一下右上角的頭像->settings->SSH and GPG keys->新建SSH金鑰->貼上公鑰
回到命令列終端:建立config檔案並新增
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/test

Push就是把本地倉庫的修改推送給遠端倉庫
Pull就是把遠端倉庫的修改拉取到本地倉庫

使用GitKraken來開啟倉庫,這樣就可以看到每次執行命令之後的變化

相關文章