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本地倉庫,如何確認?
- 看有沒有.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檢視到你對這個本地倉庫做了哪些操作