1.Git
- 1.
Git
是一個免費開源的分布式版本控制系統(tǒng)- 2.
Git
易于學(xué)習(xí),占地面積小,性能極快,具有廉價的本地庫,方便的暫存區(qū)域和多個工作流分支等特性- 3.
Git
性能優(yōu)于Subversion(SVN)
,CVS
等版本控制工具
1.版本控制
- 1.版本控制是一種記錄工作內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)
- 2.版本控制最重要的是可記錄文件修改歷史記錄,從而讓用戶能夠查看歷史版本,方便版本切換
1.1.版本控制的原因
- 1.方便個人開發(fā)過渡到團(tuán)隊協(xié)作
![]()
1.2.版本控制工具
1.2.1.集中式版本控制工具
- 1.集中式版本控制工具有
Subversion
(SVN
),CVS
等- 2.集中式的版本控制工具都有一個單一的集中管理服務(wù)器,用于保存所有文件的修訂版本,協(xié)同工作的用戶都通過客戶端連到該臺服務(wù)器,取出最新的文件或提交更新
- 3.
優(yōu)點
:可以一定程度上查看項目中成員的進(jìn)度,管理員可以掌握每個成員的權(quán)限,并且管理一個集中化的版本控制系統(tǒng),比在各個客戶端上維護(hù)本地數(shù)據(jù)庫方便- 4.
缺點
:中央服務(wù)器會出現(xiàn)單點故障,如果服務(wù)器宕機(jī),則宕機(jī)期間無法協(xié)同工作從而影響進(jìn)度![]()
1.2.2.分布式版本控制工具
- 1.分布式版本控制工具有
Git
,Mercurial
等- 2.
Git
分布式版本控制工具中客戶端提取的不是最新版本的文件快照
,而是把遠(yuǎn)程代碼倉庫
完整地鏡像下來保存在本地庫
- 3.任何一處協(xié)同工作用的文件發(fā)生單點故障,都可以通過其他客戶端的本地倉庫進(jìn)行恢復(fù),因為每個客戶端的每一次提取操作,實際上都是一次對整個文件倉庫的完整備份
- 4.分布式的版本控制系統(tǒng)出現(xiàn)了之后,解決了集中式版本控制系統(tǒng)的缺陷(單點故障造成系統(tǒng)癱瘓)
- 1.服務(wù)器斷網(wǎng)的情況下也可以進(jìn)行開發(fā)(因為版本控制是在本地進(jìn)行的)
- 2.每個客戶端保存的也都是整個完整的項目(包含歷史記錄,更加安全)
![]()
2.工作機(jī)制
2.1.區(qū)域劃分
- 1.
Git
版本控制工具可以劃分為三個區(qū)域
- 1.
工作區(qū)(workspace)
:項目代碼存放本地磁盤的位置- 2.
暫存區(qū)(Index / Stage)
:臨時存放改動的代碼,本質(zhì)是一個文件(.git
目錄下的index
文件),保存即將提交到本地庫的信息- 3.
本地庫(local Repository)
:將暫存區(qū)中的代碼提交到本地庫,生成對應(yīng)的歷史版本(無法刪除),下個版本基于上一個版本,所以無法刪除中間的版本,其中HEAD
指向最新放入倉庫的版本- 2.遠(yuǎn)程庫(
Remote Repository
):遠(yuǎn)程倉庫,托管代碼的服務(wù)器,將本地庫代碼推送到遠(yuǎn)程庫(Push
)
2.2.工作流程
- 1.區(qū)域說明
- 1.左側(cè)為
工作區(qū)
- 2.右側(cè)為
版本庫
- 3.版本庫中標(biāo)記為
index
的區(qū)域是暫存區(qū)(stage/index
)- 4.版本庫中標(biāo)記為
master
的是master
分支所代表的目錄樹- 5.版本庫中標(biāo)記為
HEAD
的是指向master
分支的一個游標(biāo)
- 6.版本庫中標(biāo)記為
objects
的是Git
的對象庫,位于.git/objects
目錄下,其中包含創(chuàng)建的各種對象及內(nèi)容- 2.工作流程
- 1.當(dāng)對
工作區(qū)
中修改或新增的文件執(zhí)行git add
命令時,暫存區(qū)
的目錄樹被更新同時工作區(qū)
修改或新增的文件內(nèi)容被寫入到對象庫
中的一個新的對象中,而該對象的ID
被記錄在暫存區(qū)的文件索引
中- 2.當(dāng)對
暫存區(qū)
中的內(nèi)容執(zhí)行提交操作git commit
命令時,暫存區(qū)
的目錄樹寫到版本庫
中,master
分支會做相應(yīng)的更新,即master
指向的目錄樹就是提交時暫存區(qū)的目錄樹- 3.當(dāng)對暫存區(qū)中的內(nèi)容執(zhí)行回滾操作git reset HEAD 命令
- 3.當(dāng)對版本庫中的內(nèi)容進(jìn)行回滾 時,暫存區(qū)的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區(qū)不受影響。
- 4.當(dāng)執(zhí)行 git rm --cached 命令時,會直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變。
- 5.當(dāng)執(zhí)行 git checkout . 或者 git checkout – 命令時,會用暫存區(qū)全部或指定的文件替換工作區(qū)的文件。這個操作很危險,會清除工作區(qū)中未添加到暫存區(qū)中的改動。
- 6.當(dāng)執(zhí)行 git checkout HEAD . 或者 git checkout HEAD 命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件。這個命令也是極具危險性的,因為不但會清除工作區(qū)中未提交的改動,也會清除暫存區(qū)中未提交的改動
- 7.我們使用 git clone 從現(xiàn)有 Git 倉庫中拷貝項目
- git clone
- git clone
- repo:Git 倉庫。
- directory:本地目錄
- 比如,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,可以用下面的命令:
- $ git clone git://github.com/schacon/grit.git
- 執(zhí)行該命令后,會在當(dāng)前目錄下創(chuàng)建一個名為grit的目錄,其中包含一個 .git 的目錄,用于保存下載下來的所有版本記錄。
- 如果要自己定義要新建的項目目錄名稱,可以在上面的命令末尾指定新的名字:
- $ git clone git://github.com/schacon/grit.git mygrit
4.git忽略指定文件的提交
- 1.首先在git管理的文件夾根目錄下創(chuàng)建一個名為.gitignore的文件
- 2.然后將需要忽略的文件都放在這里
- 3.注意:這種方式對應(yīng)已經(jīng)提交到git上面的文件石無法奏效的
- 4.例如在.gitignore文件添加到git之前,.project文件已經(jīng)托管提交給git了,那后面在.gitignore這個文件里添加.project表示忽略這個文件也不行,git依然會提交
- 1.忽略某個已經(jīng)托管給git的文件,防止二次提交
- 2.這種情況適用于,每個人修改了項目的配置,但是這個是臨時的,只適用于自己本地的情況,不可提交給大家公用時,需要這么做
# 執(zhí)行命令將文件加入不提交隊列 git update-index --assume-unchanged 你的文件路徑 # 執(zhí)行命令將文件取消加入不提交隊列 git update-index --no-assume-unchanged 你的文件路徑
5.git提交忽略已加入版本庫的文件
- 1.git rm --cached file
- 當(dāng)我們需要刪除暫存區(qū)或分支上的文件,同時工作區(qū) ‘不需要’ 這個文件,可以使用 ‘git rm’
- 2.git rm file
- 3.git commit -m ‘delete file’
- 4.git push
- 當(dāng)我們需要刪除暫存區(qū)或分支上的文件,但是本地 ‘需要’ 這個文件,只是 ‘不希望加入版本控制’,可以使用 ‘git rm --cached’
- 1.git rm --cached file
- 2.git commit -m ‘delete remote file’
- 3.git push
3.3.基礎(chǔ)配置
- 1.
Git
的設(shè)置一般使用git config
命令
- 1.顯示當(dāng)前
Git
的配置信息:git config --list
![]()
- 2.編輯
Git
配置文件信息
- 1.
git config -e
: 針對當(dāng)前倉庫- 2.
git config -e --global
: 針對系統(tǒng)上所有倉庫$ git config --global user.name "runoob" #只對當(dāng)前倉庫有效 $ git config --global user.email test@runoob.com # 對所有倉庫都有效
3.代碼托管中心
- 1.代碼托管中心是基于網(wǎng)絡(luò)服務(wù)器的遠(yuǎn)程代碼倉庫,一般簡稱遠(yuǎn)程庫
- 2.局域網(wǎng):
GitLab
- 3.互聯(lián)網(wǎng):
GitHub
(外網(wǎng)),Gitee
碼云(國內(nèi)網(wǎng)址)
4.Git安裝步驟
- 1.注意需要安裝到非中文并且沒有空格的目錄下
- 2.安裝后查看
Git
版本git --version
![]()
5.Git命令
5.1.設(shè)置用戶簽名
- 1.
git config --global user.name 用戶名
:設(shè)置用戶簽名- 2.
git config --global user.email 郵箱
:設(shè)置用戶簽名![]()
- 3.驗證簽名文件(進(jìn)入電腦的本地用戶中,查看
.gitconfig
信息)![]()
- 4.用戶簽名的作用:區(qū)分不同成員身份,成員的簽名信息在每一個版本的提交信息中能夠看到,以此確認(rèn)本次提交的來源,
Git
首次安裝必須設(shè)置用戶簽名,否則無法提交代碼- 5.注意:該設(shè)置用戶簽名和登錄
GitHub
的賬號沒有任何關(guān)系
5.2.初始化本地庫
- 1.基本語法
git init
- 2.初始化:
Git
管理目錄獲取Git
目錄的管理權(quán),且初始化后會在初始化的目錄中生成隱藏的.git
文件夾,項目的快照數(shù)據(jù)
都存放在該文件夾中![]()
5.3.查看本地庫狀態(tài)
- 1.基本語法
git status
- 2.說明
- 1.
第一行
:本地庫在哪個分支- 2.
第二行
:還沒有提交內(nèi)容- 3.
第三行
:沒有內(nèi)容需要提交(紅色表示還沒有提交到暫存區(qū))![]()
5.4.添加暫存區(qū)
1.基本語法
git add . //將所有文件都添加到暫存區(qū) git add *.c //將后綴為.c的文件添加到暫存區(qū) git add 文件名 // 將指定文件添加到暫存區(qū)
2.將工作區(qū)中的文件添加到在暫存區(qū)(綠色表示已經(jīng)提交到暫存區(qū))
5.5.刪除暫存區(qū)中的文件
- 1.基本語法
git rm --cached 文件名
- 2.該刪除只是刪除了暫存區(qū)中文件,而沒有刪除工作區(qū)中的文件
![]()
5.6.提交本地庫
- 1.基本語法
git commit -m "日志信息" 文件名 //Linux系統(tǒng)中,commit信息使用單引號;Windows系統(tǒng)中,commit信息使用雙引號
- 2.將暫存區(qū)的文件提交到本地庫
![]()
- 3.noting to commit,working tree clean表示暫存區(qū)沒有東西需要提交
![]()
- 4.一行刪除,一行添加,表示修改,先刪除掉再添加進(jìn)去
![]()
5.7.歷史版本
- 1.基本語法
git reflog //查看版本信息 git log //查看版本詳細(xì)信息
![]()
5.7.1.查看歷史記錄
- 1.基本語法
git reflog
- 2.其中097e939和8d61690是7位簡短版本號
![]()
5.7.2.查看日志
- 1.基本語法
git log
- 2.其中包括完全版本號,作者信息,日期和日志信息
![]()
5.7.3版本穿梭
- 1.基本語法
git reset --hard 版本號
![]()
- 2.進(jìn)入Git版本目錄文件的HEAD文件,指針指向master,說明當(dāng)前是在master分支上
![]()
- 3.打開msater文件,該版本號指向第二個此修改歷史記錄,說明當(dāng)前是在master分支下的第二修改版本
![]()
- 5.注意:Git切換版本,底層其實是移動的HEAD指針
6.Git分支
6.1.分支原理
- 1.版本控制過程中,同時推進(jìn)多個任務(wù),可以創(chuàng)建每個任務(wù)的單獨分支
- 2.使用分支意味著程序員可以把自己的工作從開發(fā)主線上分離開來,開發(fā)自己分支的時候,不會影響主線分支的運行
- 3.分支底層其實也是指針的引用
![]()
- 4.master是主線分支,從master復(fù)制一份到feature-blue上進(jìn)行開發(fā),開發(fā)完后,提交到master
- 5.如果合并后導(dǎo)致問題,可以引入一個hot-fix(熱修分支),把有問題的代碼修改一下,如果沒有問題再合并到master
6.2.分支好處
- 1.同時并行推進(jìn)多個功能開發(fā),提高開發(fā)效率
- 2.各個分支在開發(fā)過程中,如果某一個分支開發(fā)失敗,不會對其他分支有任何影響,失敗的分支刪除重新開始即可
6.3.分支的操作
- 1.git branch -a:查看所有分支(本地和遠(yuǎn)程)
- 2.git branch:查看本地分支
- 3.git branch -r:查看遠(yuǎn)程分支
- 1.git branch -v:查看本地分支及最新的信息
- 2.git branch 分支名:創(chuàng)建分支
- 3.git chekout 分支名:切換分支
- 4.git merge 分支名:把指定的分支合并到當(dāng)前分支上
6.3.1.查看分支
- 1.基本語法
git branch -v
![]()
6.3.2.分支創(chuàng)建
- 1.基本語法
git branch 分支名
![]()
6.3.3.分支切換及修改
- 1.基本語法
git checkout 分支名
- 說明:
- 1.master,hot-fix其實都是指向具體版本記錄的指針
- 2.當(dāng)前所在的分支,其實是由HEAD決定的,所以創(chuàng)建分支的本質(zhì)就是多創(chuàng)建一個指針
- 3.HEAD如果指向master,那么現(xiàn)在就在master分支上
- 4.HEAD如果執(zhí)行hotfix,那么現(xiàn)在就在hotfix分支上
- 5.所以切換分支的本質(zhì)就是移動HEAD指針
![]()
6.3.4.分支合并
- 1.基本語法
git merge 分支名
![]()
6.3.5.代碼合并沖突解決
- 1.合并分支時,兩個分支在同一個文件的同一個位置有兩套完全不同的修改
- 2.Git無法替我們決定使用哪一個,必須人為決定新代碼內(nèi)容
- 3.如下:master分支和hot-fix分支同時修改了同一個文件的同一處代碼
- 4.查看狀態(tài)(檢測到有同一個文件的同一個位置有兩處不同修改,產(chǎn)生沖突both modified)
- 5.此時需要手動修改該沖突文件,然后提交到合并文件中
![]()
7.Git團(tuán)隊協(xié)作機(jī)制
1.團(tuán)隊內(nèi)協(xié)作
2.跨團(tuán)隊協(xié)作
3.fork(叉子):把所有代碼作為一個分支復(fù)制過來
8.Idea集成Git
9.GitGub
- 代碼托管中心
- 遠(yuǎn)程倉庫操作
- git remote -v:查看當(dāng)前所有遠(yuǎn)程地址別名
- git remote add 別名 遠(yuǎn)程地址:起別名
- git push 別名 分支:推送本地分支上的內(nèi)容到遠(yuǎn)程倉庫
- git clone 遠(yuǎn)程地址:將遠(yuǎn)程倉庫的內(nèi)容克隆到本地
- git pull 遠(yuǎn)程庫地址別名 遠(yuǎn)程分支名:將遠(yuǎn)程倉庫對于分支最新內(nèi)容拉下來后與當(dāng)前本地分支直接合并
1.創(chuàng)建遠(yuǎn)程倉庫別名
git remote -v 查看當(dāng)前所有遠(yuǎn)程地址別名 git remote add 別名 遠(yuǎn)程地址
2.推送本地分支到遠(yuǎn)程倉庫
git push 別名 分支
- 注意需要認(rèn)證,sign in即可
3.拉取遠(yuǎn)程庫到本地庫
- 遠(yuǎn)程拉取的會自動同步到本地庫,不需要再次提交到本地庫
克隆遠(yuǎn)程庫到本地庫Clone
- 克隆代碼是不需要登錄賬號的,因為創(chuàng)建時是公共的,讀權(quán)限是公共的
![]()
- clone會做如下操作
- 1.拉取代碼
- 2.初始化本地倉庫
- 3.創(chuàng)建別名
![]()
- 默認(rèn)別名是origin
![]()
- 注意需要刪除憑據(jù)管理
- 還需要對運行提交的人員進(jìn)行授權(quán)
跨團(tuán)隊協(xié)作
SSH免密登錄
文章來源:http://www.zghlxwxcb.cn/news/detail-482133.html
- 進(jìn)入該文件
![]()
- 公鑰和私鑰
- Idea集成GitHub
GitLab(基于局域網(wǎng)的代碼托管中心)
1.簡介
- 1.
GitLab
是一個倉庫管理系統(tǒng)的開源項目,其使用Git
作為代碼管理工具,并在此基礎(chǔ)上搭建起來web
服務(wù)- 2.
GitLab
和GitHub
一樣都屬于第三方基于Git
開發(fā)的作品,免費且開源(基于MIT
協(xié)議)- 3.
Github
可以在遠(yuǎn)程服務(wù)器上注冊用戶,任意提交代碼,添加SSHKey
等,而GitLab
可以部署到自己的服務(wù)器,數(shù)據(jù)等一切信息都掌握在自己手上,適合團(tuán)隊內(nèi)部協(xié)作開發(fā),簡單來說可以把GitLab
看作個人版的GitHub
2.安裝
- 1.參考
Linux軟件安裝
文章中Linux系統(tǒng)下安裝GitLab
3.創(chuàng)建組/用戶/項目
- 1.創(chuàng)建組
- 1.使用管理員
root
創(chuàng)建組,組里面可以創(chuàng)建多個項目分支- 2.將不同的開發(fā)添加到組里面并設(shè)置權(quán)限,不同的組就是公司不同的開發(fā)項目或者服務(wù)模塊
- 3.不同的組添加不同的開發(fā)即可實現(xiàn)對開發(fā)設(shè)置權(quán)限的管理
![]()
4.上傳代碼
文章來源地址http://www.zghlxwxcb.cn/news/detail-482133.html
Gitee碼云(國內(nèi)版本的GitGub)
- 碼云創(chuàng)建遠(yuǎn)程庫
- Idea集成Gitee碼云
- 碼云連接GitHub進(jìn)行代碼的復(fù)制和遷移
到了這里,關(guān)于版本控制-Git/SVN的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!