版本控制系統(tǒng)概述
-
開(kāi)發(fā)中的實(shí)際場(chǎng)景
場(chǎng)景一:代碼備份
場(chǎng)景二:代碼還原【版本控制】
場(chǎng)景三:協(xié)同開(kāi)發(fā)
場(chǎng)景四:追溯問(wèn)題代碼
-
版本控制系統(tǒng)
版本控制系統(tǒng)能追蹤項(xiàng)目烁竭,從開(kāi)始到結(jié)束的整個(gè)過(guò)程网棍。對(duì)編程人員而言世囊,版本控制技術(shù)是團(tuán)隊(duì)協(xié)作開(kāi)發(fā)的橋梁,助力于多人協(xié)作同步進(jìn)行大型項(xiàng)目開(kāi)發(fā)悼院。
軟件版本控制系統(tǒng)的核心任務(wù):查閱項(xiàng)目歷史操作記錄判没、實(shí)現(xiàn)協(xié)同開(kāi)發(fā)啊送。
常見(jiàn)的兩種版本控制類(lèi)型
集中式版本控制工具:集中式版本控制工具,版本倉(cāng)庫(kù)是集中存放在中央服務(wù)器的广恢,team 里每個(gè)人工作時(shí)凯旋,從中央服務(wù)器下載代碼。每個(gè)人修改后袁波,提交到中央版本倉(cāng)庫(kù)瓦阐。提交(commit)代碼需要聯(lián)網(wǎng)。如 SVN篷牌。
分布式版本控制工具:分布式版本控制系統(tǒng)可以沒(méi)有 “中央服務(wù)器”睡蟋,每個(gè)人的電腦上都是一個(gè)完整的版本倉(cāng)庫(kù),這樣工作的時(shí)候枷颊,不需要聯(lián)網(wǎng)戳杀。因?yàn)榘姹緜}(cāng)庫(kù)就在你自己的電腦上。多人協(xié)作只需要各自修改夭苗,開(kāi)發(fā)完成即可信卡,推送給對(duì)方,推送的時(shí)候是聯(lián)網(wǎng)將整個(gè)版本倉(cāng)庫(kù)推過(guò)去题造。如 GIT傍菇。
-
Git 簡(jiǎn)介
Git 是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),可以有效界赔、高速地處理從很小到非常大的項(xiàng)目的版本管理丢习。
- 速度牵触、簡(jiǎn)單的設(shè)計(jì)
- 對(duì)非線性開(kāi)發(fā)模式的強(qiáng)力支持(允許成千上萬(wàn)個(gè)并行開(kāi)發(fā)的分支)
- 完全分布式
- 有能力高效管理類(lèi)似 Linux 內(nèi)核一樣的超大規(guī)模項(xiàng)目(速度和數(shù)據(jù)量)
Git 工作流程
Clone:克隆,從遠(yuǎn)程倉(cāng)庫(kù)中克隆代碼到本地倉(cāng)庫(kù)咐低,第一次操作
Push:推送揽思,代碼完成后,需要和團(tuán)隊(duì)成員共享代碼時(shí)见擦,將代碼推送到遠(yuǎn)程倉(cāng)庫(kù)
Pull:拉取钉汗,從遠(yuǎn)程庫(kù)拉代碼到本地庫(kù),自動(dòng)進(jìn)行合并(merge)鲤屡,最后放到工作區(qū)
checkout:將本地倉(cāng)庫(kù)的內(nèi)容檢出到工作區(qū)
add:在提交前先將代碼提交到暫存區(qū)
commit:提交到本地倉(cāng)庫(kù)
基本概念
- 本地倉(cāng)庫(kù):在本地主機(jī)上的一個(gè)代碼庫(kù)损痰,可以獨(dú)立存在,也可以與遠(yuǎn)程倉(cāng)庫(kù)進(jìn)行關(guān)聯(lián)
工作區(qū):對(duì)任何文件的修訂(增刪改)执俩,都先放在工作區(qū)徐钠,工作區(qū)不與任何倉(cāng)庫(kù)分支進(jìn)行關(guān)聯(lián)
暫存區(qū):把修訂的文件,從工作區(qū)經(jīng)過(guò) add(添加)后與某一個(gè)倉(cāng)庫(kù)分支進(jìn)行關(guān)聯(lián)役首,只有進(jìn)入暫存區(qū)的文件才能 commit(提交)到本地倉(cāng)庫(kù)尝丐。
遠(yuǎn)程倉(cāng)庫(kù):在局域網(wǎng)或互聯(lián)網(wǎng)上的一個(gè)主機(jī),存放代碼庫(kù)的主機(jī)或平臺(tái)衡奥,比如 GitHub爹袁、Gitee
分支:代碼存放在倉(cāng)庫(kù),默認(rèn)是主分支(master)矮固,可以在主分支基礎(chǔ)上創(chuàng)建很多子分支失息,比如 develop、BugFix 等档址。
一個(gè)文件夾包含 .git 隱藏目錄(Git 工作目錄)盹兢,說(shuō)明此文件目錄使用 Git 版本管理。
.git 隱藏目錄中存儲(chǔ)了很多配置信息守伸、日志信息和文件版本信息绎秒、暫存區(qū)信息等。.git 文件夾中有很多文件尼摹,其中有一個(gè) index 文件就是暫存區(qū)见芹,也可以叫做 stage。暫存區(qū)是一個(gè)臨時(shí)保存修改文件的地方蠢涝。
小結(jié)
Git 是分布式的版本控制系統(tǒng)玄呛。
Git 解決的問(wèn)題:代碼備份、還原和二;協(xié)同開(kāi)發(fā)徘铝;多版本同時(shí)開(kāi)發(fā)、追溯問(wèn)題代碼。
本地倉(cāng)庫(kù):存儲(chǔ)所有版本代碼
?????-- 工作區(qū):編輯代碼區(qū)
?????-- 暫存區(qū):準(zhǔn)備提交的代碼都放這里
遠(yuǎn)程倉(cāng)庫(kù):用于團(tuán)隊(duì)之間共享代碼
分支:多個(gè)版本同時(shí)開(kāi)發(fā)庭砍,master 主分支场晶,develop 開(kāi)發(fā)分支混埠,test 測(cè)試分支
遠(yuǎn)程倉(cāng)庫(kù)操作:
- clone 克碌「住:第一次從遠(yuǎn)程倉(cāng)庫(kù)下載代碼
- pull 拉取:獲取團(tuán)隊(duì)其他成員代碼提交變動(dòng)
- push 推送:完成后的代碼上傳到遠(yuǎn)程倉(cāng)庫(kù)
本地倉(cāng)庫(kù)操作:
- checkout 檢出:將本地倉(cāng)庫(kù)的內(nèi)容檢出到工作區(qū)
- add 添加:向暫存區(qū)添加代碼钳宪,準(zhǔn)備提交
- commit 提交:把暫存區(qū)的代碼提交到本地倉(cāng)庫(kù)
Git 的下載與安裝
下載地址: https://git-scm.com/download
Git GUI
:Git 提供的圖形界面工具
Git Bash
:Git 提供的命令行工具
Git 基本配置
-
基本配置
進(jìn)行全局設(shè)置揭北,如用戶(hù)名、郵箱:
#設(shè)置全局用戶(hù)名
git config --global user.name "YOUR_NAME"
#設(shè)置郵箱
git config --global user.email "YOUR_EMAIL"
通過(guò)上面的命令設(shè)置的信息會(huì)保存在 .gitconfig 文件中
其中吏颖, --global 指定為全局配置搔体,不使用該參數(shù),則為當(dāng)前所在倉(cāng)庫(kù)配置半醉。
以上配置信息默認(rèn)存儲(chǔ)在用戶(hù)目錄下疚俱,如果設(shè)置錯(cuò)誤,可以刪除 .gitconfig 文件缩多,重新操作以上命令即可呆奕。
#查看配置信息:
查看配置信息
git config --list
-
構(gòu)建本地倉(cāng)庫(kù)
要使用 Git 對(duì)代碼進(jìn)行版本控制,首先需要構(gòu)建本地倉(cāng)庫(kù)
通常有兩種方式:
- 在本地初始化一個(gè) Git 倉(cāng)庫(kù)
- 從遠(yuǎn)程倉(cāng)庫(kù)克隆一個(gè)倉(cāng)庫(kù)(遠(yuǎn)程倉(cāng)庫(kù)演示)
初始化本地 Git 倉(cāng)庫(kù)
1)在電腦的任意位置創(chuàng)建一個(gè)空目錄(例如 local_repo1)作為本地 Git 倉(cāng)庫(kù)
2)進(jìn)入這個(gè)目錄中衬吆,點(diǎn)擊右鍵打開(kāi) Git bash 窗口
3)執(zhí)行命令 Git init 如果在當(dāng)前目錄中看到 .git 文件夾(此文件夾為隱藏文件夾)則說(shuō)明 Git 倉(cāng)庫(kù)創(chuàng)建成功
-
本地倉(cāng)庫(kù)的操作
創(chuàng)建 Git 版本庫(kù)
在本地創(chuàng)建 Git 版本庫(kù)梁钾,需要使用 git init 命令。
新建一個(gè)存放版本庫(kù)的目錄逊抡,進(jìn)入到該目錄所在路徑姆泻,然后執(zhí)行:
git init
查看目錄結(jié)構(gòu)中,就可以看到包含有 .git 子目錄冒嫡,這就說(shuō)明創(chuàng)建版本庫(kù)成功了
查看當(dāng)前文件狀態(tài)
# 命令形式:
git status
# 更簡(jiǎn)潔的信息命令形式:
git status -s
將文件添加(修改)到版本庫(kù)
要將一個(gè)文件納入到版本庫(kù)管理拇勃,首先要將其添加到暫存區(qū),然后才能提交到倉(cāng)庫(kù)中孝凌。
將文件添加到暫存區(qū)方咆,使用的是 git add:
# 添加單個(gè)文件到暫存區(qū)
git add Readme.txt
# 將當(dāng)前目錄下所有修改添加到暫存區(qū),除按照規(guī)則忽略的之外
git add .
注意:空文件夾是不會(huì)被添加到暫存區(qū)中的胎许。
將暫存區(qū)中的文件峻呛,提交到倉(cāng)庫(kù)中。需要使用 git commit:
# 如果暫存區(qū)有文件辜窑,則將其中的文件提交到倉(cāng)庫(kù)
git commit
# 帶評(píng)論提交钩述,用于說(shuō)明提交內(nèi)容、變更穆碎、作用等
git commit -m 'YOUR_COMMENTS'
注意:直接用 git commit 提交會(huì)彈出添加評(píng)論的頁(yè)面牙勘。
查看提交歷史記錄
需要查看自己做過(guò)哪些提交,來(lái)回顧自己完成的部分;或者需要尋找某個(gè)具體的提交來(lái)查看當(dāng)時(shí)的代碼:
# 顯示所有提交的歷史記錄
git log
# 單行顯示提交歷史記錄的內(nèi)容
git log --pretty=oneline
在 git log 的輸出內(nèi)容中方面,可以看到每次提交的 ID 是一個(gè) 40 位的字符串放钦。
版本回退
有了 git log 來(lái)查看提交的歷史記錄,就可以通過(guò) git reset --hard 來(lái)回退到需要的特定版本恭金,然后使用當(dāng)時(shí)的代碼進(jìn)行各種操作操禀。
# 回退到 commit_id 指定的提交版本
git reset --hard 'COMMIT_ID'
當(dāng)退回到某個(gè)提交的版本以后,再通過(guò) git log 是無(wú)法顯示在這之后的提交信息的横腿。但是颓屑,通過(guò) git reflog 可以獲取到操作命令的歷史。
因此耿焊,想要回到未來(lái)的某個(gè)提交揪惦,先通過(guò) git reflog 從歷史命令中找到想要回到的提交版本的 ID,然后通過(guò) git reset --hard 來(lái)切換罗侯。
git reflog
git reset --hard 'COMMIT_ID'
刪除文件
在文件未添加到暫存區(qū)之前器腋,對(duì)想刪除文件可以直接物理刪除。如果文件已經(jīng)被提交钩杰,則需要 git rm 來(lái)刪除:
# 刪除已經(jīng)被提交過(guò)的 Readme.md
git rm Readme.md
注意:git rm 只能刪除已經(jīng)提交到版本庫(kù)中的文件纫塌,其他狀態(tài)的文件直接用這個(gè)命令操作是出錯(cuò)的。
添加文件至忽略列表
一般在工作區(qū)中榜苫,并不是所有文件都需要納入版本控制的
這種不需要進(jìn)行版本控制的通常都是些自動(dòng)生成的文件护戳。比如:IDEA 工程文件(springmvc.iml)、編譯后文件 target垂睬、系統(tǒng)上傳的圖片 img媳荒。
在這種情況下可以在工作目錄中創(chuàng)建一個(gè)名為 .gitignore 的文件(文件名稱(chēng)固定),列出要忽略的文件驹饺。
一般在工程初始化時(shí)钳枕,提前準(zhǔn)備好需要忽略的文件列表。
分支管理
幾乎所有的版本控制系統(tǒng)都以某種形式支持分支赏壹。 使用分支意味著可以把工作從開(kāi)發(fā)主線上分離開(kāi)來(lái)進(jìn)行重大的 Bug 修改鱼炒、開(kāi)發(fā)新的功能,以免影響開(kāi)發(fā)主線蝌借。
在開(kāi)發(fā)中昔瞧,一般有如下分支使用原則與流程
master 生產(chǎn)分支:線上分支,主分支菩佑,中小規(guī)模項(xiàng)目作為線上運(yùn)行的應(yīng)用對(duì)應(yīng)的分支自晰。
test 測(cè)試分支:從 master 創(chuàng)建的分支,一般作為測(cè)試部門(mén)的測(cè)試分支稍坯,進(jìn)行預(yù)發(fā)測(cè)試酬荞;測(cè)試完成后,需要合并到 master 分支,進(jìn)行上線混巧,中小規(guī)模項(xiàng)目可省略此分支枪向。
develop 開(kāi)發(fā)分支:從 test 創(chuàng)建分支,如果開(kāi)發(fā)沒(méi)有 test 分支咧党,是從 master 創(chuàng)建的分支秘蛔,一般作為開(kāi)發(fā)部門(mén)的主要開(kāi)發(fā)分支;如果沒(méi)有其他并行開(kāi)發(fā)不同期上線要求凿傅,都可以在此版本進(jìn)行開(kāi)發(fā)缠犀;階段開(kāi)發(fā)完成后,需要是合并到 test 分支繼續(xù)測(cè)試聪舒,如果沒(méi)有 test 分支,可直接合并到 master 分支虐急。
hotfix(bugfix) 分支:從 master 派生的分支箱残,一般作為線上 bug 修復(fù)使用,修復(fù)完成后需要合并到 master止吁、test被辑、develop 分支。
-
查看分支
查看分支使用 git branch:
# 查看本地分支信息
git branch
# 查看相對(duì)詳細(xì)的本地分支信息
git branch -v
# 查看包括遠(yuǎn)程倉(cāng)庫(kù)在內(nèi)的分支信息
git branch -av
注意:在 git branch 的輸出內(nèi)容中敬惦,有一個(gè)分支前面帶有 * 號(hào)盼理,這標(biāo)識(shí)當(dāng)前所在的分支
-
創(chuàng)建分支
當(dāng)要修復(fù)一個(gè) Bug 或者開(kāi)發(fā)一個(gè)新特性,甚至是怕打亂原來(lái)的代碼俄删,都可以新建一個(gè)分支來(lái)避免對(duì)原來(lái)代碼的影響宏怔。
# 新建一個(gè)名稱(chēng)為 dev 的分支
git branch dev
-
切換分支
當(dāng)創(chuàng)建完分支以后,需要切換到新建的分支畴椰,否則臊诊,所有的修改,還是在原來(lái)的分支上斜脂。所有的改動(dòng)抓艳,只能影響到當(dāng)前所在的分支。
# 新建完 dev 分支以后帚戳,通過(guò)該命令切換到 dev 分支
git checkout dev
-
創(chuàng)建并切換分支
# 新建 dev 分支玷或,并切換到該分支上
git checkout -b dev
這個(gè)命令合并了前兩個(gè)獨(dú)立的命令,平常使用中一般這樣使用片任。
-
合并分支
當(dāng)修復(fù)完成一個(gè) Bug偏友,或者開(kāi)發(fā)完成一個(gè)新特性,就會(huì)把相關(guān)的 Bug 或者特性的上修改合并回原來(lái)的主分支上蚂踊,這時(shí)候就需要 git merge 來(lái)做分支的合并约谈。
首先需要切換回最終要合并到的分支,如 master:
# 切換回 master 分支
git checkout master
# 將 dev 分鐘中的修改合并回 master 分支
git merge dev
合并回主分支的時(shí)候,可能會(huì)面臨到?jīng)_突的問(wèn)題 git add ./
-
刪除分支
當(dāng)之前創(chuàng)建的分支棱诱,完成了它的使命泼橘,如 Bug 修復(fù)完,分支合并以后迈勋,這個(gè)分支就不在需要了炬灭,就可以刪除它。
# 刪除 dev 分支
git branch -d dev
Git 遠(yuǎn)程倉(cāng)庫(kù)
-
添加遠(yuǎn)程庫(kù)
現(xiàn)在已經(jīng)在本地創(chuàng)建了一個(gè) Git 倉(cāng)庫(kù)靡菇,又想讓其他人來(lái)協(xié)作開(kāi)發(fā)重归,此時(shí)就可以把本地倉(cāng)庫(kù)同步到遠(yuǎn)程倉(cāng)庫(kù),同時(shí)還增加了本地倉(cāng)庫(kù)的一個(gè)備份厦凤。
那么如何搭建 Git 遠(yuǎn)程倉(cāng)庫(kù)呢鼻吮?可以借助互聯(lián)網(wǎng)上提供的一些代碼托管服務(wù)平臺(tái)來(lái)實(shí)現(xiàn),其中比較常用的有 GitHub较鼓、碼云等椎木。
GitHub(https://github.com/)是一個(gè)面向開(kāi)源及私有軟件項(xiàng)目的托管平臺(tái),因?yàn)橹恢С?Git 作為唯一的版本倉(cāng)庫(kù)格式進(jìn)行托管博烂,故名 GitHub香椎。
碼云(https://gitee.com/ )是國(guó)內(nèi)的一個(gè)代碼托管平臺(tái),由于服務(wù)器在國(guó)內(nèi)禽篱,所以相比于 GitHub畜伐,碼云速度會(huì)更快。
-
注冊(cè) GitHub
第一步:登錄網(wǎng)址躺率,點(diǎn)擊 sign up 注冊(cè)賬號(hào)
第二步:填寫(xiě)信息玛界,注意郵箱要真實(shí)有效
第三步:直接點(diǎn)擊 join a free plan
第四步:直接劃到最下面點(diǎn)擊 complete setup
第五步:郵箱需要驗(yàn)證,驗(yàn)證完成后登陸進(jìn) GitHub
驗(yàn)證郵箱:進(jìn)入郵箱后點(diǎn)擊按鈕肥照,進(jìn)行頁(yè)面跳轉(zhuǎn)
跳轉(zhuǎn)頁(yè)面后:點(diǎn)擊 skip this for now
第六步:登錄
-
創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)
點(diǎn)擊 create repository 按鈕倉(cāng)庫(kù)就創(chuàng)建成功了脚仔。
-
同步遠(yuǎn)程倉(cāng)庫(kù)
GitHub 支持兩種同步方式 https 和 ssh。如果使用 https 很簡(jiǎn)單基本不需要配置就可以使用舆绎,但是每次提交代碼和下載代碼時(shí)都需要輸入用戶(hù)名和密碼鲤脏。而且如果是公司配置的私有 Git 服務(wù)器一般不提供 https 方式訪問(wèn),所以要來(lái)著重演示 ssh 方式吕朵。
SSH 協(xié)議
什么是 SSH?
SSH - Secure Shell 的簡(jiǎn)寫(xiě)形式猎醇。通過(guò)使用 SSH,可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密努溃,這樣"中間人"這種攻擊方式就不可能實(shí)現(xiàn)了硫嘶,而且也能夠防止 DNS 欺騙和 IP 欺騙。使用 SSH梧税,還有一個(gè)額外的好處就是傳輸?shù)臄?shù)據(jù)是經(jīng)過(guò)壓縮的沦疾,所以可以加快傳輸?shù)乃俣取?/p>
注:使用 SSH 同步方式需要先生成密鑰并在 GitHub 配置公鑰
SSH 密鑰生成
在 windows 下我們可以使用 Git 的 Bash.exe 來(lái)生成密鑰称近,右鍵菜單打開(kāi) Git Bash
git bash 執(zhí)行命令生成公鑰和私鑰:
ssh-keygen -t rsa
執(zhí)行命令完成后,在 window 本地用戶(hù) .ssh 目錄 C:\Users\用戶(hù)名.ssh 下面生成如下名稱(chēng)的私鑰文件和公鑰文件:
id_rsa
id_rsa.pub
SSH 密鑰配置
密鑰生成后需要在 GitHub 上配置密鑰哮塞,本地才可以順利訪問(wèn)刨秆。
在 key 部分將 id_rsa.pub 文件內(nèi)容添加進(jìn)去,然后點(diǎn)擊 Add SSH key 按鈕完成配置忆畅。
遠(yuǎn)程倉(cāng)庫(kù)的操作
-
查看遠(yuǎn)程倉(cāng)庫(kù)
如果想查看已經(jīng)配置的遠(yuǎn)程倉(cāng)庫(kù)服務(wù)器衡未,可以運(yùn)行 git remote 命令。 它會(huì)列出指定的每一個(gè)遠(yuǎn)程服務(wù)器的簡(jiǎn)寫(xiě)家凯。 如果已經(jīng)克隆了遠(yuǎn)程倉(cāng)庫(kù)缓醋,那么至少應(yīng)該能看到 origin ,這是 Git 克隆的倉(cāng)庫(kù)服務(wù)器的默認(rèn)名字绊诲。
# 命令形式:
git remote -v
# origin ——倉(cāng)庫(kù)服務(wù)器的默認(rèn)名稱(chēng)
-
添加遠(yuǎn)程倉(cāng)庫(kù)
如果已經(jīng)有了一個(gè)本地倉(cāng)庫(kù)送粱,然后打算將它發(fā)布到遠(yuǎn)程,供其他人協(xié)作驯镊。那么使用:
# 為本地倉(cāng)庫(kù)添加遠(yuǎn)程倉(cāng)庫(kù)
git remote add origin your_remote_git_repo
-
推送本地的內(nèi)容到遠(yuǎn)程倉(cāng)庫(kù)
當(dāng)本地倉(cāng)庫(kù)中葫督,代碼完成提交,就需要將代碼等推送到遠(yuǎn)程倉(cāng)庫(kù)板惑,這樣其他協(xié)作人員可以從遠(yuǎn)程倉(cāng)庫(kù)同步內(nèi)容。
# 第一次推送時(shí)使用偎快,可以簡(jiǎn)化后面的推送或者拉取命令使用
git push -u origin master
# 將本地 master 分支推送到 origin 遠(yuǎn)程分支
git push origin master
注意:
git push -u origin master冯乘,第一次使用時(shí),帶上 -u 參數(shù)晒夹,在將本地的 master 分支推送到遠(yuǎn)程新的 master 分支的同時(shí)裆馒,還會(huì)把本地的 master 分支和遠(yuǎn)程的 master 分支關(guān)聯(lián)起來(lái)。
推送之前丐怯,需要先 pull 遠(yuǎn)端倉(cāng)庫(kù)喷好,如果發(fā)現(xiàn)提交版本不一致,會(huì)出現(xiàn)錯(cuò)誤
-
從遠(yuǎn)程倉(cāng)庫(kù)獲取最新內(nèi)容
在多人協(xié)作過(guò)程中读跷,當(dāng)自己完成了本地倉(cāng)庫(kù)中的提交梗搅,想要向遠(yuǎn)程倉(cāng)庫(kù)推送前,需要先獲取到遠(yuǎn)程倉(cāng)庫(kù)的最新內(nèi)容效览。
可以通過(guò) git fetch 和 git pull 來(lái)獲取遠(yuǎn)程倉(cāng)庫(kù)的內(nèi)容无切。
git fetch origin master
git pull origin master
git fetch 和 git pull 之間的區(qū)別:
- git fetch 是僅僅獲取遠(yuǎn)程倉(cāng)庫(kù)的更新內(nèi)容,并不會(huì)自動(dòng)做合并丐枉。
- git pull 在獲取遠(yuǎn)程倉(cāng)庫(kù)的內(nèi)容后哆键,會(huì)自動(dòng)做合并,可以看成 git fetch 之后 git merge瘦锹。
-
移除無(wú)效的遠(yuǎn)程倉(cāng)庫(kù)
如果因?yàn)橐恍┰蛳胍瞥粋€(gè)遠(yuǎn)程倉(cāng)庫(kù)
# 命令形式
git remote rm <shortname>
注意:此命令只是從本地移除遠(yuǎn)程倉(cāng)庫(kù)的記錄籍嘹,并不會(huì)真正影響到遠(yuǎn)程倉(cāng)庫(kù)
-
從遠(yuǎn)程倉(cāng)庫(kù)克隆
如果想獲得一份已經(jīng)存在了的 Git 倉(cāng)庫(kù)的拷貝闪盔,這時(shí)就要用到 git clone 命令。 Git 克隆的是該 Git 倉(cāng)庫(kù)服務(wù)器上的幾乎所有數(shù)據(jù)(包括日志信息辱士、歷史記錄等)泪掀,而不僅僅是復(fù)制工作所需要的文件。 當(dāng)執(zhí)行 git clone 命令的時(shí)候识补,默認(rèn)配置下遠(yuǎn)程 Git 倉(cāng)庫(kù)中的每一個(gè)文件的每一個(gè)版本都將被拉取下來(lái)族淮。
如果本地沒(méi)有倉(cāng)庫(kù),希望從已有的遠(yuǎn)程倉(cāng)庫(kù)上復(fù)制一份代碼凭涂,那么就需要 git clone祝辣。
# 通過(guò) https 協(xié)議,克隆 Github 上 git 倉(cāng)庫(kù)的源碼
git clone https://github.com/zm/repo1.git
# 通過(guò) ssh 協(xié)議切油,克隆 Github 上 git 倉(cāng)庫(kù)的源碼
git clone git@github.com:zm/repo1.git
注意:git clone 后面的倉(cāng)庫(kù)地址蝙斜,可以支持多種協(xié)議,如 https澎胡,ssh 等孕荠。
-
從遠(yuǎn)程倉(cāng)庫(kù)中拉取
拉取 pull
# 命令形式
git pull [遠(yuǎn)程倉(cāng)庫(kù)名稱(chēng)] [分支名稱(chēng)]
-
解決合并沖突
在一段時(shí)間,A攻谁、B 用戶(hù)修改了同一個(gè)文件稚伍,且修改了同一行位置的代碼,此時(shí)會(huì)發(fā)生合并沖突戚宦。
A 用戶(hù)在本地修改代碼后優(yōu)先推送到遠(yuǎn)程倉(cāng)庫(kù)个曙,此時(shí) B 用戶(hù)在本地修訂代碼,提交到本地倉(cāng)庫(kù)后受楼,也需要推送到遠(yuǎn)程倉(cāng)庫(kù)垦搬,此時(shí) B 用戶(hù)晚于 A 用戶(hù)推送,故需要先拉取遠(yuǎn)程倉(cāng)庫(kù)代碼艳汽,經(jīng)過(guò)合并后才能推送代碼猴贰。在 B 用戶(hù)拉取代碼時(shí),因?yàn)?A河狐、B 用戶(hù)同一段時(shí)間修改了同一個(gè)文件的相同位置代碼米绕,故會(huì)發(fā)生合并沖突。
A 用戶(hù):修改 a.java 代碼推送到遠(yuǎn)程倉(cāng)庫(kù)
B 用戶(hù):修改 a.java 同一行代碼甚牲,提交之后义郑,合并碼出現(xiàn)沖突
解決方法:
- 先拉取代碼
- 然后打開(kāi)代碼解決沖突
- 再提交
小結(jié)
遠(yuǎn)程倉(cāng)庫(kù)操作常用命令:
# 查看所有遠(yuǎn)程倉(cāng)庫(kù)名稱(chēng)
git remote
# 查看遠(yuǎn)程倉(cāng)庫(kù)縮略信息
git remote -v
# 將本地倉(cāng)庫(kù)代碼推送到遠(yuǎn)程倉(cāng)庫(kù)
git push origin master
# 克隆遠(yuǎn)程倉(cāng)庫(kù)代碼到本地
git clone https://github.com/zm/repo1.git
# 拉取遠(yuǎn)程倉(cāng)庫(kù)代碼到本地(fetch+merge)
git pull origin master
在 IDEA 中使用 Git
-
在 IDEA 中配置 Git
安裝好 IntelliJ IDEA 后,如果 Git 安裝在默認(rèn)路徑下丈钙,那么 idea 會(huì)自動(dòng)找到 Git 的位置非驮,如果更改了 Git 的安裝位置則需要手動(dòng)配置下 Git 的路徑。選擇 File → Settings 打開(kāi)設(shè)置窗口雏赦,找到Version Control 下的 Git 選項(xiàng)劫笙,輸入 git.exe 的路徑芙扎,點(diǎn)擊 Test 按鈕,現(xiàn)在執(zhí)行成功填大,配置完成戒洼。
-
開(kāi)發(fā)中 IDEA 的 Git 常見(jiàn)操作
初始化并提交項(xiàng)目到遠(yuǎn)程倉(cāng)庫(kù)【項(xiàng)目 Leader 操作】
執(zhí)行步驟:
- 在 GitHub / 碼云中創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)
- 將 maven 工程交給 Git 管理
- 配置忽略文件
- 提交到本地倉(cāng)庫(kù)
- 推送到遠(yuǎn)程倉(cāng)庫(kù)
克隆遠(yuǎn)程倉(cāng)庫(kù)到本地【開(kāi)發(fā)人員】
啟動(dòng) IDEA,從遠(yuǎn)程倉(cāng)庫(kù)克隆項(xiàng)目
本地倉(cāng)庫(kù)推送Push至遠(yuǎn)程倉(cāng)庫(kù)
操作步驟:
- 推送前一定要先拉取遠(yuǎn)程倉(cāng)庫(kù)對(duì)應(yīng)分支
- 如果有沖突允华,先解決沖突圈浇,并提交到本地倉(cāng)庫(kù)
- 推送當(dāng)前分支到遠(yuǎn)程倉(cāng)庫(kù)
分支操作
操作步驟:
- 創(chuàng)建分支
- 切換分支執(zhí)行操作
- 執(zhí)行合并操作,master 合并 dev靴寂,并推送到遠(yuǎn)程倉(cāng)庫(kù)
傻瓜追蹤器:版本比較
對(duì)代碼修改后磷蜀,可以點(diǎn)擊 Show History 按鈕,對(duì)比差異