一,企業高效持續集成平臺場景介紹java
二,GIT分佈式版本控制系統linux
2.1 Git簡介git
2.1.1 git是什麼?github
2.1.2 什麼是版本控制呢?數據庫
本地版本控制系統:windows
集中化的版本控制系統:瀏覽器
事分兩面,有好有壞。這麼作最顯而易見的缺點是中央服務器的單點故障。若是宕機一小時,那麼在這一小時內,誰都沒法提交更新,也就沒法協同工做。要 是中央服務器的磁盤發生故障,碰巧沒作備份,或者備份不夠及時,就仍是會有丟失數據的風險。最壞的狀況是完全丟失整個項目的全部歷史更改記錄,而被客戶端 提取出來的某些快照數據除外,但這樣的話依然是個問題,你不能保證全部的數據都已經有人事先完整提取出來過。本地版本控制系統也存在相似問題,只要整個項 目的歷史記錄被保存在單一位置,就有丟失全部歷史更新記錄的風險。服務器
分佈式版本控制系統:網絡
2.1.3 git的優點在哪?編輯器
與同類型版本控制軟件:svn,cvs
SVN===>集中式版本控制系統
GIT===>分佈式版本控制系統
實際的例子:
2.2 Git的安裝
2.2.1 Windows安裝git客戶端
客戶端下載地址:https://www.git-scm.com/downloads
雙擊安裝包一路下一步便可。
在桌面上建立一個空目錄,右鍵點擊目錄
選擇Git Bash Here,進入git命令界面
到此windows的git客戶端就安裝好了
2.2.2 Linux利用yum安裝git客戶端
安裝環境查看
安裝git客戶端 yum安裝的git版本都是比較低的,想要高版本能夠源碼安裝。
Git全局配置
配置git使用用戶 配置git使用郵箱 語法高亮 查看全局配置
說明:
若是沒有提早設置Git的全局配置,那麼在第一次進行代碼提交的時候,會要求輸入使用者的郵箱和姓名
到此利用Yum安裝Linux操做系統的git客戶端就安裝好了
2.2.3 Linux源碼安裝git客戶端
若是咱們想要安裝最新版本的git,那麼就只能源碼包安裝了。
回退以前的yum安裝
源碼安裝git-2.9.5.tar.gz
源碼編譯須要連接git的命令庫
至此,利用源碼包安裝Linux操做系統的git客戶端就安裝好了
2.3 Git的命令入門
主機名 |
IP |
備註 |
Git01 |
10.1.1.128 |
git測試客戶端一 |
Git02 |
10.1.1.129 |
git測試客戶端二 |
2.3.1 git幫助文檔
輸入git查看
2.3.2 git init初始化GIT工做目錄
2.3.3 git add將變動添加進入暫存區
git status 查看git工做目錄的暫存區狀態
2.3.4 git commit將變動從暫存區提交到本地倉庫
2.3.5 建立github帳號,並建立我的github遠程倉庫
建立完github帳號後,咱們就能夠建立遠程倉庫了,以下圖所示:
2.3.6 git remote用於管理遠程倉庫
(1)git remote add
添加一個遠程倉庫的URL
命令格式:git remote add <倉庫的名字> <倉庫的URL>
2.3.7 git push將本地倉庫的變動推送到遠程倉庫的某個分支
命令格式:
git push -u <遠程倉庫的名字> <遠程倉庫的某一分支名字>
在Linux上推送本地倉庫變動到遠程倉庫的master分支
再次在瀏覽器進行訪問查看你的github地址
git remote -v 查看倉庫 前一列倉庫代號,本身起的,fetch拉取代碼,push推送
2.3.8 git clone克隆一個現有倉庫到本地
在另外一臺Git02上來模擬其餘客戶端進行對遠程倉庫克隆到本地倉庫的操做
初始化GIT工做目錄並將已有遠程倉庫克隆到本地
修改倉庫裏的文件內容,並提交變動到本地,推送變動到遠程倉庫
瀏覽器打開github查看變動提交狀況
2.3.9 git fetch 將遠程倉庫的變動拉取到本地倉庫
在Git01上
查看文件是否修改 沒有被修改
說明:
應用git fetch拉取到本地倉庫時,並不修改本地工做目錄中的代碼
若是要修改,那麼須要進行git merge變動合併
2.3.10 get checkout檢查工做目錄代碼與本地倉庫中的代碼的差別
檢查本地工做目錄與本地倉庫的差別
2.3.11 git merge 將遠程倉庫的變動,更新到本地工做目錄中
2.3.12 git pull 將遠程倉庫的變動拉取到本地倉庫,並更新本地工做目錄。
git pull ====> git fetch + git merge
在Git01上對文件進行改動,並推送到github遠程倉庫
在Git02上,拉取遠程倉庫的變動後直接合並進本地倉庫的master分支
沒有進行分佈式更新,一旦產生衝突是修改不了的,因此通常來講,開發都是分兩部分進行合併,除非判定沒有衝突就會用pull
2.3.13 git mv && git reset 暫存區文件的修改和撤銷
若是文件尚未被添加到暫存區,那麼Linux命令直接更名便可
變更文件已經添加到了暫存區
經過git mv 來給已經添加到暫存區的文件更名 本地文件同時更名了
經過git reset 來給已經添加到暫存區的文件撤銷掉
2.3.14 git rm 提交文件的刪除變動到暫存區
git add 能夠提交新增文件,修改文件的變動到暫存區;
git rm 則是提交刪除文件的變動到暫存區
修改還沒有加入提交(使用 "git add" 和/或 "git commit -a")
2.3.15 git diff 文件對比利器
git diff命令能夠將本地工做目錄中的文件與本地倉庫中的文件進行對比
2.3.16 git log 查看git提交歷史紀錄
查看最近兩條記錄
顯示最近一次提交的內容差別
顯示提交內容的修改概要
用一行顯示提交的歷史記錄
2.4 追根溯源-git log
2.4.1 Git還原歷史數據
Git服務程序中有一個叫作HEAD的版本指針,當用戶申請還原數據時,其實就是將HEAD指針指向到某個特定的提交版本,可是由於Git是分佈式版本控制系統,爲了不歷史記錄衝突,故使用了SHA-1計算出十六進制的哈西字符串來區分每一個提交版本,另外默認的HEAD版本指針會指向到最近的一次提交版本記錄,而上一個提交版本會叫HEAD^,上上一個版本則會叫作HEAD^^,固然通常會用HEAD~5來表示往上數第五個提交版本。
2.4.2 Git還原將來數據
當咱們回滾到歷史某個提交版本了之後;
咱們發現咱們已經沒有在那個版本以後的提交記錄了;
也就是說,咱們一旦還原了歷史版本,想要再次還原回去,那麼就回不去了。
如此一來,一旦錯了。咱們怎麼辦呢?
2.4.3 Git的標籤使用
前面回滾使用的是一串字符串,又長又難記
git tag <標籤> -m "描述"
每次提交均可以打一個標籤
2.5 gitignore文件
三,GIT分支管理
3.1 分支的結構概述
在實際的項目開發中,儘可能保證master分支穩定,僅用於發佈新版本,平時不要隨便直接修改裏面的數據文件。
那在哪幹活呢?幹活都在dev分支上。每一個人從dev分支建立本身我的分支,開發完合併到dev分支,最後dev分支合併到master分支。
因此,團隊的合做分支看起來會像下圖那樣。
分支管理工做流程:
在工做中,爲了保證master分支穩定,產品經理一般會從master分支上覆制一份代碼做爲dev分支;
而後成員開發A在從dev分支上覆制一份代碼叫作michael;
而後成員開發B再從dev分支上覆制一份代碼叫作bob;
平時開發A和開發B推送和拉取代碼都在本身的我的分支michael和bob上。
當一個新功能開發完畢,或者一個bug修改完畢之後。開發人員會先將代碼變動推送到本身的我的分支,而後再把我的分支的變動合併到dev分支裏;
當開發經理和測試人員拉取dev分支的代碼進行測試之後,若是沒問題,那麼開發經理會把dev分支的變動合併進master版本;
最後,因爲master版本新增了測試過的新功能,那麼就須要進行項目發佈或者代碼上線了。
3.2 GIT本地分支管理
3.2.1 本地分支的建立與切換
3.2.2 嘗試在linux本地分支進行代碼提交
linux分支比master分支新增一行數據
說明:
咱們發現切換分支之後,在linux分支修改過的文件數據,徹底還原成了master分支的文件內容
可是這裏存在一個問題,假如咱們在linux分支下,修改了文件,可是並未提交到本地倉庫linux分支,而只是放到了暫存區就切換到master分支的話,那麼會發生什麼呢?
說明:
當linux的本地分支倉庫和master本地分支倉庫的代碼不一樣時,若是你沒把變動從暫存區提交到分支倉庫,那麼默認是不能切換分支的。
可是,這裏還有一個問題,假如linux分支和master分支的本地倉庫的代碼相同,可是我仍舊沒把linux分支的變動提交到本地linux分支倉庫,那麼能直接切換master分支嗎?
說明:
若是本地分支倉庫間的代碼一致,那麼就算不把變動提交到本地分支倉庫,那麼也能夠切換分支
在工做中,爲了不意外,在切換分支前,務必要先將暫存區提交或者清空。
3.3 本地分支的合併與刪除
想把linux的工做成果合併到master分支上;
先切換到master分支
git merge linux : 合併linux分支到master
git branch -d linux :肯定合併完成後,能夠放心的刪除Linux分支。
3.3.1 自動合併本地分支
3.3.2 本地分支的刪除
假如linux分支的變動沒有合併到當前分支,那麼必須用-D參數強制刪除分支
[root@Git01 mycode]# git branch
linux
* master
[root@Git01 mycode]# git branch -d linux
error: 分支 'linux' 沒有徹底合併。
若是您確認要刪除它,執行 'git branch -D linux'。
[root@Git01 mycode]# git branch -D linux
已刪除分支 linux(曾爲 7212474)。
3.3.3 手動合併本地分支===>本地分支代碼衝突解決方案
當本地分支之間的同名目錄-同名文件-同一行內容不一樣時,在進行分支合併時就會產生衝突,故爲了解決代碼衝突,就須要進行人工手動合併;
在工做中,爲了儘可能避免衝突,通常開發人員之間儘量不負責相同的功能模塊,也就不至於同時修改同一個文件。
說明:
由上可知,本地linux分支的benet.txt文件和本地master分支的benet.txt文件的第五行代碼產生衝突。若是此時,咱們將本地linux分支的變動合併到本地master分支中,那麼就會產生代碼衝突。
合併本地linux分支
找出文件衝突內容,並修改。(此時衝突的benet.txt文件裏已經被標註了衝突內容)
到了這裏咱們只能手動排除,選擇保留後的內容,假如咱們要保留linux分支的內容,而後再將工做目錄中的變動提交便可人工解決代碼衝突,並完成分支合併
3.4 GIT遠程分支管理
3.4.1 將linux本地分支代碼和標籤推送到github遠程倉庫的linux分支
在Git01上,建立本地分支linux,複製master分支代碼。
將本地linux分支推送到遠程github的linux分支
瀏覽器訪問:https://github.com
建立本地標籤,並推送到github
瀏覽器訪問:https://github.com
3.4.2 從github遠程倉庫克隆一個linux分支到本地linux分支
(1)克隆遠程倉庫master分支後,經過checkout切換成遠程linux分支
在Git02上進行操做
說明:
若是clone時不用-b linux指定分支進行克隆那麼默認克隆的都是master分支;咱們能夠經過checkout切換遠程分支的方式對於已經下載下來的master工做目錄進行代碼替換。
(2)經過git clone -b linux URL直接指定遠程倉庫分支進行克隆
克隆一個遠程分支linux到本地工做目錄(-b linux指定分支)