git

一傍念、版本控制介紹

1.1 版本控制

工程設(shè)計領(lǐng)域中使用版本控制管理工程藍圖的設(shè)計過程墓怀。在 IT 開發(fā)過程中也可以使用版本控制思想管理代碼的版本迭代迂烁。

1.2 版本控制工具

思想:版本控制

實現(xiàn): 版本控制工具

集中式版本控制工具:CVS壶愤、SVN对雪、VSS...

need-to-insert-img

分布式版本控制工具:Git怜庸、Mercurial当犯、Bazzar、Darcs...

need-to-insert-img

二割疾、Git簡介

2.1 Git簡史

need-to-insert-img

2.2 Git官網(wǎng)和Logo

Git官網(wǎng)

need-to-insert-img

2.3 Git的優(yōu)勢

大部分操作在本地完成灶壶,不需要聯(lián)網(wǎng)

完整性保證

盡可能添加數(shù)據(jù)而不是刪除或修改數(shù)據(jù)

分支操作非常快捷流暢

與 Linux命令全面兼容

2.4 Git結(jié)構(gòu)

need-to-insert-img

2.5 Git和代碼托管中心

代碼托管中心的任務(wù):維護遠程庫

局域網(wǎng)環(huán)境

GitLab服務(wù)器

外網(wǎng)環(huán)境

GitHub杈曲、碼云

三驰凛、本地倉庫和遠程庫

3.1 團隊內(nèi)部協(xié)作

need-to-insert-img

3.2 跨團隊協(xié)作

need-to-insert-img

四胸懈、Git命令行操作

4.1 本地倉庫初始化

git init

need-to-insert-img

4.2 設(shè)置簽名

作用:區(qū)分不同開發(fā)人員的身份信息

辨析:這里設(shè)置簽名和遠程庫登錄的賬號密碼沒有任何關(guān)系?

#項目級別的設(shè)置 信息保存位置:.git/config文件git config user.name admingit config user.email example@gmail.com#系統(tǒng)級別設(shè)置 信息保存位置:~/.gitconfig文件git config--global user.name admingit config--global user.email example@gmail.com

4.3 基本操作

狀態(tài)查看

git status #查看工作區(qū)、暫存區(qū)狀態(tài)

添加和提交

git add[file name]#將工作區(qū)的’新建/修改‘添加到暫存區(qū)git rm--cached[file name]#將剛才add的文件從暫存區(qū)刪除掉git commit-m"commit msg"[file name]#將緩存區(qū)的內(nèi)容提交到本地庫

查看歷史記錄

git log #空格下翻頁恰响、b上翻頁趣钱、q退出git log--online #每條記錄單行展示git reflog #每條記錄單行展示并且顯示最新版本到每條記錄的回退步數(shù)

need-to-insert-img

--soft參數(shù)

僅僅在本地庫移動HEAD指針

need-to-insert-img

--mixed參數(shù)

1. 在本地庫移動HEAD指針

2. 重置暫存區(qū)

need-to-insert-img

--hard參數(shù)

1. 在本地庫移動HEAD指針

2. 重置暫存區(qū)

3. 重置工作區(qū)

刪除文件并找回

前提:刪除前,文件存在是的狀態(tài)提交到了本地庫

git reset--hard[指針位置] #刪除操作已經(jīng)提交到本地庫:指針位置指向歷史記錄#刪除操作尚未提交到本地庫:指針位置使用HEAD

比較文件差異

git diff[file name]#將工作區(qū)中的文件和暫存區(qū)進行比較git diff[本地庫中歷史版本][file name]#將工作區(qū)的文件和本地庫歷史記錄比較git diff #不帶文件名比較多個文件

4.4 分支管理

什么是分支

在版本控制過程中胚宦,使用多條線同時推進多個任務(wù)首有。

need-to-insert-img

分支的好處

同時并行推進多個功能開發(fā),提高開發(fā)效率枢劝。

各個分支在開發(fā)過程中井联,如果某一個分支開發(fā)失敗,不會對其他分支有任 何影響您旁。失敗 的分支刪除重新開始即可烙常。

分支的操作

git branch[分支名]#創(chuàng)建分支git branch-v #查看分支git checkout[分支名]#切換分支git merge[源分支名]#合并分支:先切換到目標(biāo)分支,在執(zhí)行當(dāng)前合并的命令

解決沖突

編輯文件鹤盒,刪除特殊符號

把文件修改到滿意的程度蚕脏,保存退出

git add [文件名]

git commit -m "日志信息"?注意此時commit不能帶文件名

need-to-insert-img

五、Git基本原理

5.1 哈希

need-to-insert-img

哈希是一個系列的加密算法侦锯,各個不同的哈希算法雖然加密強度不同驼鞭,但是有以下 幾個共同點:

① 不管輸入數(shù)據(jù)的數(shù)據(jù)量有多大,輸入同一個哈希算法尺碰,得到的加密結(jié)果長度固定挣棕。

② 哈希算法確定,輸入數(shù)據(jù)確定亲桥,輸出數(shù)據(jù)能夠保證不變

③ 哈希算法確定穴张,輸入數(shù)據(jù)有變化,輸出數(shù)據(jù)一定有變化两曼,而且通常變化很大

④ 哈希算法不可逆

Git 底層采用的是 SHA-1 算法皂甘。

哈希算法可以被用來驗證文件。原理如下圖所示:

need-to-insert-img

5.2 Git保存版本的機制

集中式版本控制工具的文件管理機制

以文件變更列表的方式存儲信息悼凑。這類系統(tǒng)將它們保存的信息看作是一組基本文件和每個文件隨時間逐步累積的差異偿枕。每次的上傳到服務(wù)器上文件,保存在服務(wù)器的部分都是這次和上次版本之間的差異户辫。如果要從服務(wù)器更新到本地也是需要把原始文件的版本和每次的差異 都合并起來渐夸,組成一個版本。優(yōu)點點是節(jié)約服務(wù)器的存儲空間渔欢,但缺點也很明顯墓塌,速度慢。

need-to-insert-img

Git的文件管理機制

Git 把數(shù)據(jù)看作是小型文件系統(tǒng)的一組快照。每次提交更新時 Git 都會對當(dāng)前的全部文件制作一個快照并保存這個快照的索引苫幢。為了高效访诱,如果文件沒有修改,Git 不再重新存儲該文件韩肝,而是只保留一個鏈接指向之前存儲的文件触菜。所以Git 的工作方式可以稱之為快照流。

need-to-insert-img

快照的意思就是哀峻,每次都是直接保存這個版本的所有文件涡相。

當(dāng)然,一般來說剩蟀,我們每次更改不會更改一個項目的所有文件催蝗,對于沒有更改的文件git在這里保存的其實是這個版本對于上一個版本的指針。上圖的虛線部分圈起來的相對之前版本沒改動育特,所以所在版本只保留這個文件的指針丙号。

Git文件管理機制細節(jié)

Git的”提交對象“

該提交對象還包含了作者的姓名和郵箱、提交時輸入的信息以及指向它的父對象的?指針?且预。

首次提交產(chǎn)生的提交對象沒有父對象槽袄,普通提交操作產(chǎn)生的提交對象有一個父對象烙无,而由多個分支合并產(chǎn)生的提交對象有多個父對象锋谐。

為了更加形象地說明,我們假設(shè)現(xiàn)在有一個工作目錄截酷,里面包含了三個將要被暫存和提交的文件涮拗。暫存操作會為每一個文件計算校驗和,然后會把當(dāng)前版本的文件快照保存到Git 倉庫中(Git 使用 blob 對象來保存它們)迂苛,最終將校驗和加入到暫存區(qū)域等待提交三热。

當(dāng)使用 git commit 進行提交操作時,Git 會先計算每一個子目錄的校驗和三幻,然后在Git 倉庫中這些校驗和保存為樹對象就漾。 隨后,Git 便會創(chuàng)建一個提交對象念搬,它除了包含上面提到的那些信息外抑堡,還包含指向這個樹對象(項目根目錄)的指針。如此一來朗徊,Git 就可以在需要的時候重現(xiàn)此次保存的快照首妖。

現(xiàn)在,Git 倉庫中有五個對象:三個 blob 對象(保存著文件快照)爷恳、一個樹對象(記錄著目錄結(jié)構(gòu)和 blob 對象索引)以及一個提交對象(包含著指向前述樹對象的指針和所有提交信息)有缆。

用圖形表示為如下方式

need-to-insert-img

提交對象及其父對象形成的鏈表結(jié)構(gòu)

對于B或C都是做些修改后再次提交,那么這次產(chǎn)生的提交對象會包含一個指向上次提交對象(父對象)的指針

need-to-insert-img

5.3 分支管理機制

need-to-insert-img

need-to-insert-img

need-to-insert-img

need-to-insert-img

need-to-insert-img

六、遠程庫實操

基本命令

git remote-v #查看當(dāng)前所有遠程庫git remote add[別名][遠程庫地址]#給遠程庫起別名棚壁,方便以后使用git push[遠程庫別名][本地分支名]#推送本地分支到遠程庫杯矩,如果遠程沒有和本地相對應(yīng)的分支,則創(chuàng)建同名分支git clone[遠程地址]#等同于完成了代碼的下載以及初始化本地庫和創(chuàng)建了遠程庫origin的別名git fetch[遠程庫別名][遠程庫分支名]#拉取遠程庫代碼git merge[遠程庫別名/遠程庫分支名]#將遠程代碼合并到本地分支git pull[遠程庫別名][遠程分支名]#相當(dāng)于 fetch和merge的合并操作

Gitlab實操 省略一萬字...

七灌曙、Git工作流

7.1 概念

在項目開發(fā)過程中使用 Git 的方式

7.2 分類

GitFlow 工作流

Gitflow 工作流通過為功能開發(fā)菊碟、發(fā)布準備和維護設(shè)立了獨立的分支,讓發(fā)布迭代過程更流暢在刺。嚴格的分支模型也為大型項目提供了一些非常必要的結(jié)構(gòu)逆害。

need-to-insert-img

7.3 GitFlow工作流詳解

主干分支 master

主要負責(zé)管理正在運行的生產(chǎn)環(huán)境代碼。永遠保持與正在運行的生產(chǎn)環(huán)境 完全一致蚣驼。

開發(fā)分支 develop

主要負責(zé)管理正在開發(fā)過程中的代碼魄幕。一般情況下應(yīng)該是最新的代碼。

bug修復(fù)分支 hotfix

主要負責(zé)管理生產(chǎn)環(huán)境下出現(xiàn)的緊急修復(fù)的代碼颖杏。從主干分支分出纯陨,修理完畢并測試上線后,并回主干分支留储。并回后翼抠,視情況可以刪除該分支。

準生產(chǎn)分支(預(yù)發(fā)布分支) release

較大的版本上線前获讳,會從開發(fā)分支中分出準生產(chǎn)分支阴颖,進行最后階段的集 成測試。該版本上線后丐膝,會合并到主干分支量愧。生產(chǎn)環(huán)境運行一段階段較穩(wěn)定后 可以視情況刪除。

功能分支 feature

為了不影響較短周期的開發(fā)工作帅矗,一般把中長期開發(fā)模塊偎肃,會從開發(fā)分支 中獨立出來。 開發(fā)完成后會合并到開發(fā)分支浑此。

need-to-insert-img

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末累颂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凛俱,更是在濱河造成了極大的恐慌紊馏,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件最冰,死亡現(xiàn)場離奇詭異瘦棋,居然都是意外死亡,警方通過查閱死者的電腦和手機暖哨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門赌朋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凰狞,“玉大人,你說我怎么就攤上這事沛慢∩娜簦” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵团甲,是天一觀的道長逾冬。 經(jīng)常有香客問我,道長躺苦,這世上最難降的妖魔是什么身腻? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮匹厘,結(jié)果婚禮上嘀趟,老公的妹妹穿的比我還像新娘。我一直安慰自己愈诚,他們只是感情好她按,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炕柔,像睡著了一般酌泰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上匕累,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天陵刹,我揣著相機與錄音,去河邊找鬼哩罪。 笑死距帅,一個胖子當(dāng)著我的面吹牛片排,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谐腰,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼显设,長吁一口氣:“原來是場噩夢啊……” “哼框弛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捕捂,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瑟枫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后指攒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慷妙,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年允悦,在試婚紗的時候發(fā)現(xiàn)自己被綠了膝擂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖架馋,靈堂內(nèi)的尸體忽然破棺而出狞山,到底是詐尸還是另有隱情,我是刑警寧澤叉寂,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布萍启,位于F島的核電站,受9級特大地震影響屏鳍,放射性物質(zhì)發(fā)生泄漏勘纯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一钓瞭、第九天 我趴在偏房一處隱蔽的房頂上張望屡律。 院中可真熱鬧,春花似錦降淮、人聲如沸超埋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霍殴。三九已至,卻和暖如春系吩,著一層夾襖步出監(jiān)牢的瞬間来庭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工穿挨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留月弛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓科盛,卻偏偏與公主長得像帽衙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贞绵,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 前言 本文主要介紹Git的原理以及常用的命令厉萝。并分享一下在多人協(xié)同開發(fā)中常見的如代碼沖突、修改被覆蓋榨崩、暫存修改撤換...
    lzy_blue閱讀 383評論 0 0
  • 參考 git官網(wǎng)[http://git-scm.com/book/en/v2/Getting-Started-Wh...
    賀賀v5閱讀 483評論 0 0
  • 源代碼管理工具-GIT 一. git 概述 1. git 簡介? 什么是git? > git是一款開源的分布式版本...
    zhanming閱讀 326評論 0 2
  • ssh方式git clone失敗 報錯提示 報錯原因 SSH key失效 或者 自己沒有權(quán)限[https://li...
    淚滴在琴上閱讀 1,345評論 0 16
  • Git學(xué)習(xí) 管理本地倉庫 此學(xué)習(xí)將會使用git軟件進行編輯谴垫,即git-bash.exe文件,這里主要使用命令行進行...
    核動力挖掘機閱讀 236評論 0 0