分布式相比于集中式的大區(qū)別在于開發(fā)者可以將代碼提交到本地,每個(gè)開發(fā)者通過克隆,在本地機(jī)器上拷貝一個(gè)完整的git倉庫。
在通化等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營(yíng)銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,通化網(wǎng)站建設(shè)費(fèi)用合理。下圖是經(jīng)典的git開發(fā)過程:
git的功能特性如下:
- 從服務(wù)器上克隆完整的git倉庫(包括代碼和版本信息)到單機(jī)上;
- 在自己的機(jī)器上根據(jù)不同的開發(fā)目的,創(chuàng)建分支,修改代碼;
- 在單機(jī)上自己創(chuàng)建的分支上提交代碼;
- 在單機(jī)上合并分支;
- 把服務(wù)器上最新版的代碼fetch下來,然后跟自己的主分支合并;
- 生成補(bǔ)丁,把補(bǔ)丁發(fā)送給主開發(fā)者;
關(guān)于git就介紹至此了,接下來將演示git的基本操作。
博文大綱:
- 一、安裝git
- 二、git庫的創(chuàng)建及介紹
- 三、git庫的基本操作
- 四、撤銷修改的操作
- 五、將本地git庫關(guān)聯(lián)到github
- 六、從github下載到本地git版本庫
git可以安裝在Windows、mac、Linux等操作系統(tǒng)之上,這里將寫下如何安裝在Linux系統(tǒng)之上,及其基本操作。
非常簡(jiǎn)單,就一條命令,如下:
[root@git ~]# yum -y install git
#最好使用一個(gè)空的目錄作為git庫
[root@git ~]# mkdir git
[root@git ~]# cd git
[root@git git]# git init #在空目錄下初始化為git庫
初始化空的 Git 版本庫于 /root/git/.git/
[root@git git]# ls -a #初始化成功后,會(huì)生成一個(gè).git的隱藏目錄
. .. .git
#生成的隱藏目錄是用來跟蹤管理版本庫的,不建議隨便修改其目錄中的文件,
#如果改亂了,就把git庫給破壞了。
在git版本庫中,有三個(gè)重要的概念:工作區(qū)、暫存區(qū)、版本庫。
- 工作區(qū):就是你的系統(tǒng)中可以看到的目錄;
- 暫存區(qū):一般存放在.git目錄下的index文件中,所以也會(huì)將暫存區(qū)叫做索引;
- 版本庫:工作區(qū)中的有一個(gè).git隱藏目錄,這個(gè)不算工作區(qū),而是git的版本庫。
下面這個(gè)圖展示了工作區(qū)、版本庫中的暫存區(qū)和版本庫之間的關(guān)系:
上圖中,左側(cè)為工作區(qū),右側(cè)為版本庫,在版本庫中標(biāo)記為“index”的區(qū)域就是暫存區(qū),標(biāo)記為“master”的是master分支代表的目錄樹。
當(dāng)對(duì)工作區(qū)修改(或新增)的文件執(zhí)行 "git add" 命令時(shí),暫存區(qū)的目錄樹被更新,同時(shí)工作區(qū)修改(或新增)的文件內(nèi)容被寫入到對(duì)象庫中的一個(gè)新的對(duì)象中,而該對(duì)象的ID被記錄在暫存區(qū)的文件索引中。
當(dāng)執(zhí)行提交操作(git commit)時(shí),暫存區(qū)的目錄樹寫到版本庫(對(duì)象庫)中,master 分支會(huì)做相應(yīng)的更新。即 master 指向的目錄樹就是提交時(shí)暫存區(qū)的目錄樹。
當(dāng)執(zhí)行 "git reset HEAD" 命令時(shí),暫存區(qū)的目錄樹會(huì)被重寫,被 master 分支指向的目錄樹所替換,但是工作區(qū)不受影響。
當(dāng)執(zhí)行 "git rm --cached
當(dāng)執(zhí)行 "git checkout ." 或者 "git checkout --
當(dāng)執(zhí)行 "git checkout HEAD ." 或者 "git checkout HEAD
#需要先自報(bào)家門,聲明姓名及郵箱
[root@git git]# git config --global user.name "ljz"
[root@git git]# git config --global user.email "ljz@ljz.com"
[root@git git]# echo "aaaa" > git.txt #創(chuàng)建一個(gè)文件用于測(cè)試
[root@git git]# git add git.txt #將測(cè)試文件添加到暫存區(qū)
[root@git git]# git commit -m "第一次提交"
#將暫存區(qū)的文件提交到版本庫,并且一定要使用“-m”選項(xiàng)注明提交說明
[master(根提交) eecbb4d] 第一次提交
1 file changed, 1 insertion(+)
create mode 100644 git.txt
[root@git git]# echo "bbbb" >> git.txt #修改測(cè)試文件內(nèi)容
[root@git git]# git add git.txt #添加到暫存區(qū)
[root@git git]# git status #查看git的狀態(tài)
# 位于分支 master
# 要提交的變更:
# (使用 "git reset HEAD ..." 撤出暫存區(qū))
#
# 修改: git.txt #可以看到提示git.txt已被修改
#新建幾個(gè)測(cè)試文件
[root@git git]# echo "第二個(gè)測(cè)試文件" > git2.txt
[root@git git]# echo "第三個(gè)測(cè)試文件" > git3.txt
[root@git git]# ls #確認(rèn)新建的測(cè)試文件
git2.txt git3.txt git.txt
[root@git git]# git add git2.txt git3.txt #一次提交多個(gè)文件
[root@git git]# git status #查看git的狀態(tài)
# 位于分支 master
# 要提交的變更:
# (使用 "git reset HEAD ..." 撤出暫存區(qū))
#
# 修改: git.txt
# 新文件: git2.txt
# 新文件: git3.txt
#上面是提示git被修改,并且添加了兩個(gè)新的文件
[root@git git]# git commit -m "提交多個(gè)版本" #將暫存區(qū)的多個(gè)版本進(jìn)行提交
[master 86c5044] 提交多個(gè)版本
3 files changed, 3 insertions(+)
create mode 100644 git2.txt
create mode 100644 git3.txt
[root@git git]# git log --pretty=oneline #查看提交記錄,一行對(duì)應(yīng)一次提價(jià)記錄
86c50445d84591741812e0bd9088a1c67bf5e9ec 提交多個(gè)版本
eecbb4d9ff025681b4abe4ec2bdd90eeb0b66fd6 第一次提交
#至此,git庫下的所有文件都被提交了,那么,我現(xiàn)在將本地的所有文件都刪除,查看下git的狀態(tài)是什么
[root@git git]# rm git* #刪除當(dāng)前目錄下所有的測(cè)試文件
[root@git git]# git status #查看git的狀態(tài)
# 位于分支 master
# 尚未暫存以備提交的變更:
# (使用 "git add/rm ..." 更新要提交的內(nèi)容)
# (使用 "git checkout -- ..." 丟棄工作區(qū)的改動(dòng))
#
# 刪除: git.txt
# 刪除: git2.txt
# 刪除: git3.txt
#上述提示了刪除了三個(gè)文件,下面說的是修改了但是尚未提交
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
#那么,我現(xiàn)在若想恢復(fù)刪除的文件呢?只需進(jìn)行以下操作:
[root@git git]# git reflog --pretty=oneline #查看提交記錄
86c5044 HEAD@{0}: commit: 提交多個(gè)版本
eecbb4d HEAD@{1}: commit (initial): 第一次提交
[root@git git]# ls #確定當(dāng)前目錄下沒有任何測(cè)試文件
[root@git git]# git reset --hard 86c5044 #版本回滾到指定提交的文職
HEAD 現(xiàn)在位于 86c5044 提交多個(gè)版本
[root@git git]# ls #再次查看,被刪除的文件又回來了
git2.txt git3.txt git.txt
#那么,現(xiàn)在我想要恢復(fù)到第一次提交的時(shí)候呢?
[root@git git]# git reflog --pretty=oneline #同樣需要查看其日志記錄
86c5044 HEAD@{0}: commit: 提交多個(gè)版本
eecbb4d HEAD@{1}: commit (initial): 第一次提交
[root@git git]# git reset --hard HEAD@{1} #對(duì),在版本回滾時(shí),不但可以指定第一列的ID號(hào),也可以指定其HEAD字段
HEAD 現(xiàn)在位于 eecbb4d 第一次提交
[root@git git]# ls #再次查看當(dāng)前工作目錄下,恢復(fù)到了最初只有一個(gè)測(cè)試文件的狀態(tài)
git.txt
[root@git git]# git reset --hard 86c5044 #再次恢復(fù)到測(cè)試文件最多的時(shí)候
HEAD 現(xiàn)在位于 86c5044 提交多個(gè)版本
[root@git git]# ls
git2.txt git3.txt git.txt
關(guān)于撤銷修改,其實(shí)在上面已經(jīng)展示出來如何從版本庫中撤銷修改了,那么下面將介紹如何從暫存區(qū)、工作臺(tái)進(jìn)行撤銷修改
[root@git git]# cat git.txt #確定當(dāng)前文件內(nèi)容
aaaa
bbbb
[root@git git]# echo "cccc" >> git.txt #修改文件內(nèi)容
[root@git git]# cat git.txt #查看修改后的文件
aaaa
bbbb
cccc
[root@git git]# git checkout -- git.txt #對(duì)工作臺(tái)執(zhí)行撤銷操作
[root@git git]# cat git.txt #確認(rèn)新添加的內(nèi)容被撤銷
aaaa
bbbb
[root@git git]# echo "abcd" > ljz.txt #創(chuàng)建新的測(cè)試文件
[root@git git]# git add ljz.txt #添加至?xí)捍鎱^(qū)
[root@git git]# git status #查看git狀態(tài)
# 位于分支 master
# 要提交的變更:
# (使用 "git reset HEAD ..." 撤出暫存區(qū))
#
# 新文件: ljz.txt #提示有新添加的文件
[root@git git]# git reset HEAD ljz.txt #執(zhí)行撤銷操作
[root@git git]# git status #再次查看git的狀態(tài),提示提交為空,還提示使用git add建立提交
# 位于分支 master
# 未跟蹤的文件:
# (使用 "git add ..." 以包含要提交的內(nèi)容)
#
# ljz.txt
提交為空,但是存在尚未跟蹤的文件(使用 "git add" 建立跟蹤)
[root@git git]# rm git.txt #刪除本地文件
[root@git git]# git rm git.txt #使用git執(zhí)行rm命令
[root@git git]# git commit -m "刪除文件" #提交到版本庫,
至此,都只是git版本庫的基本操作,那么?我們?nèi)绾螌⑽覀兊膅it
庫關(guān)聯(lián)到github上呢?下面是兩種情況下的關(guān)聯(lián)方法。
1、首先需要先創(chuàng)建一個(gè)空的github庫。
自行注冊(cè)github賬號(hào)并登陸,比較簡(jiǎn)單,這里就不寫了。
在主機(jī)上生成秘鑰對(duì),并上傳至github上:
[root@git git]# ssh-keygen -t rsa -C "916551516@qq.com" #執(zhí)行此命令后,一路按回車即可,“-C”后面是自己的郵箱地址
[root@git git]# cat ~/.ssh/id_rsa.pub #查看生成的公鑰,并復(fù)制其內(nèi)容
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5ubfu4/UxpX/1aW3bPLUBihphbC0sUkmM0NusofTEW2rQ6Fy4+tRb2qvDLm6XXXBIzDNcr16qFGE95OFmhGF+M+TjjjvVyMFQu+qLjyfRceiYlLZ6II0ZY5+agQJSYlFYYyvHhJHFo69S07jx5A7Q2doLpW+O0i2MLdY0CyKvlRgE9Onoj+8TM9ZBfJdtoAGQdkH353NeiFJOJi71+KQgvvzpRiRiRjTv4mLGuWdeAAhxG1+rGnyotQktiobHGHKPLpm9w/PT95tuKQ/d8zH4BqsDkWuzIMy5E0vhELpEHFBilx6YuPL2h2N8YSFARxyz4zRPAQoCeATdgA+nD68z 916551516@qq.com
在github上操作如下,以便添加公鑰:
輸入github賬號(hào)的密碼進(jìn)行驗(yàn)證:
確定添加成功:
2、
回到新創(chuàng)建的庫:
[root@git git]# ls -a #當(dāng)前的工作目錄必須是一個(gè)git庫
. .. .git git2.txt git3.txt git.txt ljz.txt
[root@git git]# git remote add origin git@github.com:lvjianzhao/test01.git #執(zhí)行提示的第一條命令
[root@git git]# git push -u origin master #進(jìn)行提交,由于是第一次上傳,所以需要使用“-u”選項(xiàng)
#如果執(zhí)行上述命令后,提示需要輸入“yes”,輸入即可
Counting objects: 8, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (8/8), 563 bytes | 0 bytes/s, done.
Total 8 (delta 0), reused 0 (delta 0)
To git@github.com:lvjianzhao/test01.git
* [new branch] master -> master
分支 master 設(shè)置為跟蹤來自 origin 的遠(yuǎn)程分支 master。
#提示已經(jīng)提交成功了。
至此,F(xiàn)5刷新我們github上剛剛創(chuàng)建的庫的頁面,就可以看到我們工作臺(tái)目錄下的那些文件了,如下:
上述已經(jīng)演示了如何將本地的git版本庫關(guān)聯(lián)到遠(yuǎn)端的github的空庫。
那么這里將展示如何將github已存在的庫(庫中有內(nèi)容)下載到本地。
由于在第五步操作時(shí),已經(jīng)設(shè)置好了郵箱及ssh秘鑰等操作,所以這里就可以省略這兩部操作了,如果沒有配置郵箱及ssh秘鑰,可參考第五個(gè)段落進(jìn)行配置。
這里就將第五步創(chuàng)建的github庫下載到本地。
找到github創(chuàng)建的庫,如下:
[root@git /]# git clone git@github.com:lvjianzhao/test01.git
#執(zhí)行命令“git clone”,后面的路徑就是我們復(fù)制的github上的ssh路徑
正克隆到 'test01'...
Warning: Permanently added the RSA host key for IP address '13.229.188.59' to the list of known hosts.
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 8 (delta 0), reused 8 (delta 0), pack-reused 0
接收對(duì)象中: 100% (8/8), done.
[root@git /]# cd test01/ #克隆成功后,就會(huì)在當(dāng)前目錄下生成test01這個(gè)庫
[root@git test01]# ls #并且內(nèi)容就是我們github上的內(nèi)容
git2.txt git3.txt git.txt
[root@git test01]# echo "clone success..." > succed #創(chuàng)建新的測(cè)試文件
[root@git test01]# ls #如下:
git2.txt git3.txt git.txt succed
[root@git test01]# git add succed #將新創(chuàng)建的文件添加到暫存區(qū)
[root@git test01]# git commit -m "clone succes" #提交到版本庫
[master e62bdba] clone succes
1 file changed, 1 insertion(+)
create mode 100644 succed
[root@git test01]# git push origin master #將本地文件推送到github
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 272 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To git@github.com:lvjianzhao/test01.git
86c5044..e62bdba master -> master
[root@git test01]# git remote #查看遠(yuǎn)端版本庫的信息
origin
回到github上,刷新庫的頁面,即可看到新提交的文件,如下:
———————— 本文至此結(jié)束,感謝閱讀 ————————
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。