版本控制系統

不太聪明的大鹅發表於2024-07-07

GIT 分散式版本控制系統

分散式版本控制,沒有中央伺服器的概念,每個人都有自己的版本庫,因此每個人在工作時候,不需要聯網,版本庫本地即可管理。
既然每個人都是一個完整的版本庫,同事之間如果需要協作開發,就需要找一個用於“交換檔案”的中央伺服器,這個伺服器不存在也不影響大家幹活,只是用於交換檔案內容。
GIT最強大的功能還有分支管理,遠甩SVN等軟體。

git特點

1. git是分散式的,特點是儲存本地檔案的後設資料(meta data,檔案屬性等),將本地檔案所有的的元資訊,記錄在git repo裡的.git隱藏資料夾中。

2. git的使用可以不用網路,因為本地版本控制倉庫就在你自己機器上,每一個人就是一個完成的版本庫。
只不過是最終將你的本地倉庫,作為一個分支,推送、合併到一個統一的線上程式碼倉庫主幹線即可,實現程式碼整合。

windows裝git

https://git-scm.com/download/win

linux\macos 裝git

yum install git -y

檢視版本

git --version

git身份設定

因為git是分散式版本控制系統,因為要區分出,到底是誰進行了版本管理,也就是提交的版本記錄,都是有名字,有時間的
因此用git之前要先設定git的身份設定

一般用如下命令,設定身份即可
# 給git設定配置資訊 --global 引數,身份資訊,會寫入 ~/.gitconfig

git config --global user.name "lisa"
git config --global user.email "wowo40981423@163.com"
# 開啟git命令的顏色支援
git config --global color.ui true

檢視配置檔案
cat ~/.gitconfig

檢視當前機器的git身份配置資訊
[root@web-7 ~/git-learn]#cat ~/.gitconfig
[user]
	name = wenjie
	email = wenjie01@163.com
[color]
	ui = true

列出git設定
[root@web-7 ~/git-learn]#git config --list
user.name=wenjie
user.email=wenjie01@163.com
color.ui=true

git身份設定命令集合

yum install git -y  安裝git

git --version  檢視git版本

git config --system --list 檢視系統所有linux使用者的通用配置,此命令檢查/etc/gitconfig

git config --global --list 檢視當前linux使用者的配置,檢查~/.gitconfig檔案

git config --local --list 檢視git目錄中的倉庫配置檔案,.git/config檔案

git config --global user.name "pyyu"  配置當前linux使用者全域性使用者名稱,這臺機器所有git倉庫都會用這個配置

git config --global user.email "yc_uuu@163.com"  配置當前linux使用者全域性郵箱

git config --global color.ui true 配置git語法高亮顯示

git config --list 列出git能找到的所有配置,從不同的檔案中讀取所有結果

git config user.name  列出git某一項配置

git help 獲取git幫助

man git man手冊

git help config 獲取config命令的手冊

git實踐原理

git本地倉庫,也就是一個資料夾,這個目錄下的所有內容都被git工具管理,記錄了所有檔案的後設資料。

你在這個本地倉庫中所有對檔案的修改,刪除,都會被git記錄下狀態,便於歷史記錄跟蹤,以及還原檔案狀態。

三個git使用的場景

git的使用流程套路

1. git init . 初始化本地倉庫

2.  寫程式碼,如 hello.sh

3. 透過git add . 進行本地檔案追蹤管理,檔案資訊被記錄到 暫存區

4.  git commit -m '註釋'  ,將暫存區的資料,提交到local repo  本地倉庫,進行第一個版本的記錄

1:本地已經寫好了程式碼,需要用git去管理

[root@web-7 ~/git-learn/my_shell]#ls
hello.sh
[root@web-7 ~/git-learn/my_shell]#ls -a
.  ..  hello.sh

沒有被git進行管理,使用git進行,從0 到1管理

1. 初始化生成 .git資料夾
[root@web-7 ~/git-learn/my_shell]#git init .
初始化了一個空的git倉庫 再 /root/git-learn/my_shell/.git/
Initialized empty Git repository in /root/git-learn/my_shell/.git/

這個時候,/root/git-learn/my_shell    該資料夾,就被git管理了,再這個目錄下對檔案的修改類操作,就會被git進行記錄了

命令,檢視git工作區的狀態

[root@web-7 ~/git-learn/my_shell]#git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	hello.sh
nothing added to commit but untracked files present (use "git add" to track)

2追蹤檔案屬性
[root@web-7 ~/git-learn/my_shell]#git add hello.sh
[root@web-7 ~/git-learn/my_shell]#
[root@web-7 ~/git-learn/my_shell]#
[root@web-7 ~/git-learn/my_shell]#
[root@web-7 ~/git-learn/my_shell]#git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#	new file:   hello.sh

3提交版本了,提交第一個版本
[root@web-7 ~/git-learn/my_shell]#git commit -m 'v1 第一次提交'
[master (root-commit) 67d8f28] v1 第一次提交
 1 file changed, 1 insertion(+)
 create mode 100644 hello.sh

4檢視版本記錄日誌
[root@web-7 ~/git-learn/my_sh]#git log

[root@web-7 ~/git-learn/my_sh]#git reflog    可以檢視所有的歷史記錄




從零新建git本地倉庫,編寫程式碼

mkdir /home/yuchao/

[root@cicd-99 ~]#git init  /home/yuchao/happy_linux
Initialized empty Git repository in /home/yuchao/happy_linux/.git/

此步會在當前路徑建立happy_linux資料夾,happy_linux資料夾中包含了.git的初始化資料夾,所有配置
寫程式碼然後git add 和 git commit -m "備註"

版本回退,基於commit——ID切換狀態

回到指定的提交記錄id中

# 回到指定的提交id記錄中
git reset --hard 87d1da5

# 回到上一次提交的版本id中
[root@web-7 ~/git-learn/my_website]#git reset --hard HEAD^

#回到 上 上 一次的提交版本id中 
[root@web-7 ~/git-learn/my_website]#git reset --hard HEAD^^

root@web-7 ~/git-learn/my_website]#
[root@web-7 ~/git-learn/my_website]#git reset --hard HEAD^
HEAD is now at 0ecf4f1 寫了一個hello.log

克隆遠端倉庫中的程式碼

基於git clone命令,直接下載一個遠端倉庫的程式碼

gitee碼雲,https://gitee.com/ 
https://gitee.com/jumpserver/jumpserver?_from=gitee_search

[root@web-7 /tmp]#git clone https://gitee.com/jumpserver/jumpserver.git
Cloning into 'jumpserver'...
remote: Enumerating objects: 72601, done.
remote: Counting objects: 100% (61413/61413), done.
remote: Compressing objects: 100% (16221/16221), done.
remote: Total 72601 (delta 43226), reused 60492 (delta 42372), pack-reused 11188
Receiving objects: 100% (72601/72601), 64.55 MiB | 12.85 MiB/s, done.
Resolving deltas: 100% (50717/50717), done.
[root@web-7 /tmp]#

2個辦法確認它是一個git本地倉庫,如何確認?

  1. 看有沒有.git 資料夾 2. 執行git 命令試試
# 檢視日誌,簡寫
# 記錄只顯示縮略的一行 
git log --oneline 

# 檢視最新的4個記錄
git log --oneline  -4

圖解git工作流

git命令實踐

1 從零初始化git本地倉庫

git init /my_code/

檢視本地倉庫的狀態

[root@tomcat-10 /my_code]#echo "123123123" > 打起精神來.log
[root@tomcat-10 /my_code]#
[root@tomcat-10 /my_code]#
[root@tomcat-10 /my_code]#
[root@tomcat-10 /my_code]#git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	"\346\211\223\350\265\267\347\262\276\347\245\236\346\235\245.log"
nothing added to commit but untracked files present (use "git add" to track)

加入暫存區

[root@tomcat-10 /my_code]#git add 打起精神來.log 

[root@tomcat-10 /my_code]#git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#	new file:   "\346\211\223\350\265\267\347\262\276\347\245\236\346\235\245.log"
#
[root@tomcat-10 /my_code]#

從暫存區移除檔案

本地倉庫的細節知識

場景1,本地倉庫,以及有了第一個版本

[root@tomcat-10 /my_shell]#git add hehehehe.sh 

[root@tomcat-10 /my_shell]#
[root@tomcat-10 /my_shell]#git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	new file:   hehehehe.sh
#
[root@tomcat-10 /my_shell]#
[root@tomcat-10 /my_shell]#git log
commit 3b4420b805b297239d9b3adc8c8605e593cab5d9
Author: pyyu <yc_uuu@163.com>
Date:   Fri Jul 15 18:56:09 2022 +0800

    那我走?



場景2,本次倉庫是空的,還沒有任何版本

[root@tomcat-10 /my_shell]## 2個選擇,1是提交一個版本  2是撤銷暫存區的記錄 ,看懂22222
[root@tomcat-10 /my_shell]#
[root@tomcat-10 /my_shell]#git log
fatal: bad default revision 'HEAD'

[root@tomcat-10 /my_shell]#git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#	new file:   xixixixix.sh
#

[root@tomcat-10 /my_shell]#git rm --cached xixixixix.sh 
rm 'xixixixix.sh'
[root@tomcat-10 /my_shell]#
[root@tomcat-10 /my_shell]#git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	xixixixix.sh
nothing added to commit but untracked files present (use "git add" to track)

[root@tomcat-10 /my_shell]## git add  git commit

[root@tomcat-10 /my_shell]## 再空本地倉庫中的,撤銷動作  git rm --cached file  

重新跟蹤、提交檔案

基於撤銷的動作基礎上,再次版本提交

[root@tomcat-10 /my_shell]#git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	hehehehe.sh
nothing added to commit but untracked files present (use "git add" to track)

[root@tomcat-10 /my_shell]#git add hehehehe.sh 

[root@tomcat-10 /my_shell]#git commit -m 'heheheh 那我走?'
[master 0c750ff] heheheh 那我走?
 1 file changed, 1 insertion(+)
 create mode 100644 hehehehe.sh

[root@tomcat-10 /my_shell]#git status
# On branch master
nothing to commit, working directory clean

[root@tomcat-10 /my_shell]#git log
commit 0c750ff9db54f7d7a1397c413753236f3f9dfe67
Author: pyyu <yc_uuu@163.com>
Date:   Fri Jul 15 19:03:27 2022 +0800

    heheheh 那我走?

commit 3b4420b805b297239d9b3adc8c8605e593cab5d9
Author: pyyu <yc_uuu@163.com>
Date:   Fri Jul 15 18:56:09 2022 +0800

    那我走?

git如何檢視檔案狀態

git status

基於git的檔案重新命名

如果你要在某個版本倉庫下,修改檔案的名字,如何改(修改,刪除,都會對檔案的元屬性進行修改)
git mv
git rm 
倆命名

# 需求,記住如下正確改名的玩法即可


1. 原本的資料是
[root@tomcat-10 /my_shell]#ls
hehehehe.sh  xixixixix.sh

這倆檔案都被提交為了一個版本記錄,此時暫存區是空了


2. 需求是 修改xixixixix.sh 改為 java字尾
正確玩法應該是
git mv xixixixix.sh xixixixi.java

git commit -m '於超 重新命名了 xixixi.sh 為xixix.java'

基於git的刪除檔案

記住,再git本地倉庫中,只要是被git管理的,記錄為某個版本的檔案,就不能直接
rm去刪

先記住正確刪除的玩法


git rm去刪

[root@tomcat-10 /my_shell]#git rm *.log
rm '1.log'
rm '2.log'
rm '3.log'
rm '4.log'
rm '5.log'
[root@tomcat-10 /my_shell]#
[root@tomcat-10 /my_shell]#
[root@tomcat-10 /my_shell]#
[root@tomcat-10 /my_shell]#git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	deleted:    1.log
#	deleted:    2.log
#	deleted:    3.log
#	deleted:    4.log
#	deleted:    5.log


再提交一個存檔,版本

git版本回退

# 回到上一次提交的版本id中
[root@web-7 ~/git-learn/my_website]#git reset --hard HEAD^

#回到 上 上 一次的提交版本id中 
[root@web-7 ~/git-learn/my_website]#git reset --hard HEAD^^

穿梭未來(如何再git所有的版本中,來回切換)

回到了2018年

如何再回去?回到今天2022年提交的 v1 v2 v3 找回來。

版本回退的核心點,找到commit id把

git log只能看到當前HEAD指向的最新的記錄,以及歷史的記錄


透過git reflog檢視到你對這個本地倉庫做了哪些操作

相關文章