Git詳解及使用

Git簡介

Git?是一種分布式版本控制系統,它可以不受網絡連接的限制,加上其它眾多優點,目前已經成為程序開發人員做項目版本管理時的首選,非開發人員也可以用?Git?來做自己的文檔版本管理工具。

大概是大二的時候開始接觸和使用Git,從一開始的零接觸到現在的重度依賴,真是感嘆?Git?的強大。

Git?的api很多,但其實平時項目中90%的需求都只需要用到幾個基本的功能即可,所以本文將從?實用主義?和?深入探索?2個方面去談談如何在項目中使用?Git,一般來說,看完?實用主義?這一節就可以開始在項目中動手用。

實用主義

準備階段

進入 Git官網 下載合適你的安裝包,安裝好?Git?后,打開命令行工具,進入工作文件夾(為了便于理解我們在系統桌面上演示),創建一個新的demo文件夾。

圖片

進入 Github網站 注冊一個賬號并登錄,進入 我的博客,點擊?Clone or download?,再點擊?Use HTTPS?,復制項目地址?https://github.com/gafish/gafish.github.com.git?備用。

再回到命令行工具,一切就緒,接下來進入本文的重點。

常用操作

所謂實用主義,就是掌握了以下知識就可以玩轉?Git,輕松應對90%以上的需求。以下是實用主義型的Git命令列表,先大致看一下

  • git clone

  • git config

  • git branch

  • git checkout

  • git status

  • git add

  • git commit

  • git push

  • git pull

  • git log

  • git tag

接下來,將通過對 我的博客 倉庫進行實例操作,講解如何使用?Git?拉取代碼到提交代碼的整個流程。

git clone

從git服務器拉取代碼

git?clone?https://github.com/gafish/gafish.github.com.git

代碼下載完成后在當前文件夾中會有一個?gafish.github.com?的目錄,通過?cd gafish.github.com?命令進入目錄。

git config

配置開發者用戶名和郵箱

git?config?user.name?gafish
git?config?user.email?gafish@qqqq.com

每次代碼提交的時候都會生成一條提交記錄,其中會包含當前配置的用戶名和郵箱。

git branch

創建、重命名、查看、刪除項目分支,通過?Git?做項目開發時,一般都是在開發分支中進行,開發完成后合并分支到主干。

git?branch?daily/0.0.0

創建一個名為?daily/0.0.0?的日常開發分支,分支名只要不包括特殊字符即可。

git?branch?-m?daily/0.0.0?daily/0.0.1

如果覺得之前的分支名不合適,可以為新建的分支重命名,重命名分支名為?daily/0.0.1

git?branch

通過不帶參數的branch命令可以查看當前項目分支列表

git?branch?-d?daily/0.0.1

如果分支已經完成使命則可以通過?-d?參數將分支刪除,這里為了繼續下一步操作,暫不執行刪除操作

git checkout

切換分支

git?checkout?daily/0.0.1

切換到?daily/0.0.1?分支,后續的操作將在這個分支上進行

git status

查看文件變動狀態

通過任何你喜歡的編輯器對項目中的?README.md?文件做一些改動,保存。

git?status

通過?git status?命令可以看到文件當前狀態?Changes not staged for commit:?(改動文件未提交到暫存區

On branch daily/0.0.1
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: ? README.md
no changes added to commit (use "git add" and/or "git commit -a")

git add

添加文件變動到暫存區

git?add?README.md

通過指定文件名?README.md?可以將該文件添加到暫存區,如果想添加所有文件可用?git add .?命令,這時候可通過?git status?看到文件當前狀態?Changes to be committed:?(文件已提交到暫存區

On branch daily/0.0.1
Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified: ? README.md

git commit

提交文件變動到版本庫

git?commit?-m?'這里寫提交原因'

通過?-m?參數可直接在命令行里輸入提交描述文本

git push

將本地的代碼改動推送到服務器

git?push?origin?daily/0.0.1

origin?指代的是當前的git服務器地址,這行命令的意思是把?daily/0.0.1?分支推送到服務器,當看到命令行返回如下字符表示推送成功了。

Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 267 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
To https://github.com/gafish/gafish.github.com.git* [new branch] ? ? ?daily/0.0.1 -> daily/0.0.1

現在我們回到Github網站的項目首頁,點擊?Branch:master?下拉按鈕,就會看到剛才推送的?daily/00.1?分支了

git pull

將服務器上的最新代碼拉取到本地

git?pull?origin?daily/0.0.1

如果其它項目成員對項目做了改動并推送到服務器,我們需要將最新的改動更新到本地,這里我們來模擬一下這種情況。

進入Github網站的項目首頁,再進入?daily/0.0.1?分支,在線對?README.md?文件做一些修改并保存,然后在命令中執行以上命令,它將把剛才在線修改的部分拉取到本地,用編輯器打開?README.md?,你會發現文件已經跟線上的內容同步了。

如果線上代碼做了變動,而你本地的代碼也有變動,拉取的代碼就有可能會跟你本地的改動沖突,一般情況下?Git?會自動處理這種沖突合并,但如果改動的是同一行,那就需要手動來合并代碼,編輯文件,保存最新的改動,再通過?git add .?和?git commit -m 'xxx'?來提交合并。

git log

查看版本提交記錄

git?log

通過以上命令,我們可以查看整個項目的版本提交記錄,它里面包含了提交人日期提交原因等信息,得到的結果如下:

commit?c334730f8dba5096c54c8ac04fdc2b31ede7107a
Author:?gafish?<gafish@qqqq.com>
Date:???Wed?Jan?11?09:44:13?2017?+0800Update?README.md
commit?ba6e3d21fcb1c87a718d2a73cdd11261eb672b2a
Author:?gafish?<gafish@qqqq.com>
Date:???Wed?Jan?11?09:31:33?2017?+0800test
.....

提交記錄可能會非常多,按?J?鍵往下翻,按?K?鍵往上翻,按?Q?鍵退出查看

git tag

為項目標記里程碑

git?tag?publish/0.0.1
git?push?origin?publish/0.0.1

當我們完成某個功能需求準備發布上線時,應該將此次完整的項目代碼做個標記,并將這個標記好的版本發布到線上,這里我們以?publish/0.0.1?為標記名并發布,當看到命令行返回如下內容則表示發布成功了

Total?0?(delta?0),?reused?0?(delta?0)
To?https://github.com/gafish/gafish.github.com.git*?[new?tag]?????????publish/0.0.1?->?publish/0.0.1

.gitignore

設置哪些內容不需要推送到服務器,這是一個配置文件

touch?.gitignore

.gitignore?不是?Git?命令,而在項目中的一個文件,通過設置?.gitignore?的內容告訴?Git?哪些文件應該被忽略不需要推送到服務器,通過以上命令可以創建一個?.gitignore?文件,并在編輯器中打開文件,每一行代表一個要忽略的文件或目錄,如:

demo.html
build/

以上內容的意思是?Git?將忽略?demo.html?文件 和?build/?目錄,這些內容不會被推送到服務器上

小結

通過掌握以上這些基本命令就可以在項目中開始用起來了,如果追求實用,那關于?Git?的學習就可以到此結束了,偶爾遇到的問題也基本上通過?Google?也能找到答案,如果想深入探索?Git?的高階功能,那就繼續往下看?深入探索?部分。

深入探索

基本概念

工作區(Working Directory

就是你在電腦里能看到的目錄,比如上文中的?gafish.github.com?文件夾就是一個工作區

圖片

本地版本庫(Local Repository

工作區有一個隱藏目錄?.git,這個不算工作區,而是?Git?的版本庫。

圖片

暫存區(stage

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

遠程版本庫(Remote Repository

一般指的是?Git?服務器上所對應的倉庫,本文的示例所在的github倉庫就是一個遠程版本庫

圖片

以上概念之間的關系

工作區暫存區本地版本庫遠程版本庫之間幾個常用的?Git?操作流程如下圖所示:

圖片

分支(Branch

分支是為了將修改記錄的整個流程分開存儲,讓分開的分支不受其它分支的影響,所以在同一個數據庫里可以同時進行多個不同的修改

圖片

主分支(Master

前面提到過?master?是?Git?為我們自動創建的第一個分支,也叫主分支,其它分支開發完成后都要合并到?master

圖片

標簽(Tag

標簽是用于標記特定的點或提交的歷史,通常會用來標記發布版本的名稱或版本號(如:publish/0.0.1),雖然標簽看起來有點像分支,但打上標簽的提交是固定的,不能隨意的改動,參見上圖中的1.0?/?2.0?/?3.0

HEAD

HEAD?指向的就是當前分支的最新提交

圖片

以上概念了解的差不多,那就可以繼續往下看,下面將以具體的操作類型來講解?Git?的高階用法

操作文件

git add

添加文件到暫存區

git?add?-i

通過此命令將打開交互式子命令系統,你將看到如下子命令

***Commands***1:?status??????2:?update??????3:?revert??????4:?add?untracked5:?patch??????6:?diff??????7:?quit??????8:?help

通過輸入序列號或首字母可以選擇相應的功能,具體的功能解釋如下:

  • status:功能上和?git add -i?相似,沒什么鳥用

  • update:詳見下方?git add -u

  • revert:把已經添加到暫存區的文件從暫存區剔除,其操作方式和?update?類似

  • add untracked:可以把新增的文件添加到暫存區,其操作方式和?update?類似

  • patch:詳見下方?git add -p

  • diff:比較暫存區文件和本地版本庫的差異,其操作方式和?update?類似

  • quit:退出?git add -i?命令系統

  • help:查看幫助信息

git?add?-p

直接進入交互命令中最有用的?patch?模式

這是交互命令中最有用的模式,其操作方式和?update?類似,選擇后?Git?會顯示這些文件的當前內容與本地版本庫中的差異,然后您可以自己決定是否添加這些修改到暫存區,在命令行?Stage deletion [y,n,q,a,d,/,?]??后輸入?y,n,q,a,d,/,??其中一項選擇操作方式,具體功能解釋如下:

  • y:接受修改

  • n:忽略修改

  • q:退出當前命令

  • a:添加修改

  • d:放棄修改

  • /:通過正則表達式匹配修改內容

  • ?:查看幫助信息

git?add?-u

直接進入交互命令中的?update?模式

它會先列出工作區?修改?或?刪除?的文件列表,新增?的文件不會被顯示,在命令行?Update>>?后輸入相應的列表序列號表示選中該項,回車繼續選擇,如果已選好,直接回車回到命令主界面

git?add?--ignore-removal?.

添加工作區?修改?或?新增?的文件列表,?刪除?的文件不會被添加

git commit

把暫存區的文件提交到本地版本庫

git?commit?-m?'第一行提交原因'??-m?'第二行提交原因'

不打開編輯器,直接在命令行中輸入多行提交原因

git?commit?-am?'提交原因'

將工作區?修改?或?刪除?的文件提交到本地版本庫,?新增?的文件不會被提交

git?commit?--amend?-m?'提交原因'

修改最新一條提交記錄的提交原因

git?commit?-C?HEAD

將當前文件改動提交到?HEAD?或當前分支的歷史ID

git mv

移動或重命名文件、目錄

git?mv?a.md?b.md?-f

將?a.md?重命名為?b.md?,同時添加變動到暫存區,加?-f?參數可以強制重命名,相比用?mv a.md b.md?命令省去了?git add?操作

git rm

從工作區和暫存區移除文件

git?rm?b.md

從工作區和暫存區移除文件?b.md?,同時添加變動到暫存區,相比用?rm b.md?命令省去了?git add?操作

git?rm?src/?-r

允許從工作區和暫存區移除目錄

git status

git?status?-s

以簡短方式查看工作區和暫存區文件狀態,示例如下:

 M demo.html
?? test.html
git?status?--ignored

查看工作區和暫存區文件狀態,包括被忽略的文件

操作分支

git branch

查看、創建、刪除分支

git?branch?-a

查看本地版本庫和遠程版本庫上的分支列表

git?branch?-r

查看遠程版本庫上的分支列表,加上?-d?參數可以刪除遠程版本庫上的分支

git?branch?-D

分支未提交到本地版本庫前強制刪除分支

git?branch?-vv

查看帶有最后提交id、最近提交原因等信息的本地版本庫分支列表

圖片

git merge

將其它分支合并到當前分支

git?merge?--squash

將待合并分支上的?commit?合并成一個新的?commit?放入當前分支,適用于待合并分支的提交記錄不需要保留的情況

圖片

git?merge?--no-ff

默認情況下,Git?執行"快進式合并"(fast-farward merge),會直接將?Master?分支指向?Develop?分支,使用?--no-ff?參數后,會執行正常合并,在?Master?分支上生成一個新節點,保證版本演進更清晰。

圖片

git?merge?--no-edit

在沒有沖突的情況下合并,不想手動編輯提交原因,而是用?Git?自動生成的類似?Merge branch 'test'?的文字直接提交

git checkout

切換分支

git?checkout?-b?daily/0.0.1

創建?daily/0.0.1?分支,同時切換到這個新創建的分支

git?checkout?HEAD?demo.html

從本地版本庫的?HEAD(也可以是提交ID、分支名、Tag名) 歷史中檢出?demo.html?覆蓋當前工作區的文件,如果省略?HEAD?則是從暫存區檢出

git?checkout?--orphan?new_branch

這個命令會創建一個全新的,完全沒有歷史記錄的新分支,但當前源分支上所有的最新文件都還在,真是強迫癥患者的福音,但這個新分支必須做一次?git commit?操作后才會真正成為一個新分支。

git?checkout?-p?other_branch

這個命令主要用來比較兩個分支間的差異內容,并提供交互式的界面來選擇進一步的操作,這個命令不僅可以比較兩個分支間的差異,還可以比較單個文件的差異。

git stash

在?Git?的棧中保存當前修改或刪除的工作進度,當你在一個分支里做某項功能開發時,接到通知把昨天已經測試完沒問題的代碼發布到線上,但這時你已經在這個分支里加入了其它未提交的代碼,這個時候就可以把這些未提交的代碼存到棧里。

git?stash

將未提交的文件保存到Git棧中

git?stash?list

查看棧中保存的列表

git?stash?show?stash@{0}

顯示棧中其中一條記錄

git?stash?drop?stash@{0}

移除棧中其中一條記錄

git?stash?pop

從Git棧中檢出最新保存的一條記錄,并將它從棧中移除

git?stash?apply?stash@{0}

從Git棧中檢出其中一條記錄,但不從棧中移除

git?stash?branch?new_banch

把當前棧中最近一次記錄檢出并創建一個新分支

git?stash?clear

清空棧里的所有記錄

git?stash?create

為當前修改或刪除的文件創建一個自定義的棧并返回一個ID,此時并未真正存儲到棧里

git?stash?store?xxxxxx

將?create?方法里返回的ID放到?store?后面,此時在棧里真正創建了一個記錄,但當前修改或刪除的文件并未從工作區移除

$?git?stash?create
09eb9a97ad632d0825be1ece361936d1d0bdb5c7
$?git?stash?store?09eb9a97ad632d0825be1ece361936d1d0bdb5c7
$?git?stash?list
stash@{0}:?Created?via?"git?stash?store".

操作歷史

git log

顯示提交歷史記錄

git?log?-p

顯示帶提交差異對比的歷史記錄

git?log?demo.html

顯示?demo.html?文件的歷史記錄

git?log?--since="2?weeks?ago"

顯示2周前開始到現在的歷史記錄,其它時間可以類推

git?log?--before="2?weeks?ago"

顯示截止到2周前的歷史記錄,其它時間可以類推

git?log?-10

顯示最近10條歷史記錄

git?log?f5f630a..HEAD

顯示從提交ID?f5f630a?到?HEAD?之間的記錄,HEAD?可以為空或其它提交ID

git?log?--pretty=oneline

在一行中輸出簡短的歷史記錄

git?log?--pretty=format:"%h"

格式化輸出歷史記錄

Git?用各種?placeholder?來決定各種顯示內容,我挑幾個常用的顯示如下:

  • %H: commit hash

  • %h: 縮短的commit hash

  • %T: tree hash

  • %t: 縮短的 tree hash

  • %P: parent hashes

  • %p: 縮短的 parent hashes

  • %an: 作者名字

  • %aN: mailmap的作者名

  • %ae: 作者郵箱

  • %ad: 日期 (--date= 制定的格式)

  • %ar: 日期, 相對格式(1 day ago)

  • %cn: 提交者名字

  • %ce: 提交者 email

  • %cd: 提交日期 (--date= 制定的格式)

  • %cr: 提交日期, 相對格式(1 day ago)

  • %d: ref名稱

  • %s: commit信息標題

  • %b: commit信息內容

  • %n: 換行

git cherry-pick

合并分支的一條或幾條提交記錄到當前分支末梢

git?cherry-pick?170a305

合并提交ID?170a305?到當前分支末梢

git reset

將當前的分支重設(reset)到指定的?<commit>?或者?HEAD

git?reset?--mixed?<commit>

--mixed?是不帶參數時的默認參數,它退回到某個版本,保留文件內容,回退提交歷史

git?reset?--soft?<commit>

暫存區和工作區中的內容不作任何改變,僅僅把?HEAD?指向?<commit>

git?reset?--hard?<commit>

自從?<commit>?以來在工作區中的任何改變都被丟棄,并把?HEAD?指向?<commit>

git rebase

重新定義分支的版本庫狀態

git?rebase?branch_name

合并分支,這跟?merge?很像,但還是有本質區別,看下圖:

圖片

合并過程中可能需要先解決沖突,然后執行?git rebase --continue

git?rebase?-i?HEAD~~

打開文本編輯器,將看到從?HEAD?到?HEAD~~?的提交如下

pick 9a54fd4 添加commit的說明
pick 0d4a808 添加pull的說明
# Rebase 326fc9f..0d4a808 onto d286baa
#
# Commands:
# ?p, pick = use commit
# ?r, reword = use commit, but edit the commit message
# ?e, edit = use commit, but stop for amending
# ?s, squash = use commit, but meld into previous commit
# ?f, fixup = like "squash", but discard this commit's log message
# ?x, exec = run command (the rest of the line) using shell
#

將第一行的?pick?改成?Commands?中所列出來的命令,然后保存并退出,所對應的修改將會生效。如果移動提交記錄的順序,將改變歷史記錄中的排序。

git revert

撤銷某次操作,此次操作之前和之后的?commit?和?history?都會保留,并且把這次撤銷作為一次最新的提交

git?revert?HEAD

撤銷前一次提交操作

git?revert?HEAD?--no-edit

撤銷前一次提交操作,并以默認的?Revert "xxx"?為提交原因

git?revert?-n?HEAD

需要撤銷多次操作的時候加?-n?參數,這樣不會每次撤銷操作都提交,而是等所有撤銷都完成后一起提交

git diff

查看工作區、暫存區、本地版本庫之間的文件差異,用一張圖來解釋

圖片

git?diff?--stat

通過?--stat?參數可以查看變更統計數據

?test.md?|?1?-1?file?changed,?1?deletion(-)

git reflog

reflog?可以查看所有分支的所有操作記錄(包括commit和reset的操作、已經被刪除的commit記錄,跟?git log?的區別在于它不能查看已經刪除了的commit記錄

圖片

遠程版本庫連接

如果在GitHub項目初始化之前,文件已經存在于本地目錄中,那可以在本地初始化本地版本庫,再將本地版本庫跟遠程版本庫連接起來

git init

在本地目錄內部會生成.git文件夾

git remote

git?remote?-v

不帶參數,列出已經存在的遠程分支,加上?-v?列出詳細信息,在每一個名字后面列出其遠程url

git?remote?add?origin?https://github.com/gafish/gafish.github.com.git

添加一個新的遠程倉庫,指定一個名字,以便引用后面帶的URL

git fetch

將遠程版本庫的更新取回到本地版本庫

git?fetch?origin?daily/0.0.1

默認情況下,git fetch?取回所有分支的更新。如果只想取回特定分支的更新,可以指定分支名。

問題排查

git blame

查看文件每行代碼塊的歷史信息

git?blame?-L?1,10?demo.html

截取?demo.html?文件1-10行歷史信息

git bisect

二分查找歷史記錄,排查BUG

git?bisect?start

開始二分查找

git?bisect?bad

標記當前二分提交ID為有問題的點

git?bisect?good

標記當前二分提交ID為沒問題的點

git?bisect?reset

查到有問題的提交ID后回到原分支

更多操作

git submodule

通過 Git 子模塊可以跟蹤外部版本庫,它允許在某一版本庫中再存儲另一版本庫,并且能夠保持2個版本庫完全獨立

git?submodule?add?https://github.com/gafish/demo.git?demo

將?demo?倉庫添加為子模塊

git?submodule?update?demo

更新子模塊?demo

git gc

運行Git的垃圾回收功能,清理冗余的歷史快照

git archive

將加了tag的某個版本打包提取

git?archive?-v?--format=zip?v0.1?>?v0.1.zip

--format?表示打包的格式,如?zip-v?表示對應的tag名,后面跟的是tag名,如?v0.1

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

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

相關文章

云計算——ACA學習 云計算核心技術

作者簡介&#xff1a;一名云計算網絡運維人員、每天分享網絡與運維的技術與干貨。 座右銘&#xff1a;低頭趕路&#xff0c;敬事如儀 個人主頁&#xff1a;網絡豆的主頁????? 寫在前面 本系列將會持續更新云計算阿里云ACA的學習&#xff0c;了解云計算及網絡安全相關…

DeepSpeed加速大模型訓練

DeepSpeed是微軟推出的一個框架&#xff0c;可以對Pytorch的模型進行包裝&#xff0c;提供了加快模型的訓練速度&#xff0c;降低對GPU顯存的占用&#xff0c;以及方便進行分布式訓練等等高級特性。在這里我也對DeepSpeed進行了測試&#xff0c;看看是否能提高我的transformer模…

Maven 插件 maven-antrun-plugin 執行 ant 腳本

Ant 相信大家都不陌生&#xff0c;你可以把它理解為使用 xml 格式描述的一系列命令處理工具。它是一種基于Java的build工具。理論上來說&#xff0c;它有些類似于&#xff08;Unix&#xff09;C中的make、有些類似于基于shell命令編寫的sh腳本文件。Ant 用 Java 的類來擴展。&a…

多維時序 | MATLAB實現PSO-CNN-BiLSTM多變量時間序列預測

多維時序 | MATLAB實現PSO-CNN-BiLSTM多變量時間序列預測 目錄 多維時序 | MATLAB實現PSO-CNN-BiLSTM多變量時間序列預測基本介紹模型特點程序設計參考資料 基本介紹 本次運行測試環境MATLAB2021b&#xff0c;MATLAB實現PSO-CNN-BiLSTM多變量時間序列預測。代碼說明&#xff1a…

Java mail郵件開發 OA辦公系統

目錄 1 Java mail郵件開發 OA辦公系統 1.1 //用戶登錄 1.2 //用戶注冊 1.3 //根據郵箱賬號查詢用戶ID Java mail郵件開發 OA辦公系統package com.email.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement;<

POSTGRESQL 關于2023-08-14 數據庫自動啟動文章中使用KILL 來進行配置RELOAD的問題解釋...

開頭還是介紹一下群&#xff0c;如果感興趣Polardb ,mongodb ,MySQL ,Postgresql ,redis &#xff0c;SQL SERVER ,ORACLE,Oceanbase 等有問題&#xff0c;有需求都可以加群群內有各大數據庫行業大咖&#xff0c;CTO&#xff0c;可以解決你的問題。加群請加 liuaustin3微信號 &…

Oracle執行計劃

Oracle執行計劃 1. 什么是執行計劃Oracle explain使用3. Explain執行順序 1. 什么是執行計劃 執行計劃是一條查詢語句在Oracle中的執行過程或訪問路徑的描述。 執行計劃描述了SQL引擎為執行SQL語句進行的操作&#xff1b;分析SQL語句相關的性能問題或僅僅質疑查詢優化器的決定…

蔚來李斌賣手機:安卓系統,蘋果售價,一年一發

?作者 | Amy 編輯 | 德新 車圈大佬的玩法真讓人尋不著套路&#xff01; 蘋果的庫克和小米的雷布斯&#xff0c;甚至是FF賈老板準備許久&#xff0c;都想分一塊新能源車的蛋糕&#xff0c;蔚來李斌卻反手進軍手機界&#xff0c;從宣布造手機到手機入網僅僅隔了一年。 近期…

說幾個常見的語法糖

目錄 面試回答 知識擴展 如何解語法糖&#xff1f; 糖塊一、swith 支持 String 與枚舉 糖塊二、泛型 糖塊三、自動裝箱與拆箱 糖塊四、枚舉 糖塊五、條件編譯 糖塊六、斷言 糖塊七、數值字面量 糖塊八、for-each 糖塊九、try-with-resource 可能遇到的坑 泛型 自…

Beats:安裝及配置 Metricbeat (一)- 8.x

在我之前的文章&#xff1a; Beats&#xff1a;Beats 入門教程 &#xff08;一&#xff09;Beats&#xff1a;Beats 入門教程 &#xff08;二&#xff09; 我詳細描述了如何在 Elastic Stack 7.x 安裝及配置 Beats。在那里的安裝&#xff0c;它通常不帶有安全及 Elasticsearc…

MapReduce介紹

目錄 ?一、什么是MapReduce 二、MapReduce 的設計思想 2.1 分而治之 2.2 構建抽象模型&#xff1a;Map和Reduce 2.3 隱藏系統層細節 三、MapReduce 的框架原理 3.1 MRv1工作原理 3.1.1 MRv1架構工作原理圖 3.1.1.1 流程說明 3.1.1.1.1 作業的提交 3.1.1.1.2 作業的初始化 3…

【AI大模型】訓練Al大模型 (上篇)

大模型超越AI 前言 潔潔的個人主頁 我就問你有沒有發揮&#xff01; 知行合一&#xff0c;志存高遠。 目前所指的大模型&#xff0c;是“大規模深度學習模型”的簡稱&#xff0c;指具有大量參數和復雜結構的機器學習模型&#xff0c;可以處理大規模的數據和復雜的問題&#x…

【Java】Queue中增加刪除方法的區別

offer&#xff0c;add 區別&#xff1a; 一些隊列有大小限制&#xff0c;因此如果想在一個滿的隊列中加入一個新項&#xff0c;多出的項就會被拒絕。 這時新的 offer 方法就可以起作用了。它不是對調用 add() 方法拋出一個 unchecked 異常&#xff0c;而只是得到由 offer() 返…

題目:售貨員的難題(狀壓dp)

售貨員的難題 題目描述輸入輸出格式輸入格式&#xff1a;輸出格式&#xff1a; 輸入輸出樣例輸入樣例#1&#xff1a;輸出樣例#1&#xff1a; 思路AC代碼&#xff1a; 題目描述 某鄉有n個村莊( 1 < n < 16 )&#xff0c;有一個售貨員&#xff0c;他要到各個村莊去售貨&am…

consul限制注冊的ip

假設當前服務器的ip是&#xff1a;192.168.56.130 1、允許 所有ip 注冊(驗證可行) consul agent -server -ui -bootstrap-expect1 -data-dir/usr/local/consul -nodedevmaster -advertise192.168.56.130 -bind0.0.0.0 -client0.0.0.0 2、只允許 當前ip 注冊 consul agent -…

Leetcode33 搜索旋轉排序數組

題解&#xff1a; /*** 旋轉排序數組可分為N1 N2兩個部分&#xff0c;如&#xff1a;[4,5,6,7,1,2,3]&#xff0c;N1為[4,5,6,7]&#xff0c;N2為[1,2,3]** 必然滿足以下兩個條件&#xff1a;* 1. N1和N2都是分別遞增的&#xff1b;* 2. N1中的所有元素大于N2中的所有元素;** …

【Python機器學習】實驗12 基于神經網絡的回歸-分類實驗

文章目錄 神經網絡的回歸例1 基于神經網絡的回歸(簡單例子)1.1 導入包1.2 構造數據集&#xff08;隨機構造的&#xff09;1.3 構造訓練集和測試集1.4 構建神經網絡模型1.5 采用訓練數據來訓練神經網絡模型 實驗1 基于神經網絡的分類(鳶尾花數據集)1.1 導入包1.2 構造數據集1.3 …

Selenium瀏覽器自動化測試框架簡單介紹

selenium簡介 介紹   Selenium [1] 是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中&#xff0c;就像真正的用戶在操作一樣。支持的瀏覽器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Googl…

系統學習Linux-MongoDB

概述 mongodb是一個nosql數據庫&#xff0c;它有高性能、無模式、文檔型的特點。是nosql數據庫中功能最豐富&#xff0c;最像關系數據庫的。數據庫格式為BSON 相關概念實例&#xff1a;系統上運行的mongodb的進程&#xff0c;類似于mysql實例&#xff1b;庫&#xff1a;每個數…

用cpolar生成的公網地址,對位于本地的Cloudreve網盤進行訪問

文章目錄 1、前言2、本地網站搭建2.1 環境使用2.2 支持組件選擇2.3 網頁安裝2.4 測試和使用2.5 問題解決 3、本地網頁發布3.1 cpolar云端設置3.2 cpolar本地設置 4、公網訪問測試5、結語 1、前言 自云存儲概念興起已經有段時間了&#xff0c;各互聯網大廠也紛紛加入戰局&#…