git學習與使用(遠程倉庫、分支、工作流)

文章目錄

  • 前言
  • 簡介
  • git的工作流程
  • git的安裝
  • 配置git環境:git config --global
  • git的基本使用
    • 新建目錄
    • 初始化倉庫(repository)
    • 添加到暫存區
      • 新增/修改/刪除 文件狀態會改變
    • 提交到倉庫
    • 查看提交(commit)的歷史記錄
    • git其他命令
      • 版本回滾
      • 查看差異
      • 版本庫中刪除文件
      • .gitignore忽略文件
  • 遠程倉庫的使用
    • 注冊github賬號
    • github上創建倉庫
    • SSH配置克隆倉庫
      • SSH配置
      • 克隆倉庫
    • 拉取與推送
    • github將本地倉庫關聯到遠程倉庫:git remote add origin
  • 分支
    • 創建分支
    • 查看分支
    • 切換分支
    • 刪除分支
    • 合并分支
      • 合并沖突
      • merge和rebase的優缺點(重要)
      • 提交合并
  • GitHub工作流(多人協作,僅作參考)
  • 在IDE中使用git (工作使用更多,圖像化界面更直觀,由于IDE眾多,不作演示)
  • Git 命令大全
  • 參考目錄


前言

閱讀本文前請注意最后編輯時間,文章內容可能與目前最新的技術發展情況相去甚遠。歡迎各位評論與私信,指出錯誤或是進行交流等。


簡介

Git 是一個分布式版本控制系統,用于管理和跟蹤代碼或文件的變更。它可以記錄文件的每一次修改,幫助開發者協作、管理代碼版本、追蹤項目歷史,并在需要時恢復到之前的版本。

Git 是免費、開源的,由林納斯·托瓦茲(Linus Torvalds)在 2005 年開發,最初用于 Linux 內核開發。如今,它廣泛應用于各種軟件開發項目中,尤其是在團隊協作開發中。

除了git還有svn、cvs這樣的版本控制系統,它們的區別在于一個是分布式一個是集中式

集中式的版本控制系統,有一個單一的服務器,保存所有文件的修訂版本。協同工作的人通過客戶端連接到這臺服務器,在每次寫代碼時都需要從服務器中拉取一份下來,從而取出最新的文件或者提交更新。你本機客戶端僅保存當前的版本信息,換句話說,集中式就是把代碼放在一個服務器上集中管理,你的所有回滾等操作都需要服務器的支持。(如下圖)

在這里插入圖片描述

分布式的區別在于,每個人的電腦都是服務器,當你從主倉庫拉取一份代碼下來后,取的不是最新的文件快照,而是把代碼倉庫完整的鏡像下來到本地庫(克隆/備份),無需擔心主倉庫被刪或者找不到的情況,你可以自由在本地回滾,提交,當你想把自己的代碼提交到主倉庫時,只需要合并推送到主倉庫就可以了,同時你可以把自己的代碼新建一份倉庫分享給其它人。

git的工作流程

在這里插入圖片描述

  • 工作區是你當前正在進行開發和編輯文件的地方。它就是你的項目文件所在的目錄,包含你正在修改、編輯、編寫的所有文件。
  • 暫存區是一個臨時的存儲區域,保存你想要提交的改動。它類似于“準備提交”的區域。你可以將修改部分地加入暫存區,只將當前開發的一部分內容提交,而不是整個工作區的內容。
  • 本地倉庫是你計算機上的 Git 倉庫,保存項目的所有歷史提交記錄。當你對文件進行提交(git commit)時,文件會被從暫存區提交到本地倉庫,成為項目的永久記錄。
  • 遠程倉庫是托管在服務器上的倉庫,如 GitHub、GitLab 或 Gitee。它與本地倉庫不同,通常用于團隊協作或代碼備份。你可以將本地的提交推送到遠程倉庫,其他開發者也可以從遠程倉庫拉取代碼。

git的安裝

官方網站:https://git-scm.com/

點擊下載:
在這里插入圖片描述

找到對應電腦系統的網址:

在這里插入圖片描述
配置選擇,基本上一直下一步即可:
在這里插入圖片描述
在這里插入圖片描述

配置git環境:git config --global

初次使用git需要設置你的用戶名以及郵箱,這將作為當前機器git的標識,如果你用它來下載遠程倉庫一些需要登錄權限的倉庫會要求登錄,git默認使用配置郵箱以及用戶名登入,但會要求你手動輸入密碼

git config --global user.name "你的用戶名"
git config --global user.email "你的郵箱"

git的基本使用

新建目錄

新建一個目錄,作為要管理的庫。該目錄下可以存放要管理的文檔、項目等。以下圖為例,在某目錄下創建了一個MyProject的文件夾,
雙擊進入該文件夾后,右鍵菜單選擇Git Bash Here。
在這里插入圖片描述
輸入git stash查看狀態,顯示并沒有將該目錄初始成一個倉庫,所以git此時是對他是無法進行管理的。

在這里插入圖片描述

初始化倉庫(repository)

git初始化倉庫命令

git init

初始化的結果如下:
在這里插入圖片描述
從上圖的初始化可以看出:

  • 已經被初始化成一個空的倉庫,也說明此時可以進行git版本控制管理
  • (master) 就是我們當前初始化的倉庫是主分支,也是當前所處分支的狀態

初始化成功之后,在項目文件夾下會多了一個.git 文件夾,(如果沒有顯示,是因為該文件為隱藏文件)。
之后所有的版本都會放到.git文件夾中,第一次提交commit會將所有文件都放進來,之后每一次commit只把修改的內容保存進來。

添加到暫存區

現在E:\00\MyProject\ 目錄下創建一個git_test.py 文件
在這里插入圖片描述
通過命令查看當前管理文件的狀態

git status

查看結果顯示如下圖:
在這里插入圖片描述
從上面顯示的可以看出,此時主分支還沒有任何提交(commit),untracked file就是未被跟蹤 / 追蹤的文件,下面藍框中的git_test.py顯示為紅色 說明該文件還沒有被git管理起來,下面給的提示是可以用git add 進行追蹤管理。

git status有三種狀態:

紅色:修改、創建、刪除都是顯示紅色
綠色:git add 添加之后變成綠色
白色:git commit提交之后變成白色

添加要管理的文件,命令:

git add <file>

用命令git add將文件添加到暫存區:之后用git status查看狀態,此時git_test.py文件顯示為綠色。

在這里插入圖片描述

新增/修改/刪除 文件狀態會改變

在git_test.py 文件中添加一行文字如下,然后再使用git status查看添加文字之后的狀態。
在這里插入圖片描述
如果修改了之前已經添加或者提交的文件,它又會變成紅色,還需要使用git add 添加。
在這里插入圖片描述

如果有多個文件都被修改了,可以有多種方法將這些文件進行添加。

git add file1  file2 ... git add . 
# 這個點表示,把當前文件夾下所有的文件(會遞歸的把每一個子文件夾下的文件也同樣管理起來)都添加管理# 可以結合通配符使用
git add *.py

提交到倉庫

將暫存區所添加的改動 提交到倉庫

git commit -m "message"

-m后面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動記錄。

執行命令:`git commit -m “第一次提交到倉庫” ,此時就已經把所有的文件都提交到了倉庫中,顯示信息如下:
在這里插入圖片描述

  • 在主分支上的第一次提交(帶有注釋信息)
  • 有一個文件被修改(是一行內容插入),就是git_test.py文件
  • commit提交之后信息中git_test.py文件變成白色 此時說明提交成功

查看提交(commit)的歷史記錄

git log# 查看歷史的所有提交記錄
git reflog

顯示每次提交的提交哈希值、提交信息和時間:
在這里插入圖片描述

git其他命令

版本回滾

將提交到倉庫的代碼進行版本回滾,命令:

git reset 回退版本號

在這里插入圖片描述

  • soft:回退到某一版本,保留工作區和暫存區的所有修改內容。
  • had:回退到某一版本,丟棄工作區和暫存區的所有修改內容。
  • mixed:是git的默認參數,保留工作區的所有修改內容,丟棄暫存區的所有修改內容。

案例:使用默認參數 mixed

假設現在已經有了三次提交記錄,每次提交一個txt文件。
在這里插入圖片描述
使用git rest HEAD^ 或者使用 git rest 5af90b8 進行版本回退,表示回退到上一個版本。

通過命令 git log查看記錄發現,已經回退到上一個版本了。
在這里插入圖片描述
在這里插入圖片描述
查看工作區 發現還存在著三個文件,利用git ls-files查看暫存區發現 暫存區中只有兩個文件,表示版本已經回退成功。

查看差異

git diff [參數1] [參數2]

可以查看 工作區、暫存區、倉庫之間的差異,也可以用來查看同一文件在不同版本之間的差異。平時開發時會使用一些圖形化的界面來查看差異。
不加任何參數的情況下,默認比較工作區與暫存區之間的區別

案例:
假設有一個文件file3.txt 原本里面的內容是 “333”,現在將內容修改為"一鍵三連了嗎?"
輸入git diff命令查看差異
在這里插入圖片描述
第一行提示了,發生變更的文件。下方則是修改的內容,紅色表示刪除的內容、綠色是新增的內容。
在這里插入圖片描述

版本庫中刪除文件

方式一:在工作區中刪除文件,隨后git add所刪除的文件,最后git commit提交。

方式二:使用命令

git rm 文件名

使用該命令后,工作區、暫存區的文件會被刪除,隨后我們需要進行一次提交(git commit),這樣倉庫中的文件也會刪除完畢。

.gitignore忽略文件

這個文件的作用是可以讓我們忽略掉一些不應該被加入到版本庫中的文件,這樣可以讓我們的倉庫體積更小,更加干凈。
在這里插入圖片描述
在工作目錄下新建一個.gitignore文件,在里面寫入要忽略的文件(也可以配合通配符進行書寫),git就會忽略與其中內容匹配的文件,不對這些文件進行版本管理。

注:如果文件已經被git所管理了,再將該文件寫入到.gitignore中,git不會忽略該文件,仍然會對該文件進行管理。

遠程倉庫的使用

遠程倉庫常見的有github、gitee、gitlab,以github為例。

注冊github賬號

打開網站:https://github.com/

點擊右上角的 Sign up 按鈕
在這里插入圖片描述
輸入郵箱、密碼、用戶名、是否接收推送,隨后做一個簡單的驗證,輸入郵箱所接收到的驗證碼,隨后選擇開發團隊等 即可完成注冊。
在這里插入圖片描述

github上創建倉庫

在這里插入圖片描述
readme文件是github上的md文件,用來顯示項目簡介的。
在這里插入圖片描述
創建完成之后就是這個樣子的,什么也沒有,只有一個readme文件
在這里插入圖片描述

SSH配置克隆倉庫

SSH配置

在用戶根目錄下,進到.ssh目錄,使用命令

ssh-keygen -t rsa -b 4096
# 輸入密鑰文件名,隨后按回車。
# 如果之前未配置過, 可不輸入密鑰文件名 直接回車,會自動生成id_rsa的密鑰文件

隨后輸入私鑰密碼(可選,增加安全性)

查看該目錄下的id_ras.pub,并將其中的內容復制。回到github頁面,點擊個人頭像,點擊settings。
在這里插入圖片描述
選擇左側的SSH andGPG keys選項卡,點擊New SSH key
在這里插入圖片描述
Title可以隨便輸入
在這里插入圖片描述

克隆倉庫

在github上找到一個項目的SSH鏈接
在這里插入圖片描述
在本地電腦 某一個目錄中使用 git clone命令,隨后該項目的文件就被克隆到本地倉庫了。

git clone 克隆地址

拉取與推送

假設所克隆的倉庫發生了更新,我們需要同步更新,則要拉取所更新的內容

git pull <remote> <branch>

如果本地對所克隆的項目進行了修改,想要上傳到遠程倉庫。

  • 執行 git add 將工作區所修改的文件提交到暫存區
  • git commit -m “message” 將暫存區添加到本地庫
  • git push origin 推送到遠程倉庫

github將本地倉庫關聯到遠程倉庫:git remote add origin

假如,我們本地有一個倉庫,遠程倉庫中沒有內容,想把它推送到遠程上去。使用git remote add origin命令。

首先選找到github生成的遠程倉庫鏈接

在這里插入圖片描述
然后關聯

git remote add origin git@github.com:beiszhihao/test.git

然后使用git push推送到遠程

git push -u origin master

push:將本地倉庫與遠程倉庫合并
-u:將本地倉庫分支與遠程倉庫分支一起合并,就是說將master的分支也提交上去,這樣你就可以在遠程倉庫上看到你在本地倉庫的master中創建了多少分支,不加這個參數只將當前的master與遠程的合并,沒有分支的歷史記錄,也不能切換分支
origin:遠程倉庫的意思,如果這個倉庫是遠程的那么必須使用這個選項
master:提交本地matser分支倉庫

分支

  • 適合團隊協作和開發管理
  • 同時并進行多個功能開發,提高了開發效率
  • 各個分支再開發過程中,如果某個分支開發失敗,不會對其他分支有任何影響,失敗的分支刪除重新開始即可
    (如下圖所示,項目中有一條主分支main,所有的文件都在該分支上。main分支一般為穩定的上線運行版。現在需要開發一個新功能Feature 1,那么開發人員就在main分支的基礎上創建一條分支Feature 1,與main分支中文件完全相同。在開發完畢后,在合并到main分支上。)

在這里插入圖片描述

創建分支

要完成開發新功能,維修BUG等任務,不會直接在main分支上進行修改。會新建一個分支修改代碼

git branch 分支名
# 根據對當前選定分支創建分支

查看分支

查看所有的分支,一個項目初始化時會默認創建main(master)分支

git branch

切換分支

要在不同的分支之間完成不同的任務,或要進行合并等操作,需要切換到不同的分支進行工作。

git checkout 分支名git switch 分支名

刪除分支

一般在開發完畢、并已經合并推送后,會刪除已完成任務的分支。

git branch -D 分支名# 刪除遠程倉庫中的分支
git push origin --delete 遠程分支名

合并分支

在完成功能開發后,要將修改的內容合并到原來的基礎之上,一般是將feature分支 合并到 dev分支上。

# 把指定的分支合并到當前分支上
git merge 需要合并的分支名  

如下圖,圖中的main和dev僅作參考。一般是在dev分支上,創建feature分支進行工作。在圖中main:3的基礎上創建分支,
隨后開發dev分支。開發完畢后,合并回main分支。
在這里插入圖片描述

合并沖突

如果兩個分支修改了同一文件中的同一部分,Git就不知道要保留哪個分支中的內容,沖突也就發生了。

方式一:通過手動合并文件中的內容,相當于人為手動的決定了哪些內需要保留,沖突也就解決了。

方式二:利用rebase命令

# 格式
git rebase 分支名

已下圖為例,這是一開始的情況,dev分支是以main:3這個節點為基礎創建的分支。但之后,有人合并且提交了main:4、main:5。
而且這兩個改動還對相同文件中的相同部分進行了修改,所以和dev分支發生了沖突。那么

# 以main:3為基點開發
git pull origin main # 從遠程倉庫拉取最新main分支、拉取到了新改動main:4、main:5
# git merge main 發現發生了沖突
git switch dev # 切換到dev分支
git rebase main # 將dev變基為main

在這里插入圖片描述
**變基之后:**如下圖所示,變基之后,相當于dev分支已main:5為基礎創造了一個分支。相當于改變了創建分支時的基點,在最新版本的main:5上進行修改內容,隨后進行內容合并,最后解決沖突。
在這里插入圖片描述

merge和rebase的優缺點(重要)

在這里插入圖片描述

讓我們舉一個例子,如果我們有一個項目在master分支上有3個commit作為commit1、2、3,而feature分支commit作為commit A
和B。如果我們執行git merge操作,則commit A和B將作為commit4合并到master分支中。其中分支上commit的日志是完整的。

優勢:

  • 日志非常詳盡,可以幫助理解每次merge發生的方式和時間的完整歷史。
  • 發現錯誤并解決它們很容易。
    缺點
  • 導致笨拙的日志/歷史記錄
  • 不是很人性化

在這里插入圖片描述
Git Rebase 這種技術中,日志在merge之后被修改。
讓我們舉一個例子,如果我們有一個項目在master分支上有3個commit作為commit1、2、3。而feature分支commit作為commitA和B。如果我們執行git rebase操作,則commit A和B將作為commit4和5重新基于master分支,并且將沒有feature分支的日志。

缺點:無法跟蹤在目標分支上合并commit的時間和方式

在這里插入圖片描述

提交合并

在分支上開發時,可能在本分支中進行多次提交。與此同時,其他人也會在其他分支進行開發。
此時,如果合并代碼,不同分支不同的commit記錄會犬牙交錯在一起。
再或者由于某些原因,導致需要代碼回滾,由于commit記錄太復雜,無法準確回退到指定版本。

在這里插入圖片描述
此時,如果能夠把我們在同一分支的commit合并為一個commit,然后merge到目標分支,事情將會變得簡單起來。

使用以下命令,可以將一個分支中的多次提交合并成一次提交,最終合并到目標分支上就只會呈現一次conmmit。

git merge --squash

在這里插入圖片描述

GitHub工作流(多人協作,僅作參考)

  1. git clone 將項目克隆到本地倉庫(假設該項目中有main、dev分支,main是穩定上線版代碼,dev開發分支)
  2. git switch dev 然后根據 dev 分支新建 my_feature分支 用于開發
  3. 在my_feature上修改好代碼 添加到暫存區 并提交(可能會有多次提交)
  4. 將這個my_feature推送到遠程倉庫 git push origin my_feature
  5. 假設在開發期間 遠程倉庫中的dev分支發生了更新 我們切換到本地的dev分支 使用git pull origin dev拉取更新
  6. 為了同步dev上的更新,切換到my_feature分支 并 git rebase dev,切換基點。相當于my_feature的功能基于新的dev分支開發,如果發生沖突需手動解決。
  7. 隨后再將本地的my_feature推送到遠程倉庫上 git push -f origin my_feature
  8. 隨后就需要將遠程倉庫中的 my_feature合并到dev分支上 也就是要進行 pull request
    dev分支、以及main 是屬于項目的,并不屬于個人。合并一般由項目負責人進行,如下圖 如何在github上創建pull request

回到github的項目主頁,可以看到剛才提交的記錄(圖中內容僅為演示,可以理解為 我們提交了my_feature分支到項目)。接下來,點擊箭頭所指的Pull Requests選項。
在這里插入圖片描述
點擊箭頭所指的New pull request按鈕

在這里插入圖片描述
接下來,點擊Creat pull request即可提交成功。(本地自己提交代碼所在的分支為my_feature,共享分支為dev分支)
在這里插入圖片描述

  1. 代碼改動完畢,遠程倉庫上的my_feature分支。在合并完畢后需要刪除,可能由項目負責人進行。我們刪除本地的my_feature分支即可。
  2. 拉取最新的main、dev分支,準備進行下一次的開發。

在IDE中使用git (工作使用更多,圖像化界面更直觀,由于IDE眾多,不作演示)

可以通過一些IDE中使用git,并通過鼠標點擊等進行操作,而不是使用git bash命令行的方式。

Git 命令大全

https://blog.csdn.net/XH_jing/article/details/121900458


參考目錄

https://www.bilibili.com/video/BV1HM411377j
https://www.bilibili.com/video/BV19e4y1q7JJ
https://www.bilibili.com/video/BV1MU4y1Y7h5
https://www.bilibili.com/video/BV1FE411P7B3
https://www.bilibili.com/video/BV1ai4y1M7FN
https://www.bilibili.com/video/BV1oKXhY9E6z
https://blog.csdn.net/2401_88244350/article/details/143321853
https://blog.csdn.net/bjbz_cxy/article/details/116703787
https://blog.csdn.net/dont_curry/article/details/134832710
https://blog.csdn.net/feverfew1/article/details/135441302

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80910.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80910.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80910.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

九、日志分析和系統故障排查

目錄 1、日志分析1.1、日志介紹1.1.1、日志的功能1.1.2、日志文件的分類1.1.3、日志保存位置1.2、rsyslog服務1.2.1、發送日志到遠程日志服務器1.3、查看日志文件1.3.1、/var/log/messages文件的內容示例1.3.2、用戶登錄、退出系統的相關日志1.4、日志級別1.5、程序日志分析1.6…

C++ 非類成員變量 非類成員函數 全局變量 使用

1 使用特點 加 :: 變量使用 #include <iostream> using namespace std; int qwer 100; int asdf 900; void sitl(){std::cout <<"globe dog is sitting." << std::endl; }class Cat { public:static int num;}; int Cat::num 99;class Dog { …

【小烏龍問題】stm32供電,用過的ch340缺無法被識別

解決&#xff1a;更換正確供電&#xff08;stlink&#xff09;&#xff0c;不能用usb-ttl的僅供電&#xff0c;會干擾的&#xff01;&#xff01;&#xff01;&#xff01; 原來用stlink供電&#xff0c;今天沒拿就想著usb-ttl的電源供電&#xff0c;然后用ch340傳輸數據&…

使用 Navicat 17 for PostgreSQL 時,請問哪個版本支持 PostgreSQL 的 20150623 版本?還是每個版本都支持?

&#x1f9d1;?&#x1f4bb; PostgreSQL 用戶 使用 Navicat 17 for PostgreSQL 時&#xff0c;請問哪個版本支持 PostgreSQL 的 20150623 版本&#xff1f;還是每個版本都支持&#xff1f; &#x1f9d1;?&#x1f527; 官方技術中心 Navicat Premium 17 和 Navicat for P…

游戲引擎學習第305天:在平臺層中使用內存 Arena 的方法與思路

回顧前一天內容&#xff0c;并為今天的開發工作設定方向 我們正在直播制作完整游戲&#xff0c;當前正在實現一個精靈圖&#xff08;sprite graph&#xff09;的排序系統。排序的代碼已經寫完&#xff0c;過程并不復雜&#xff0c;雖然還沒做太多優化&#xff0c;但總體思路比…

PHP-FPM 調優配置建議

1、動態模式 pm dynamic; 最大子進程數&#xff08;根據服務器內存調整&#xff09; pm.max_children 100 //每個PHP-FPM進程大約占用30-50MB內存(ThinkPHP框架本身有一定內存開銷)安全值&#xff1a;8GB內存 / 50MB ≈ 160&#xff0c;保守設置為100 ; 啟動時創建的進程數&…

騰訊2025年校招筆試真題手撕(一)

一、題目 有n 把鑰匙&#xff0c;m 個鎖&#xff0c;每把鎖只能由一把特定的鑰匙打開&#xff0c;其他鑰匙都無法打開。一把鑰匙可能可以打開多把鎖&#xff0c;鑰匙也可以重復使用。 對于任意一把鎖來說&#xff0c;打開它的鑰匙是哪一把是等概率的。但你無法事先知道是哪一把…

【北郵通信系統建模與仿真simulink筆記】(2)2.3搭建仿真模型模塊操作運行仿真

【聲明】 本博客僅用于記錄博主學習內容、分享筆記經驗&#xff0c;不得用作其他非學術、非正規用途&#xff0c;不得商用。本聲明對本博客永久生效&#xff0c;若違反聲明所導致的一切后果&#xff0c;本博客均不負責。 目錄 【聲明】 一、搭建第一個仿真模型 二、模塊操作…

系統與賬戶安全

SYS-01&#xff1a;Windows的賬戶安全 安全配置核心原則&#xff1a; 強密碼策略&#xff1a; 通過組策略設置密碼復雜度&#xff1a; # 啟用密碼復雜度要求 secedit /export /cfg secpolicy.inf # 修改文件中的 "PasswordComplexity 1" secedit /configure /db …

COMPUTEX 2025 | 廣和通5G AI MiFi解決方案助力移動寬帶終端邁向AI新未來

隨著5G與AI不斷融合&#xff0c;穩定高速、智能的移動網絡已成為商務、旅行、戶外作業等場景的剛需。廣和通5G AI MiFi方案憑借領先技術與創新設計&#xff0c;重新定義5G移動網絡體驗。 廣和通5G AI MiFi 方案搭載高通 4nm制程QCM4490平臺&#xff0c;融合手機級超低功耗技術…

免費開放試乘體驗!蘇州金龍自動駕駛巴士即將上線陽澄數谷

近日&#xff0c;蘇州自動駕駛巴士線路——陽澄數谷示范線正式上線&#xff0c;即日起向全民免費開放試乘體驗&#xff01; 在蘇州工業園區地鐵3號線倪浜?陽澄數谷站外&#xff0c;一輛輛黑、白配色的小巴正在道路上有條不紊地行駛。與普通公交不同的是&#xff0c;小巴造型奇…

嵌入式軟件架構規范之 - 分層設計

一、規范的核心思想&#xff1a;驅動文件的“獨立性”與“復用性” 該規范的本質是通過分層隔離&#xff0c;實現驅動代碼的高復用性、低耦合性&#xff0c;確保驅動模塊僅關注“硬件操作邏輯”&#xff0c;不依賴上層業務或下層硬件接口的具體實現細節。其核心要求包括&#…

PyQt5繪圖全攻略:QPainter、QPen、QBrush與QPixmap詳解

摘要&#xff1a;掌握PyQt5繪圖核心控件&#xff0c;輕松實現窗體繪圖、文字渲染、幾何圖形繪制及圖像加載。本文附帶完整代碼示例與效果圖&#xff0c;助你快速上手GUI圖形開發。 繪圖基礎&#xff1a;為什么需要這些控件&#xff1f; 在GUI開發中&#xff0c;繪圖功能是數據…

C++學習:六個月從基礎到就業——多線程編程:std::thread基礎

C學習&#xff1a;六個月從基礎到就業——多線程編程&#xff1a;std::thread基礎 本文是我C學習之旅系列的第五十四篇技術文章&#xff0c;也是第四階段"并發與高級主題"的第一篇&#xff0c;介紹C11引入的多線程編程基礎知識。查看完整系列目錄了解更多內容。 引言…

【計算機網絡】TCP如何保障傳輸可靠性_筆記

文章目錄 一、傳輸可靠性的6方面保障二、分段機制三、超時重傳機制四、流量控制五、擁塞控制 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 源網站 按TCP/IP 4層體系&#xff0c;TCP位于傳輸層&#xff0c;為應用層提供服務 一、傳輸可靠性的6方面保障…

2025年保姆級教程:Powershell命令補全、主題美化、文件夾美化及Git擴展

文章目錄 1. 美化 Powershell 緣起2. 安裝 oh-my-posh 和 posh-git3. 安裝文件夾美化主題【可選】 1. 美化 Powershell 緣起 背景&#xff1a;用了 N 年的 Windows 系統突然覺得命令行實在太難用了&#xff0c;沒有補全功能、界面也不美觀。所以&#xff0c;我決定改變它。但是…

基于Mongodb的分布式文件存儲實現

分布式文件存儲的方案有很多&#xff0c;今天分享一個基于mongodb數據庫來實現文件的存儲&#xff0c;mongodb支持分布式部署&#xff0c;以此來實現文件的分布式存儲。 基于 MongoDB GridFS 的分布式文件存儲實現&#xff1a;從原理到實戰 一、引言 當系統存在大量的圖片、…

【Linux】Linux安裝并配置Redis

目錄 1.安裝 2.啟動服務 3.配置 3.1.綁定地址 3.2.保護模式 3.3.持久化選項 3.3.1.RDB 持久化 3.3.2.AOF 持久化 3.3.3.如何選擇 1.安裝 Redis 可以從默認的 CentOS 軟件倉庫中安裝。運行以下命令來安裝 Redis sudo dnf install redis -y 響應如下 2.啟動服務 安裝完成后&…

python-數據可視化(大數據、數據分析、可視化圖像、HTML頁面)

通過 Python 讀取 XLS 、CSV文件中的數據&#xff0c;對數據進行處理&#xff0c;然后生成包含柱狀圖、扇形圖和折線圖的 HTML 報告。這個方案使用了 pandas 處理數據&#xff0c;matplotlib 生成圖表&#xff0c;并將圖表嵌入到 HTML 頁面中。 1.XSL文件生成可視化圖像、生成h…

黑馬點評相關知識總結

黑馬點評的項目總結 主要就黑馬點評項目里面的一些比較重要部分的一次總結&#xff0c;方便以后做復習。 基于Session實現短信登錄 短信驗證碼登錄 這部分使用常規的session來存儲用戶的登錄狀態&#xff0c;其中短信發送采取邏輯形式&#xff0c;并不配置云服務驗證碼功能。…