主頁 > 後端開發 > git最詳細的分布式版本控制工具使用攻略

git最詳細的分布式版本控制工具使用攻略

2021-12-31 09:18:21 後端開發

引言:
跟著劉浩老師學習已經很久,期間學會了很多的東西,在寫git相關的博客之前,
我特別想感謝劉浩老師,他今天早上還在那里說昨天晚上熬夜到凌晨五點寫git的筆記,我還在想怎么可能熬夜那么晚呀,但是今天下午當他打開他的gitee網站,
上面清晰的顯示:2021/12/30日4:39提交master分支的記錄(本來想截圖的,沒來得及),我瞬間感覺羞愧(不應該懷疑他),感謝劉浩老師對我的指導,在下確實不才,學東西比較慢,但是跟著劉浩老師學的東西挺多的,

🍅程式員小王的博客:程式員小王的博客
🍅 歡迎點贊 👍 收藏 ?留言 📝
🍅 如有編輯錯誤聯系作者,如果有比較好的文章歡迎分享給我,我會取其精華去其糟粕
🍅java自學的學習路線:java自學的學習路線

  • 今日雞湯:

時間不是金錢,不是任何可以失而復得的物質,你一旦把它輕易失去,它就永遠同你無情的分別,最可怕的事情是:它離開你時,還從你身上竊去了最珍貴的財產——青春和生命,
莫等閑,白了少年頭,空悲切,

一、現存專案的問題

  • 專案安全性太低 ,電腦壞了沒有就沒了
  • 專案很難協同開發(目前是串行開發)
  • 專案無端報錯(記錄版本)
  • 專案版本混亂 (版本切換)

二、git簡介

1、Git是什么?(借鑒:廖雪峰老師)

  • Git是目前世界上最先進的分布式版本控制系統(沒有之一),-
  • Git有什么特點?簡單來說就是:高端大氣上檔次!

2、那什么是版本控制系統?

版本控制是一種記錄一個或若干檔案內容變化,以便將來查閱特定版本修訂情況的系統,

三、版本控制工具

1、集中式版本控制工具

Linus一直痛恨的CVS及SVN都是集中式的版本控制系統,而Git是分布式版本控制系統,集中式和分布式版本控制系統有什么區別呢?

  • 集中式版本控制系統,版本庫是集中存放在中央服務器的,而干活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始干活,干完活了,再把自己的活推送給中央服務器,中央服務器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完了,再放回圖書館,
  • 集中式版本控制工具缺點:

服務器單點故障,如果服務器壞了,那什么都沒了<br />容錯性差

2、git分布式版本控制工具

那分布式版本控制系統與集中式版本控制系統有何不同呢?

  • 分布式版本控制系統根本沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,這樣,你作業的時候,就不需要聯網了,因為版本庫就在你自己的電腦上,既然每個人電腦上都有一個完整的版本庫,那多個人如何協作呢?比方說你在自己電腦上改了檔案A,你的同事也在他的電腦上改了檔案A,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了,
  • 和集中式版本控制系統相比,分布式版本控制系統的安全性要高很多,因為每個人電腦里都有完整的版本庫,某一個人的電腦壞掉了不要緊,隨便從其他人那里復制一個就可以了,而集中式版本控制系統的中央服務器要是出了問題,所有人都沒法干活了,
  • 在實際使用分布式版本控制系統的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因為可能你們倆不在一個局域網內,兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機,因此,分布式版本控制系統通常也有一臺充當“中央服務器”的電腦,但這個服務器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣干活,只是交換修改不方便而已,

Git是分布式版本控制系統(Distributed Version Control System,簡稱 DVCS) ,分為兩種型別的倉庫:

本地倉庫和遠程倉庫

本地倉庫:是在開發人員自己電腦上的Git倉庫

遠程倉庫:是在遠程服務器上的Git倉庫

Clone:克隆,就是將遠程倉庫復制到本地

Push:推送,就是將本地倉庫代碼上傳到遠程倉庫

Pull:拉取,就是將遠程倉庫代碼下載到本地倉庫

3、Git歷史

  • 很多人都知道,Linus在1991年創建了開源的Linux,從此,Linux系統不斷發展,已經成為最大的服務器系統軟體了,
  • Linus雖然創建了Linux,但Linux的壯大是靠全世界熱心的志愿者參與的,這么多人在世界各地為Linux撰寫代碼,那Linux的代碼是如何管理的呢?
  • 事實是,在2002年以前,世界各地的志愿者把源代碼檔案通過diff的方式發給Linus,然后由Linus本人通過手工方式合并代碼!
  • 你也許會想,為什么Linus不把Linux代碼放到版本控制系統里呢?不是有CVS、SVN這些免費的版本控制系統嗎?因為Linus堅定地反對CVS和SVN,這些集中式的版本控制系統不但速度慢,而且必須聯網才能使用,有一些商用的版本控制系統,雖然比CVS、SVN好用,但那是付費的,和Linux的開源精神不符,
  • 不過,到了2002年,Linux系統已經發展了十年了,代碼庫之大讓Linus很難繼續通過手工方式管理了,社區的弟兄們也對這種方式表達了強烈不滿,于是Linus選擇了一個商業的版本控制系統BitKeeper,BitKeeper的東家BitMover公司出于人道主義精神,授權Linux社區免費使用這個版本控制系統,
  • 安定團結的大好局面在2005年就被打破了,原因是Linux社區牛人聚集,不免沾染了一些梁山好漢的江湖習氣,開發Samba的Andrew試圖破解BitKeeper的協議(這么干的其實也不只他一個),被BitMover公司發現了(監控作業做得不錯!),于是BitMover公司怒了,要識訓Linux社區的免費使用權,
  • Linus可以向BitMover公司道個歉,保證以后嚴格管教弟兄們,嗯,這是不可能的,實際情況是這樣的:
  • Linus花了兩周時間自己用C寫了一個分布式版本控制系統,這就是Git!一個月之內,Linux系統的原始碼已經由Git管理了!牛是怎么定義的呢?大家可以體會一下,
  • Git迅速成為最流行的分布式版本控制系統,尤其是2008年,GitHub網站上線了,它為開源專案免費提供Git存盤,無數開源專案開始遷移至GitHub,包括jQuery,PHP,Ruby等等,

歷史就是這么偶然,如果不是當年BitMover公司威脅Linux社區,可能現在我們就沒有免費而超級好用的Git了,

GitHub Gitee(碼云) [開源] Gitlib

4、Git作業流程

作業流程如下:

1.從遠程倉庫中克隆代碼到本地倉庫

2.從本地倉庫中checkout代碼然后進行代碼修改

3.在提交前先將代碼提交到暫存區

4.提交到本地倉庫,本地倉庫中保存修改的各個歷史版本

5.修改完成后,需要和團隊成員共享代碼時,將代碼push到遠程倉庫

四、Git下載與安裝

1、下載

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

我使用的安裝版本:Git-2.30.0.2-64-bit.exe

2、安裝

傻瓜式安裝,一路下一步

  • 在Windows上使用Git,可以從Git官網直接下載安裝程式,然后按默認選項安裝即可,

  • 安裝完成后,在開始選單里找到“Git”->“Git Bash”,蹦出一個類似命令列視窗的東西,就說明Git安裝成功!

86151@TJCU MINGW64 /
$ git version
git version 2.30.0.windows.2

  • 安裝完成后,還需要最后一步設定,在命令列輸入:
#1.配置當前用戶用戶名
$ git config --global user.name "wanghj"
#2.配置當前用戶郵箱
$ git config --global user.email "15120308630@163.com"
#3.查看配置資訊
git config --list  

因為Git是分布式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址,你也許會擔心,如果有人故意冒充別人怎么辦?這個不必擔心,首先我們相信大家都是善良無知的群眾,其次,真的有冒充的也是有辦法可查的,

注意git config命令的--global引數,用了這個引數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址,

查看配置

$ git config --list

五、Git使用

1、創建使用版本庫

a、創建一個目錄(內部所有檔案可以被Git管理)

b、將目錄設定為本地版本庫

進入目錄中執行命令 git init (會生成隱藏檔案夾.git–>不要操作)

c、在目錄中新建源檔案HelloWord.java

vi HelloWord.java

d、查看git狀態

  • 執行命令 git status 【當前紅色】

提示

  1. 紅色(作業區有修改 并未添加到暫存區)
  2. 綠色(作業區的修改 已經添加到暫存區 并未提交到版本庫)
    3.nothing to commit, working tree clean(作業區與版本庫一致)

注意:git磁區(作業區、暫存區、本地版本庫、遠程倉庫)

e、將檔案添加到暫存區

git add Hello.java   將指定檔案添加到暫存區 

git add .           將目錄所有檔案添加到暫存區


# 將指定檔案添加到暫存區
$ git add HelloWord.java
86151@TJCU MINGW64 /f/gitHelloWord (main)
$ git status


f、查看狀態

執行命令 git status【變為綠色】

g、將檔案提交到本地版本庫

語法:git commit -m “當前版本描述資訊”

例如:

$ git commit -m "新建了一個HelloWord類,包含主函式"

h、修改檔案后,檔案變成紅色的了

i、先添加在commit

h、去除每次add時的警告資訊

git config --global core.autocrlf false

2、版本查看及回退

a、查看版本狀態

  • git log (多行展示一個版本)
  • git log --pretty=oneline (一行展示一個版本)

b、版本回退

  • 回退n個版本

git reset --hard HEAD^ 回退上一個版本

git reset --hard HEAD^^ 回退上N個版本 幾個^^表示回退幾個版本

  • 回退指定版本
    git reset --hard commit_id
    git reset --hard d6d7s7
  • 回退未來版本
    使用命令 查看所有歷史命令 git reflog

c、暫存區和作業區操作撤銷

  • sataged翻譯:階段 restore:恢復
  • 撤銷暫存區操作:git restore --staged HelloWord.java

  • 撤銷作業區操作: git restore HelloWord.java
  • 注意:提交到版本庫后不支持撤銷,可以使用版本回退

3、Git磁區原理

作業區(Working Directory)
就是你在電腦里能看到的目錄,比如我的Git-repository檔案夾就是一個作業區:

版本庫(Repository)
作業區有一個隱藏目錄.git,這個不算作業區,而是Git的版本庫,

Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指標叫HEAD

  • 我們把檔案往Git版本庫里添加的時候,是分兩步執行的:

第一步是用git add把檔案添加進去,實際上就是把檔案修改添加到暫存區;

第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支,

因為我們創建Git版本庫時,Git自動為我們創建了唯一一個master分支,所以,現在,git commit就是往master分支上提交更改,

你可以簡單理解為,需要提交的檔案修改通通放到暫存區,然后,一次性提交暫存區的所有修改,

4、洗掉檔案

a、洗掉沒用檔案(將作業區檔案洗掉)

  • 直接洗掉
  • 使用命令洗掉 rm -f 檔案

  • 可以回退洗掉

b、確認洗掉 (將作業區洗掉的操作提交到暫存區)

git add/rm 檔案

c、確認提交到版本庫

git commit -m “提示資訊”

5、分支管理

分支就是科幻電影里面的平行宇宙,當你正在電腦前努力學習Git的時候,另一個你正在另一個平行宇宙里努力學習SVN,

如果兩個平行宇宙互不干擾,那對現在的你也沒啥影響,不過,在某個時間點,兩個平行宇宙合并了,結果,你既學會了Git又學會了SVN!

a、作用:

  • 用于管理個人代碼,在所有人確認無誤后匯總合并分支,平時在操作時分支之間互不干擾
  • master(主分支)

b、創建分支

git branch dev

c、查看分支

git branch

d、切換分支

git checkout dev

e、創建并切換分支

git checkout -b dev

f、合并分支

git checkout master 切換到最終合并的分支上

git merge dev 將merge后指定分支的修改合并到當前分支上

g、洗掉分支

git branch -d dev 【注意:不能自己刪自己】

五、遠程版本庫配置使用

1、遠程版本庫(遠程代碼托管平臺)選取碼云(Gitee)

[ https://www.zhihu.com/question/387515137 了解代碼托管平臺 ]

  • 全球最流行的代碼托管平臺:GitHub

GitHub是全球最流行的面向開源及私有軟體專案的托管平臺,有超過2600萬的用戶群體,隨著越來越多的應用程式轉移到了云上,GitHub已經成為了管理軟體開發以及發現已有代碼的首選方法,GitHub可以托管各種git庫,并提供一個web界面,與其它代碼托管平臺不同的是GitHub的“分支”結構可以很容易地將某個專案的成功經驗應用到另外與一個專案中,此外,GitHub還提供了針對企業私有云服務的GitHub企業版,

  • 開源中國旗下的代碼托管平臺:碼云

碼云是開源中國社區團隊推出的基于Git的快速的、免費的、穩定的在線代碼托管平臺,專為開發者提供的云端軟體開發協作平臺,無論是個人、團隊、或是企業,都能夠用碼云實作代碼托管、專案管理、協作開發,

  • 基于git的倉庫管理程式:GitLab

GitLab是一個利用 Ruby on Rails 開發的開源應用程式,實作一個自托管的Git專案倉庫,可通過Web界面進行訪問公開的或者私人專案安裝, 擁有與GitHub類似的功能,能夠瀏覽源代碼,管理缺陷和注釋,可以管理團隊對倉庫的訪問,它非常易于瀏覽提交過的版本并提供一個檔案歷史庫, 團隊成員可以利用內置的簡單聊天程式(Wall)進行交流,它還提供一個代碼片段收集功能可以輕松實作代碼復用,便于日后有需要的時候進行查找,

2、注冊gitee賬號

自己在官網創建一個,要想使用碼云的相關服務,需要注冊賬號(地址: https://gitee.com/signup )

3、新建倉庫

首頁–>倉庫–> + [右上角] --> 新建倉庫

填充倉庫名稱 和 簡介 --> 選擇開源

初始化倉庫[測驗隨便選] java | jetBrains | OBSD

設定模板[測驗隨便選] 全部勾選

選擇創建

  • [許可證說明 http://www.ruanyifeng.com/blog/2017/10/open-source-license-tutorial.html]

開源許可證是一種法律許可,通過它,著作權擁有人明確允許,用戶可以免費地使用、修改、共享著作權軟體,

著作權法默認禁止共享,也就是說,沒有許可證的軟體,就等同于保留著作權,雖然開源了,用戶只能看看原始碼,不能用,一用就會侵犯著作權,所以軟體開源的話,必須明確地授予用戶開源許可證,

  • 每個Git遠程倉庫都會對應一個網路地址,可以點擊克隆/下載按鈕彈出視窗并點擊復制按鈕獲得這個網路地址

4、邀請其他用戶成為倉庫成員

前面已經在碼云上創建了自己的遠程倉庫,目前倉庫成員只有自己一個人(身份為管理員),在企業實際開發中,一個專案往往是由多個人共同開發完成的,為了使多個參與者都有權限操作遠程倉庫,就需要邀請其他專案參與者成為當前倉庫的成員,

我們當前創建的Git遠程倉庫對應的地址為:https://gitee.com/wanghengjie563135/EMS.git

6、將遠程版本庫拉取到本地(在本地庫和遠程倉庫建立聯系)

a、倉庫右上角克隆/下載位置復制倉庫路徑 HTTPS 或 SSH

  • Git遠程倉庫對應的SSH地址為:

git@gitee.com:wanghengjie563135/git-test.git

b、本地新建目錄

c、在目錄中開啟bash視窗執行克隆命令

語法:git clone 倉庫路徑

例如:git clone ``[git@gitee.com](mailto:git@gitee.com)``:wanghengjie563135/EMS.git

d、執行后提示是否確認 輸入yes

e、拉取失敗【沒有權限】

提示:Please make sure you have the correct access rights and the repository exists.

[請確保您擁有正確的訪問權限并且存盤庫存在]

f、設定gitee訪問權限——生成ssh key

a、檢查是否存在.ssh目錄

位置:當前計算機用戶主目錄下 C:\Users\Administrator.ssh

b、檢查.ssh目錄中是否存在 id_rsa.pub 和 id_rsa 檔案 【計算機遠程訪問公/私鑰檔案】

存在跳過,不存在生成對應檔案

c、生成id_rsa.pub 和 id_rsa檔案命令

ssh-keygen -t rsa 后續一直enter確認

  • 查看自己的公鑰:cat ~/.ssh/id_rsa.pub

g、設定gitee訪問權限——配置公鑰

a、點擊gitee右上角個人設定–>選擇設定–>左側導航欄選擇 SSH公鑰

b、標題隨意 --> 公鑰 [打開剛才生成的C:\Users\Administrator/.ssh/id_rsa.pub檔案復制粘貼]–>輸入登錄密碼

h、再次執行命令拉取遠程版本庫

git clone ``[git@gitee.com](mailto:git@gitee.com)``:wanghengjie563135/EMS.git

7、使用遠程版本庫

a、進入到對應庫中

b、新建HelloWord檔案

c、推送至遠程版本庫

git push -u origin master [ -u:分支關聯 origin:遠程庫的名字 master:本地分支名字]

d、將遠程修改同步到本地

git pull origin master

8、將本地專案推送至遠程版本庫

a、在本地準備專案

b、在遠程倉庫中定義倉庫(空倉庫)

選擇新建倉庫–>填充倉庫名稱–>填充介紹–>選擇開源–>選擇創建

c、依次執行命令

  • git init #初始化倉庫
  • git add . #將專案的所有內容添加到暫存區
  • git commit -m "first commit" #提交到本地版本庫
  • git remote add origin ``[git@gitee.com](mailto:git@gitee.com)``:wanghengjie563135/vue.git #當前倉庫與遠程倉庫建立一個鏈接

  • git push -u origin master #推送本地庫專案至遠程倉庫

  • 推送成功

d、相關報錯總結

  • 報錯原因:們在創建倉庫的時候,都會勾選“使用Reamdme檔案初始化這個倉庫”這個操作初識了一個README檔案并配置添加了忽略檔案,當點擊創建倉庫時

它會幫我們做一次初始提交,于是我們的倉庫就有了README.m和.gitignore檔案,然后我們把本地專案關聯到這個倉庫,并把專案推送到倉庫時,我們在關聯本地與遠程時,兩端都是有內容的,但是這兩份內容并沒有聯系,當我們推送到遠程或者從遠程拉取內容時,都會有沒有被跟蹤的內容,于是你看git報的詳細錯誤中總是會讓你先拉取再推送,但是拉取總是失敗,

  • 將這些檔案洗掉后再提交

  • 相關報錯參考方案:

https://blog.csdn.net/qq_33934427/article/details/109004052

六、Git與IDEA工具集成

1、在IDEA中集成Git

File | Settings | Version Control | Git | 點擊右上角 Test 測驗git環境是否正常 (展示版本號表示正常)

2、修改idea Terminal為 Git bash

File | Settings | Tools | Terminal |

修改 Shell path : git安裝目錄/bin/bash.exe

3、git init 初始化倉庫

4、執行命令設定倉庫

git init #初始化倉庫

git add . #將專案的所有內容添加到暫存區

git commit -m “first commit” #提交到本地版本庫

git remote add origin https://gitee.com/wanghengjie563135/studnet-system.git #當前倉庫與遠程倉庫建立一個鏈接

git push -u origin master #推送本地庫專案至遠程倉庫

  • 上傳成功

5、在專案中進行后續開發 注意檔案狀態(顏色)

  • 紅色:作業區已修改并未添加到暫存區
  • 綠色:修改已經添加到暫存區暫未提交到版本庫
  • 黑色|白色:版本庫與作業區一致
  • 藍色:該類已經提交到版本庫,有修改 修改之后可以直接commit

6、完成開發后要添加到暫存區、提交本地庫 并且 提交到遠程版本庫

  • 添加暫存區 :右擊要提交檔案/檔案夾–>Git–> + Add

  • 交本地庫 :右擊要提交檔案/檔案夾–>Git–> Commit File -->輸入提示資訊–>Commit

  • 提交遠程庫 :右擊要提交檔案/檔案夾–>Git–> Push --> 選擇Push

7、從遠程版本庫中拉取專案

右擊專案–> Git --> Pull --> 選擇Pull

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-j1DE9INn-1640864886517)(image/image_67.png)]

8、代碼沖突問題

[開發前沒有先Pull拉取代碼,直接修改內容,之前遠程代碼已經進行修改]

  • a、此時提交會彈框提示 提供三個解決方案:Cancel(退出) | Merge(合并) | Rebase(退回當前狀態)
  • b、選擇Merge
    1、代碼無交集 直接pull成功
    2、代碼有交集 再次彈框 提供三個解決方案:Accept Yours(使用pull者) | Accept Theirs(使用遠程) | Merge (手動)

    3、選擇手動合并 會彈出協同合并操作視圖 整合代碼

    4、完成后選擇Apply 提示:使用修改并記錄方案 | 繼續手工修改

9、查看歷史版本 右擊要回退檔案/檔案夾–>Git–>Show History

  • 查看歷史版本

10、回退版本

a、右擊要回退檔案/檔案夾–>Git–>Show History -->選擇要回退版本 右擊–> Copy Revision Number

b、選擇當前視窗同行的 Log視窗 --> 選擇要回退版本 右擊 --> Checkout ReVision ‘xxxxxx’

11、添加到暫存區后回退

選擇commit視窗(project下)–>右擊要回退的檔案/目錄–>Rollback

12、根據版本號回退

a、選擇要回退的版本id 右擊要回退檔案/檔案夾–>Git–>Show History -->選擇要回退版本 右擊–> Copy Revision Number

b、右擊要回退檔案/檔案夾–>Git–>Reset HEAD

c、Reset Type 選擇Hard | To Commit 復制版本id

13、查看分支

點擊IDEA右下角黃色感嘆號位置

14、新建分支

點擊IDEA右下角黃色感嘆號位置–>new Branch–> 填寫分支名 -->確認

15、切換分支

點擊IDEA右下角黃色感嘆號位置–>選擇要切換的分支–>點擊右側箭頭–>選擇Checkout

16、洗掉分支/修改分支名字

點擊IDEA右下角黃色感嘆號位置 -->選擇要洗掉/改名的分支 -->Delete/Rename

17、合并分支

a、使用其他分支開發內容

b、合并前切換到主分支

c、選中要合并的分支–>點擊右側箭頭–>Merge into Current

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/398678.html

標籤:java

上一篇:【Java資料結構】哈希表詳解

下一篇:基于netty實作Dubbo RPC呼叫

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more