宣城市建設(shè)銀行網(wǎng)站建站流程
目錄
一:概述
1.1. 何為版本控制
1.2. 為什么需要版本控制
1.3. 版本控制工具
1.4.??Git 簡史
1.5.?Git 工作機(jī)制
1.6.?Git和代碼托管中心
二:安裝
2.1. Git安裝
三:常用命令
3.1?設(shè)置用戶簽名
3.2??初始化本地庫
3.3?查看本地庫狀態(tài)
3.4??添加暫存區(qū)
3.5?提交到本地庫
3.6 查看歷史版本
3.7 模擬版本迭代
3.8?版本穿梭
一:概述
????????Git 是一個(gè)免費(fèi)的、開源的分布式版本控制系統(tǒng),可以快速高效地處理從小型到大型的各種項(xiàng)目。Git 易于學(xué)習(xí),占地面積小,性能極快。 它具有廉價(jià)的本地庫,方便的暫存區(qū)域和多個(gè)工作 流分支等特性。其性能優(yōu)于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。
1.1. 何為版本控制
(1)版本控制是一種記錄文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)。
(2)版本控制其實(shí)最重要的是可以記錄文件修改歷史記錄,從而讓用戶能夠查看歷史版本, 方便版本切換。
(3)例如:當(dāng)我們修改畢業(yè)論文時(shí),肯定不能直接在原來的版本上進(jìn)行修改,我們不能保證會(huì)修改的越來越好,所以就需要對每次的每個(gè)修改版本進(jìn)行備份,這就是版本控制!
1.2. 為什么需要版本控制
(1)目的是:從個(gè)人開發(fā)過渡到團(tuán)隊(duì)協(xié)作。
(2)例如:對于同一個(gè)項(xiàng)目,小紅和小明都拉取到自己本機(jī)上修改;小紅認(rèn)為第一個(gè)版本應(yīng)該加入222,變成第二個(gè)版本;小藍(lán)認(rèn)為第一個(gè)版本應(yīng)該應(yīng)該加入444,變成第三個(gè)版本;如果此時(shí)不使用版本控制工具,小藍(lán)修改的版本就會(huì)覆蓋原來小紅修改的版本!所以就需要專門的版本控制工具去合并兩個(gè)人的代碼!
1.3. 版本控制工具
集中式版本控制工具
(1)CVS、SVN(Subversion)、VSS……
(2)集中化的版本控制系統(tǒng)諸如CVS、SVN 等,都有一個(gè)單一的集中管理的服務(wù)器,保存 所有文件的修訂版本(修改好后就提交給中央服務(wù)器),而協(xié)同工作的人們都通過客戶端連到這臺服務(wù)器,取出最新的文件或 者提交更新。多年以來,這已成為版本控制系統(tǒng)的標(biāo)準(zhǔn)做法。
(3)優(yōu)點(diǎn):每個(gè)人都可以在一定程度上看到項(xiàng)目中的其他人正在做些什么。而管理員也可以輕松掌控每個(gè)開發(fā)者的權(quán)限,并且管理一個(gè)集中化的版本控制系統(tǒng),要遠(yuǎn)比在各個(gè)客戶端上維護(hù)本地?cái)?shù)據(jù)庫來得輕松容易。
(4)缺點(diǎn):是中央服務(wù)器的單點(diǎn)故障,如果服務(wù)器宕機(jī)一小時(shí),那么在這一小時(shí)內(nèi),誰都無法提交更新,也就無法協(xié)同工作。
分布式版本控制工具
(1)Git、Mercurial、Bazaar、Darcs……
(2)像 Git 這種分布式版本控制工具,客戶端提取的不是最新版本的文件快照,而是把代碼 倉庫(遠(yuǎn)程庫)完整地鏡像下來(本地庫)。這樣任何一處協(xié)同工作用的文件發(fā)生故障,事后都可以用 其他客戶端的本地倉庫進(jìn)行恢復(fù)。因?yàn)槊總€(gè)客戶端的每一次文件提取操作,實(shí)際上都是一次 對整個(gè)文件倉庫的完整備份。
(3)分布式的版本控制系統(tǒng)出現(xiàn)之后,解決了集中式版本控制系統(tǒng)的缺陷:
①服務(wù)器斷網(wǎng)的情況下也可以進(jìn)行開發(fā)(因?yàn)榘姹究刂剖窃诒镜剡M(jìn)行的);
②每個(gè)客戶端保存的也都是整個(gè)完整的項(xiàng)目(包含歷史記錄,更加安全);
1.4.??Git 簡史
Git是Linus花了兩周時(shí)間用C寫了一個(gè)分布式版本控制系統(tǒng),用來管理Linux系統(tǒng)的源碼!
1.5.?Git 工作機(jī)制
Git大概分為三個(gè)區(qū):工作區(qū)、暫存區(qū)、本地庫!
①工作區(qū):是指代碼存放的磁盤的目錄的位置;
②暫存區(qū):讓git追蹤到你有這么個(gè)代碼文件,所以需要把工作區(qū)的代碼添加到暫存區(qū);
③本地庫:把暫存區(qū)的代碼提交到本地庫,此時(shí)才會(huì)有對應(yīng)的歷史版本;
注:最后在從本地庫推送到(push)遠(yuǎn)程倉庫!
1.6.?Git和代碼托管中心
代碼托管中心是基于網(wǎng)絡(luò)服務(wù)器的遠(yuǎn)程代碼倉庫,一般我們簡單稱為遠(yuǎn)程庫!
? 局域網(wǎng):GitLab(自己公司搭建的);
? 互聯(lián)網(wǎng):GitHub(外網(wǎng))、Gitee 碼云(國內(nèi)網(wǎng)站);
二:安裝
官網(wǎng)地址:https://git-scm.com/
2.1. Git安裝
雙擊可執(zhí)行文件,得到以下安裝界面
選擇 Git 安裝位置,要求是非中文并且沒有空格的目錄(目錄位置可自定義)
Git 選項(xiàng)配置,推薦默認(rèn)設(shè)置
Git 安裝目錄名,不用修改
Git 的默認(rèn)編輯器,建議使用默認(rèn)的 Vim 編輯器
默認(rèn)分支名設(shè)置,選擇讓 Git 決定,分支名默認(rèn)為 master
修改 Git 的環(huán)境變量,選第一個(gè),不修改環(huán)境變量,只在 Git Bash 里使用 Git
選擇后臺客戶端連接協(xié)議,選默認(rèn)值 OpenSSL
配置 Git 文件的行末換行符,Windows 使用 CRLF,Linux 使用 LF,選擇第一個(gè)自動(dòng)轉(zhuǎn)換
選擇 Git 終端類型,選擇默認(rèn)的 Git Bash 終端
選擇 Git pull 合并的模式,選擇默認(rèn)
選擇 Git 的憑據(jù)管理器,選擇默認(rèn)的跨平臺的憑據(jù)管理器
其他配置,選擇默認(rèn)設(shè)置,然后下一步。
實(shí)驗(yàn)室功能,技術(shù)還不成熟,有已知的 bug,不要勾選
?點(diǎn)擊 Finsh 按鈕,Git 安裝成功!
?右鍵任意位置,在右鍵菜單里選擇 Git Bash Here 即可打開 Git Bash 命令行終端。
在 Git Bash 終端里輸入 git --version 查看 git 版本,如圖所示,說明 Git 安裝成功。
三:常用命令
3.1?設(shè)置用戶簽名
(1)基礎(chǔ)語法
git config --global user.name 用戶名
git config --global user.email 郵箱
(2)案例實(shí)操
(3)結(jié)果查看
怎么確定我們設(shè)置好了?使用cat命令進(jìn)行查看
或者直接找到用戶名下面的.gitconfig文件?
(4)說明
簽名的作用是區(qū)分不同操作者身份;用戶的簽名信息在每一個(gè)版本的提交信息中能夠看到,以此確認(rèn)本次提交是誰做的。Git 首次安裝必須設(shè)置一下用戶簽名,否則無法提交代碼。
注意:這里設(shè)置用戶簽名和將來登錄 GitHub(或其他代碼托管中心)的賬號沒有任何關(guān)系。
3.2??初始化本地庫
(1)基礎(chǔ)語法
git init
(2)案例實(shí)操
假設(shè)在D:\git-space目錄下有一個(gè)git文件夾,在當(dāng)前文件夾下點(diǎn)擊右鍵選擇Git Bash Here,此時(shí)就會(huì)跳轉(zhuǎn)到當(dāng)前目錄下;執(zhí)行g(shù)it init命令,進(jìn)行初始化,拿到權(quán)限才能進(jìn)行管理!
(3)結(jié)果查看?
初始化后,會(huì)生成一個(gè).git隱藏目錄
也可以使用Linux命令進(jìn)行查看,ll -a(-a表示顯示所有的文件,包括隱藏的)
?
3.3?查看本地庫狀態(tài)
?(1)基本語法
git status
(2)案例實(shí)操
首次查看(工作區(qū)沒有任何文件,生成三行日志目錄)
新增文件(使用vim編輯器進(jìn)行添加Hello.java) ?
?再次查看(檢測到未追蹤的文件)
3.4??添加暫存區(qū)
?(1)基本語法
git add 文件名
(2)案例實(shí)操
相當(dāng)于從工作區(qū)添加到了暫存區(qū)
會(huì)出現(xiàn)一個(gè)警告,這個(gè)警告是告訴我們把windows的換行符CRLF自動(dòng)轉(zhuǎn)換成Linux的LF,不用管這個(gè)警告!
?查看狀態(tài)(檢測到暫存區(qū)有新文件)
此時(shí)要是不想讓Hello.java保存歷史版本,可以使用git rm --cached Hello.java進(jìn)行刪除!
注:此時(shí)只是刪除暫存區(qū)里面的文件,在工作區(qū)上還是存在的!
3.5?提交到本地庫
(1)基礎(chǔ)語法
git commit -m "日志信息" 文件名
(2)案例實(shí)操
將暫存區(qū)的文件提交到本地庫
再次查看狀態(tài),日志信息又變了
?
3.6 查看歷史版本
(1)基本語法
git reflog 查看版本信息
git log 查看版本詳細(xì)信息
(2)案例實(shí)操
3.7 模擬版本迭代
修改文件Hello.java
再次查看狀態(tài)?(檢測到工作區(qū)有文件被修改)
將修改的文件再次添加暫存區(qū),并查看狀態(tài)
再次提交到本地庫
明明只是修改了一行,為什么提示一行新增,一行刪除?
注:在Git中是按照行來維護(hù)文件的,修改一行沒有辦法表達(dá)出來,只能把修改的那一行先刪掉,然后把修改后的那一行新增進(jìn)來!
3.8?版本穿梭
(1)基本語法
git reset --hard 版本號
(2)?案例實(shí)操
再次查看歷史版本信息,此時(shí)已經(jīng)有兩個(gè)版本
注:此時(shí)指向的是我們剛剛提交的第二個(gè)版本!
?此時(shí)查看文件的信息
切換到第一個(gè)版本
?查看版本信息,指針已經(jīng)指向第一個(gè)版本了
?再次查看文件的信息
?
補(bǔ)充:也可以通過文件直接看
首先找到.git下面的HEAD文件,顯示的內(nèi)容如下:
ref: refs/heads/master // 指針指向了master,說明當(dāng)前是在master分支上
在查看在master分支上的那個(gè)版本?在.git/refs/heads/master
708329dbaf888265cd62e21dd99dad5d3fd16b8c // 第一個(gè)版本號
// 指針指向了master分支,master分支又指向了第一個(gè)版本
總結(jié):Git切換版本,底層其實(shí)是移動(dòng)的head指針,head指針指向master分支,master分支又指向了版本號,通過調(diào)節(jié)指針的指向來切換不同的版本!