欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長(zhǎng)資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          深入分析Git基本工作原理

          本篇文章給大家?guī)?lái)了關(guān)于Git的相關(guān)知識(shí),其中主要介紹了git的基本工作原理,入門(mén)級(jí)教程,通過(guò)玩轉(zhuǎn)Git本地倉(cāng)庫(kù),幫助新手快速入手Git,希望對(duì)大家有幫助。

          深入分析Git基本工作原理

          推薦學(xué)習(xí):《Git學(xué)習(xí)教程》

          一、分區(qū)及工作流程

          1. Git分區(qū)

          Git的分區(qū)包括工作區(qū)、暫存區(qū)、本地倉(cāng)庫(kù)(本地版本庫(kù))、遠(yuǎn)程倉(cāng)庫(kù)(遠(yuǎn)程版本庫(kù))。

          1. 工作區(qū)
            工作區(qū)(Workspace)即本地代碼所在的目錄,同時(shí)也是存放 .git/ (本地倉(cāng)庫(kù))的目錄。

          2. 暫存區(qū)
            暫存區(qū)(Index/Stage)是工作區(qū)和本地倉(cāng)庫(kù)的緩存空間,里面記錄著即將提交給本地倉(cāng)庫(kù)(版本庫(kù))的文件修改信息,.git/ 目錄里的index文件就是暫存區(qū)。

          3. 本地倉(cāng)庫(kù)
            本地倉(cāng)庫(kù)(Repository)也稱(chēng)本地庫(kù)或版本庫(kù),存放了本地的所有版本(commit提交記錄),本地倉(cāng)庫(kù)的文件都在 .git/ 目錄中。

          4. 遠(yuǎn)程倉(cāng)庫(kù)
            遠(yuǎn)程倉(cāng)庫(kù)(Remote)在網(wǎng)絡(luò)上,GitHub、Gitee和GitLab都能創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù),和本地倉(cāng)庫(kù)一樣,遠(yuǎn)程倉(cāng)庫(kù)存放的也是不同的代碼版本,只是這些版本可以來(lái)自多個(gè)本地倉(cāng)庫(kù)。

          2. 工作流程

          ——————————————————下圖來(lái)源網(wǎng)絡(luò)———————————————————
          深入分析Git基本工作原理

          上圖生動(dòng)地描述了Git不同分區(qū)之間的操作命令。

          • 假如要實(shí)現(xiàn)上傳代碼功能,工作區(qū)使用add添加文件到暫存區(qū),暫存區(qū)再通過(guò)commit提交版本給本地倉(cāng)庫(kù),最后本地倉(cāng)庫(kù)使用push將版本推送到遠(yuǎn)程倉(cāng)庫(kù);
          • 工作區(qū)修改的文件可以通過(guò)checkout命令從本地倉(cāng)庫(kù)或暫存區(qū)恢復(fù);如果要將工作區(qū)某分支的代碼更新為遠(yuǎn)程倉(cāng)庫(kù)最新版本,可以使用pull命令;
          • 對(duì)遠(yuǎn)程倉(cāng)庫(kù)使用clone可以將遠(yuǎn)程倉(cāng)庫(kù)主分支拷貝到本地倉(cāng)庫(kù),fetch命令與pull類(lèi)似,只是pull會(huì)合并本地代碼,而fetch只會(huì)把最新版本抓取到本地版本庫(kù),不考慮本地倉(cāng)庫(kù)是否有新增。

          二、本地倉(cāng)庫(kù)初始化

          1. git init

          本地倉(cāng)庫(kù)(版本庫(kù))需要使用 git init 命令來(lái)創(chuàng)建(也可以直接從遠(yuǎn)程倉(cāng)庫(kù)克隆,后面介紹)。
          進(jìn)入工作區(qū)(代碼存放目錄),輸入git init,git會(huì)在工作區(qū)新建一個(gè).git/目錄:
          深入分析Git基本工作原理

          2. .git/目錄簡(jiǎn)單介紹

          深入分析Git基本工作原理
          在一個(gè)新建的.git/目錄中,有3個(gè)文本文件:

          • config存放了本地倉(cāng)庫(kù)的配置信息;
          • description用來(lái)描述倉(cāng)庫(kù)的名字;
          • HEAD為本地倉(cāng)庫(kù)當(dāng)前分支,默認(rèn)為master,指向了refs/heads/master,可見(jiàn)refs/目錄主要存放一些分支信息;

          后面在對(duì)本地倉(cāng)庫(kù)進(jìn)行操作時(shí),還會(huì)產(chǎn)生其他文件,比如logs/——保存提交的記錄,index——暫存區(qū)。

          【注意】 千萬(wàn)不要手動(dòng)更改.git/里的文件,可能會(huì)破壞本地倉(cāng)庫(kù)的結(jié)構(gòu),造成不良后果。

          三、用戶(hù)信息配置

          1. 用戶(hù)名和郵箱配置介紹

          初始化本地倉(cāng)庫(kù)后的第一件事情就是給本地倉(cāng)庫(kù)添加用戶(hù)配置信息,包括用戶(hù)名和郵箱地址,這里的用戶(hù)名和郵箱地址和托管平臺(tái)(如gitee)的賬戶(hù)沒(méi)有直接關(guān)系,它唯一的作用就是讓別的用戶(hù)或托管平臺(tái)知道代碼的上傳者信息,郵箱亂填也不會(huì)導(dǎo)致不能上傳代碼。

          比如下面我用“張三”和“李四”上傳了代碼,郵箱地址不是真實(shí)存在的,同樣可以上傳成功:(commit信息出了點(diǎn)意外)
          深入分析Git基本工作原理
          李四的郵箱地址顯然不是真實(shí)的。
          深入分析Git基本工作原理
          由于“張三”和“李四”的郵箱沒(méi)有在gitee綁定賬戶(hù),所以點(diǎn)擊它們頭像時(shí),不會(huì)顯示用戶(hù)信息,如果用戶(hù)配置里填寫(xiě)了gitee賬號(hào)的提交郵箱,則可以在gitee上查看上傳者賬號(hào)信息。
          深入分析Git基本工作原理
          gitee用戶(hù)的提交郵箱,可以在gitee->個(gè)人主頁(yè)->個(gè)人設(shè)置->郵箱管理中設(shè)置和查看:
          深入分析Git基本工作原理

          2.使用git config配置用戶(hù)信息

          講了那么多用戶(hù)名和郵箱的注意事項(xiàng),其實(shí)用戶(hù)信息配置十分簡(jiǎn)單:

          git config --global user.name "your name"git config --global user.email "your email"

          user.name 后接用戶(hù)名,任意填寫(xiě)。
          user.email 后接用戶(hù)郵箱,任意填寫(xiě)。
          –global 為配置全局屬性
          深入分析Git基本工作原理
          提交代碼到本地倉(cāng)庫(kù)時(shí),git會(huì)先檢索本地倉(cāng)庫(kù)的.git/config文件,如果沒(méi)有user的信息,則使用全局的配置文件(符合就近原則)。

          全局配置文件存放位置為 系統(tǒng)用戶(hù)目錄/用戶(hù)名/.gitconfig,里面只有user屬性。
          深入分析Git基本工作原理

          不加–global時(shí),僅設(shè)置本地倉(cāng)庫(kù)的用戶(hù)配置,本地倉(cāng)庫(kù)用戶(hù)配置信息存放位置:.git/config
          深入分析Git基本工作原理
          上圖我僅設(shè)置了本地配置的用戶(hù)名,此時(shí)如果提交修改到本地倉(cāng)庫(kù),提交記錄(下圖)中用戶(hù)名使用本地配置,因?yàn)楸镜貨](méi)有配置用戶(hù)郵箱,所以郵箱依然使用全局配置中指定的郵箱。
          深入分析Git基本工作原理

          四、管理暫存區(qū)文件

          配置完用戶(hù)信息后,我們就可以開(kāi)始考慮提交代碼了,但是有時(shí)候,我們并不想把整個(gè)工作區(qū)的文件都提交到本地倉(cāng)庫(kù)(版本庫(kù))。暫存區(qū)(index/stage)的存在,替我們解決了這個(gè)困擾,我們可以先把代碼文件添加到暫存區(qū),如果覺(jué)得還需要改動(dòng),可以將文件從暫存區(qū)刪除,直到我們覺(jué)得文件選擇得差不多了,再進(jìn)行下一步(提交到本地倉(cāng)庫(kù))。

          1. Git文件狀態(tài)

          在管理暫存區(qū)之前,我們還需要了解工作區(qū)文件的幾種狀態(tài):

          • Untracked 未跟蹤,工作區(qū)中沒(méi)有加入過(guò)暫存區(qū)的文件,不參與版本控制;
          • Unmodified 未修改,加入版本控制,但和版本庫(kù)中文件快照相同;
          • Modified 已修改,加入版本控制,而且和上次加入版本庫(kù)時(shí)的快照不同;
          • Staged 已暫存,下一步可以提交到本地倉(cāng)庫(kù)(版本庫(kù))。

          ——————————————————下圖來(lái)源網(wǎng)絡(luò)———————————————————
          深入分析Git基本工作原理
          git status命令可以用來(lái)查看工作區(qū)文件當(dāng)前的狀態(tài):

          #查看特定文件的狀態(tài) git status [filename]#查看所有文件狀態(tài) git status  #精簡(jiǎn)的方式顯示文件狀態(tài) git status -s

          2. 添加文件到暫存區(qū)

          先查看工作區(qū)所有文件的狀態(tài),發(fā)現(xiàn)還沒(méi)有任何文件:
          深入分析Git基本工作原理

          現(xiàn)在創(chuàng)建3個(gè)文件,再次使用git status(-s表示精簡(jiǎn)顯示),3個(gè)文件的狀態(tài)為Untracked,??為精簡(jiǎn)顯示下Untracked的標(biāo)志,意思是新創(chuàng)的文件沒(méi)有被本地倉(cāng)庫(kù)(版本庫(kù))跟蹤。
          深入分析Git基本工作原理
          git add [文件…] 可以添加一個(gè)或多個(gè)文件到暫存區(qū),使文件狀態(tài)變?yōu)镾taged,A表示該文件被add到暫存區(qū)。
          深入分析Git基本工作原理
          也可以使用 git add . 或 git add -A 將工作區(qū)所有文件添加到暫存庫(kù)(除了.gitignore里聲明的文件,本文暫不介紹)。
          深入分析Git基本工作原理

          3. 刪除暫存區(qū)的文件

          既然可以向暫存區(qū)添加文件,那么反向操作必然也不能少,git rm –cached [文件…] 命令可以將暫存區(qū)的文件移除,使其恢復(fù)到Untracked狀態(tài)。
          深入分析Git基本工作原理

          4. 文件修改管理

          如果已經(jīng)存入暫存區(qū),但在文件提交到本地倉(cāng)庫(kù)前,我們對(duì)其進(jìn)行了修改,那么它的狀態(tài)將變?yōu)镸odified。
          深入分析Git基本工作原理
          對(duì)于Modified狀態(tài)的文件,我們可以使用git add將修改后的版本加入到暫存區(qū),也可以使用git checkout -- [file...]將工作區(qū)的該文件恢復(fù)到暫存區(qū)的版本。

          git add a.c重新添加a.c到暫存區(qū):
          深入分析Git基本工作原理
          下圖為使用git checkout -- a.c從暫存區(qū)恢復(fù)a.c文件,下圖中我沒(méi)有加 “ –”,它的作用是讓checkout不檢測(cè)任何其他選項(xiàng)參數(shù),目的是防止該命令把a(bǔ).c當(dāng)做一個(gè)分支(checkout 還有一個(gè)作用是切換分支)。
          深入分析Git基本工作原理
          對(duì)Modified狀態(tài)下的文件使用 git diff 可以得出文件修改的詳細(xì)記錄,git diff和diff命令雖然作用都是對(duì)比文件,但git diff的作用是對(duì)比不同的狀態(tài)下的同一文件,而diff用來(lái)對(duì)比兩個(gè)不同的文件。
          深入分析Git基本工作原理

          五、提交文件到本地倉(cāng)庫(kù)

          文件添加到暫存區(qū)的目的就是將其提交到本地倉(cāng)庫(kù)(版本庫(kù)),提交命令為git commit -m “message”

          我們可以在commit 后面添加文件,這樣能指定提交的文件:
          深入分析Git基本工作原理
          通過(guò)git log 可以查看提交記錄,HEAD為本地倉(cāng)庫(kù)當(dāng)前分支,指向主分支master:
          深入分析Git基本工作原理
          直接使用 git commit -m “message” 可以將整個(gè)暫存區(qū)都提交到本地倉(cāng)庫(kù):

          深入分析Git基本工作原理

          #以一行的形式顯示所有提交版本: git log --pretty=oneline

          深入分析Git基本工作原理

          #一行顯示,只顯示哈希值的前7位: git log --oneline

          深入分析Git基本工作原理

          #顯示歷史提交版本與當(dāng)前版本的間隔數(shù): git reflog

          深入分析Git基本工作原理

          六、推送到遠(yuǎn)程倉(cāng)庫(kù)

          代碼文件提交到本地倉(cāng)庫(kù)后,還需要推送到遠(yuǎn)程倉(cāng)庫(kù)進(jìn)行托管。

          1. 創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)

          我以碼云為例,遠(yuǎn)程倉(cāng)庫(kù)的創(chuàng)建可以通過(guò)以下三步實(shí)現(xiàn):
          深入分析Git基本工作原理

          2. 添加遠(yuǎn)程倉(cāng)庫(kù)地址

          git remote add <name> <url> 命令可以添加遠(yuǎn)程倉(cāng)庫(kù),name為遠(yuǎn)程倉(cāng)庫(kù)地址的別名,自定義,url為倉(cāng)庫(kù)網(wǎng)絡(luò)地址。
          如果要用https的方式上傳代碼,需要添加遠(yuǎn)程倉(cāng)庫(kù)https地址;用ssh上傳代碼,則url填遠(yuǎn)程倉(cāng)庫(kù)ssh地址。

          先從碼云倉(cāng)庫(kù)主頁(yè)將倉(cāng)庫(kù)地址復(fù)制下來(lái):
          深入分析Git基本工作原理

          我將遠(yuǎn)程倉(cāng)庫(kù)的本地別名命名為origin:
          深入分析Git基本工作原理
          遠(yuǎn)程倉(cāng)庫(kù)可以設(shè)置多個(gè),只要本地別名不沖突即可。

          3. 查看遠(yuǎn)程倉(cāng)庫(kù)地址

          git remote -v 命令可以查看遠(yuǎn)程倉(cāng)庫(kù)地址,也可以通過(guò)git config -l查看
          深入分析Git基本工作原理

          4. 刪除遠(yuǎn)程倉(cāng)庫(kù)地址

          git remote remove <name> 可以刪除本地別名為name的遠(yuǎn)程地址:
          深入分析Git基本工作原理

          5. 推送到遠(yuǎn)程倉(cāng)庫(kù)

          首先確認(rèn)遠(yuǎn)程倉(cāng)庫(kù)的別名,我當(dāng)前設(shè)置的遠(yuǎn)程倉(cāng)庫(kù)https協(xié)議地址對(duì)應(yīng)的別名為https,ssh協(xié)議地址對(duì)應(yīng)的別名為ssh,這兩個(gè)地址其實(shí)是一個(gè)倉(cāng)庫(kù),只是協(xié)議不同。
          深入分析Git基本工作原理

          https上傳

          git push name可以實(shí)現(xiàn)本地倉(cāng)庫(kù)的上傳,name為遠(yuǎn)程倉(cāng)庫(kù)在配置文件中的別名,使用https上傳,需要輸入賬號(hào)和密碼才能完成上傳,Window系統(tǒng)會(huì)自動(dòng)保存賬號(hào)和密碼,如果想修改Window已經(jīng)保存的用戶(hù)名和密碼,可以參考修改Gitee登錄憑據(jù)。
          有時(shí)第一次上傳會(huì)出現(xiàn)不成功的情況,可以嘗試使用git push -u name master,該命令的作用是將 name 倉(cāng)庫(kù)的主分支作為上流分支,-u和–set-upstream作用相同。
          深入分析Git基本工作原理
          深入分析Git基本工作原理
          深入分析Git基本工作原理

          ssh上傳

          如果要使用ssh上傳,需要先生成SSH密匙,并將公匙保存到gitee個(gè)人設(shè)置的SSH公匙設(shè)置中,具體過(guò)程可以參考:生成SSH密匙,實(shí)現(xiàn)代碼上傳
          有時(shí)第一次上傳會(huì)出現(xiàn)不成功的情況,可以嘗試使用git push -u name master,該命令的作用是將 name 倉(cāng)庫(kù)的主分支作為上流分支,-u和–set-upstream作用相同。
          深入分析Git基本工作原理
          深入分析Git基本工作原理

          七、從遠(yuǎn)程倉(cāng)庫(kù)clone、fetch或pull

          1. 克隆遠(yuǎn)程倉(cāng)庫(kù)到本地

          git的克隆可以將遠(yuǎn)程倉(cāng)庫(kù)拷貝到本地,同時(shí)自動(dòng)進(jìn)行本地倉(cāng)庫(kù)的初始化。
          在任意目錄下打開(kāi)Git bash,輸入 git clone <repo> [<dir>],repo為遠(yuǎn)程倉(cāng)庫(kù)網(wǎng)址,dir為克隆倉(cāng)庫(kù)的存放路徑(可以不用提前創(chuàng)建),如果不填,則默認(rèn)為遠(yuǎn)程倉(cāng)庫(kù)名(不是本地別名)。
          [注意]:clone和push一樣需要密碼。
          深入分析Git基本工作原理
          克隆成功,進(jìn)入該倉(cāng)庫(kù)目錄,和上傳時(shí)的工作區(qū)一模一樣,提交日志也相同。
          深入分析Git基本工作原理

          2. 獲取遠(yuǎn)程倉(cāng)庫(kù)(fetch)

          git fetch的作用是將遠(yuǎn)程倉(cāng)庫(kù)的分支拷貝到本地倉(cāng)庫(kù),并把最新版本保存在FETCH_HEAD分支,獲取遠(yuǎn)程倉(cāng)庫(kù)分支后,還需手動(dòng)將其合并到當(dāng)前分支。
          命令格式: git fetch [<repository>] ,repository為遠(yuǎn)程倉(cāng)庫(kù)的網(wǎng)絡(luò)地址。
          git merge <分支名>用來(lái)合并分支
          深入分析Git基本工作原理

          3. 拉取遠(yuǎn)程倉(cāng)庫(kù)(pull)

          git pull和git fetch類(lèi)似,但git pull會(huì)自動(dòng)將遠(yuǎn)程倉(cāng)庫(kù)的分支合并到本地的當(dāng)前分支。
          深入分析Git基本工作原理

          推薦學(xué)習(xí):《Git視頻教程》

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)