GIT基礎(chǔ)培訓(xùn)教程_第1頁(yè)
GIT基礎(chǔ)培訓(xùn)教程_第2頁(yè)
GIT基礎(chǔ)培訓(xùn)教程_第3頁(yè)
GIT基礎(chǔ)培訓(xùn)教程_第4頁(yè)
GIT基礎(chǔ)培訓(xùn)教程_第5頁(yè)
已閱讀5頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

GIT基礎(chǔ)教程1、初識(shí)Git

Git是一款分布式版本控制系統(tǒng),有別于CVS和SVN等集中式版本控制系統(tǒng),Git可以讓研發(fā)團(tuán)隊(duì)更加高效的協(xié)同工作,從而提高生產(chǎn)率。使用Git,開發(fā)人員的工作不會(huì)因?yàn)樨毞Φ脑庥鎏峤粵_突而中斷,管理人員也無(wú)需為數(shù)據(jù)備份而擔(dān)心。經(jīng)過(guò)Linux這樣龐大的項(xiàng)目考研之后,Git被證明可以勝任任何規(guī)模的團(tuán)隊(duì)。2、Git初始化Git的初始化

首先通過(guò)下面命令查看git版本

#git–version

在開始使用Git之前,我們首先要用gitconfig命令設(shè)置一下git的配置變量,主要有以下幾步:

(1)配置姓名,這個(gè)將在提交的時(shí)候用到

#gitconfig--global“pang” #gitconfig--globaluser.emailpang@126.com

(2)設(shè)置一些別名,以便使用更為簡(jiǎn)潔的子命令

#gitconfig--globalalias.cicommit

(3)開啟顏色顯示

#gitconfig--globalcolor.uitrue

創(chuàng)建版本庫(kù)及第一次提交

首先建立一個(gè)新的工作目錄,并在這個(gè)目錄下建立版本庫(kù) #cd/path/to/my/workspace #mkdirdemo #cddemo #gitinit InitializedemptyGitrepositoryin/path/to/../demo/.git

從上面初始化的輸出信息來(lái)看,工作區(qū)創(chuàng)建了隱藏目錄.git #ls–aF ./../.git/

這個(gè)隱藏的.git目錄就是Git版本庫(kù)下面向工作區(qū)添加文件 #echo“Hello.”>welcome.txt

將這個(gè)文件添加到版本庫(kù) #gitaddwelcome.txt

這里還沒(méi)有完,需要提交一次才能進(jìn)入版本庫(kù) #gitcommit–m“initialized”

提交必須有提交說(shuō)明,-m參數(shù)可以直接給出提交說(shuō)明

為什么會(huì)有.git目錄

在非工作區(qū)執(zhí)行g(shù)it命令會(huì)因?yàn)檎也坏?git目錄而報(bào)錯(cuò) #cd/path/to/my/workspace #gitstatus

在工作區(qū)建立a/b/c目錄并進(jìn)入 #mkdir–pa/b/c #cda/b/c

顯示版本庫(kù)目錄 #gitrev-parse--git-dir

顯示工作區(qū)根目錄 #gitrev-parse--show-toplevel

顯示工作區(qū)間根目錄的相對(duì)目錄 #gitrev-parse--show-prefix

顯示當(dāng)前目錄到工作區(qū)的深度

#gitrev-parse--show-cdup

gitconfig命令的參數(shù)區(qū)別

執(zhí)行下面命令,將打開.git/config文件進(jìn)行編輯 #gitconfig-e

執(zhí)行下面命令,將打開/home/git/.gitconfig文件進(jìn)行編輯 #gitconfig-e--global

執(zhí)行下面命令,將打開/etc/gitconfig系統(tǒng)級(jí)配置文件進(jìn)行編輯 #gitconfig-e--system

以上三個(gè)配置文件分別是Git版本庫(kù)級(jí)別的配置文件、全局配置文件(用戶主目錄下)和系統(tǒng)級(jí)配置文件(/etc目錄下)。其優(yōu)先級(jí)別依次降低。

誰(shuí)在提交?

在使用Git之前我們?cè)O(shè)置了全局變量,如果不設(shè)置會(huì)出現(xiàn)什么后果呢

執(zhí)行下面命令,刪除全局變量中的和user.email #gitconfig--unset--global #gitconfig--unset--globaluser.email

這樣一來(lái),關(guān)于用戶的設(shè)置就被清空了,嘗試一下提交 #gitcommit--allow-empty-m“whodoescommit?”

由于沒(méi)有設(shè)置用戶,會(huì)給出一段警告。查看下提交記錄 #gitlog

可以看出Git對(duì)于用戶姓名進(jìn)行了大膽猜測(cè),猜測(cè)用戶為當(dāng)前終端登錄用戶。

為了保證提交者信息的準(zhǔn)確性,需要對(duì)提交恢復(fù)用戶設(shè)置

#gitconfig--global“pang” #gitconfig--globaluser.emailpang@126.com #gitcommit--amend--allow-empty--reset-author

其中--amend參數(shù)表示是修補(bǔ)提交,對(duì)上一次提交進(jìn)行修補(bǔ),而不會(huì)產(chǎn)生新的提交。

小結(jié)了解了Git如何初始化版本庫(kù)及進(jìn)行提交熟悉Git配置變量的設(shè)置3、Git暫存區(qū)修改能直接提交嗎?

首先更改welcome.txt文件,在文件后面追加一行。 #echo“Nicetomeetyou.”>>welcome.txt

比較本地與版本庫(kù)中得差異 #gitdiff

可以看到文件修改了,那么提交 #gitcommit-m“Appendaniceline.”

沒(méi)有成功,查看提交日志,也沒(méi)用新的記錄 #gitlog #gitstatus-s Mwelcom.txt

添加下修改文件 #gitaddwelcome.txt #gitdiff沒(méi)有差別,難道是被提交了?在看一下當(dāng)前狀態(tài): #gitstatus-s Mwelcome.txt

兩次狀態(tài)輸出有細(xì)微的差別,雖然都是M(modified)標(biāo)示,但是位置不一樣。gitadd執(zhí)行前,M位于第二列,執(zhí)行后位于第一列。第一列表示版本庫(kù)與暫存區(qū)的比較,第二列表示工作區(qū)與暫存區(qū)的區(qū)別。通過(guò)下面命令進(jìn)一步體會(huì): #echo“Byebye.”>>welcome.txt #gitstatus-s MMwelcome.txt #gitcommit-m“whichwersioncheckedin?” #gitstatus-s Mwelcome.txt

保存下我們的工作,后面的進(jìn)度恢復(fù)會(huì)用到。 #gitstash

理解Git暫存區(qū)masterobjectsaddcheckoutcommitresetHEAD圖中左側(cè)是工作區(qū),右側(cè)是版本庫(kù)。版本庫(kù)包括暫存區(qū),master分支,對(duì)象庫(kù)等。HEAD實(shí)際上是指向分支的一個(gè)游標(biāo)。圖中objects標(biāo)示的區(qū)域是Git的對(duì)象庫(kù)。當(dāng)對(duì)工作區(qū)的修改的文件執(zhí)行g(shù)itadd命令時(shí),暫存區(qū)的目錄會(huì)被更新,同時(shí)工作區(qū)的文件會(huì)被寫入到對(duì)象庫(kù)中。當(dāng)執(zhí)行提交(gitcommit)時(shí),master的目錄樹會(huì)根據(jù)暫存區(qū)做出相應(yīng)的更新。當(dāng)執(zhí)行g(shù)itresetHEAD命令時(shí),暫存區(qū)的目錄樹會(huì)被master分支的目錄樹所替換。當(dāng)執(zhí)行g(shù)itcheckout.命令時(shí),會(huì)用暫存區(qū)的文件置換工作區(qū)的文件。(危險(xiǎn))當(dāng)執(zhí)行g(shù)itcheckoutHEAD.命令時(shí),會(huì)用master分支的內(nèi)容替換暫存區(qū)和工作區(qū)文件。(危險(xiǎn))

目錄瀏覽查看HEAD目錄樹 #gitls-tree--lHEAD

瀏覽暫存區(qū)目錄樹,先清除工作區(qū)改動(dòng) #gitclean-fd #gitcheckout.

對(duì)工作區(qū)做以下修改 #echo“Bye-bye.”>>welcome.txt #mikdir-pa/b/c #echo“Hello.”>a/b/c/hello.txt #gitadd. #echo“Bye-bye.”>>a/b/chello.txt #gitstatus-s #find.-path./.git-prune-o-type-printf“%-20p\t%s\n”GitDiff魔法masterobjectsGitdiffgitdiff--cachedHEADgitdiffHEAD小結(jié)了解Git的工作原理。了解status的用法。知道工作區(qū),暫存區(qū)之間的區(qū)別。學(xué)會(huì)diff不同的用法。4、Git的對(duì)象Git里見得最多的就是40位16進(jìn)制的ID號(hào)了,產(chǎn)看最近一次提交 #gitlog-1--pretty=raw

通過(guò)提交日志,我們發(fā)現(xiàn)一個(gè)提交里含有3個(gè)ID: commit:本次提交的唯一標(biāo)示 tree:

本次提交所對(duì)應(yīng)的目錄樹 parent:

本次提交的父提交

研究git對(duì)象ID的一個(gè)重要武器就是gitcat-file命令 #gitcat-[ID]查看ID類型 #gitcat-[ID]查看ID內(nèi)容

通過(guò)這個(gè)命令就可以對(duì)歷史提交進(jìn)行追蹤了。對(duì)象庫(kù)Ide6956Treef58dParenta0c6commitIda0c6Tree190dParent9e8acommitIdf58dBlobfd3c|_welcome.txt

TreeIdfd3cHello.Blob對(duì)象庫(kù)ID為什么不用順序數(shù)字Git的提交為什么不用順序數(shù)字而采用40位16進(jìn)制,這是因?yàn)镚it是一個(gè)分布式的版本控制系統(tǒng)。如果采用順序遞增的編號(hào),只能保證本地版本庫(kù)的唯一性,在分發(fā)的時(shí)候難免會(huì)造成沖突。所以采用40位ID可以保證編號(hào)的全球唯一。40位的ID如何訪問(wèn)?

對(duì)于人來(lái)說(shuō),要記住40位的16進(jìn)制數(shù)是很困難的,Git提供了很多方法可以方便的訪問(wèn)這些ID。1、不必寫全I(xiàn)D,只采用開頭部分(一般4位以上),只有不與現(xiàn)有其他ID沖突即可。2、使用HEAD代表最新提交,則 HEAD^表示HEAD的父提交 HEAD~5表示HEAD^^^^^小結(jié)了解Git對(duì)象的概念通過(guò)ID追蹤歷史提交5、Git重置我們知道,master相當(dāng)于一個(gè)分支游標(biāo),每次都指向最新的提交。但是既然是游標(biāo),就應(yīng)該既可以向上“游動(dòng)”,也可以向下“游動(dòng)”。

下面來(lái)體會(huì)下master游標(biāo)是怎么變化的 #cat.git/refs/heads/master//查看master指向 #touchnew-commit.txt #gitaddnew-commit.txt #gitcommit-m”doesmasterchange?” #cat.git/refs/heads/master

下面,我們重置下master游標(biāo) #gitreset--hardHEAD^ #cat.git/refs/heads/master

可以看到,不僅剛才提交的文件沒(méi)了,連提交日志中的記錄也不見了。使用重置命令很危險(xiǎn),會(huì)徹底丟掉歷史。那么,利用瀏覽提交歷史的方法找到丟棄的ID,在使用重置恢復(fù)歷史嗎?不可能!因?yàn)橹刂米屘峤粴v史也改變了。 #gitlog

發(fā)現(xiàn)提交日志中被丟棄的提交已經(jīng)不存在了。所以我們無(wú)法通過(guò)丟棄的ID來(lái)進(jìn)行恢復(fù)。

那么,如果不小心進(jìn)行了錯(cuò)誤的重置,應(yīng)該如何去挽救呢?

利用reflog挽救錯(cuò)誤重置如果沒(méi)有記下被丟棄的提交ID,想要重置回原來(lái)的提交很麻煩。幸好Git提供了挽救機(jī)制。日志目錄下有專門記錄分支變更的文件。

查看最近5次變更記錄。 #tail-5.git/logs/refs/heads/master #gitreflogshowmaster|head-5

根據(jù)reflog顯示,master@{2}是最后一次提交 #gitresetmaster@{2} #gitlog

可以發(fā)現(xiàn)提交歷史也都恢復(fù)了。深入了解gitreset命令#gitreset[-q][<commit>][--]<paths>#gitreset[--soft|--hard…][-q][<commit>]

上面兩個(gè)用法,<commit>是可選項(xiàng),省略則表示是HEAD指向的提交。

第一種用法包含路徑,不會(huì)重置引用,也不會(huì)改變工作區(qū),相當(dāng)于取消了之前執(zhí)行的gitadd命令。

第二種則會(huì)重置引用,根據(jù)不同的選項(xiàng)可以對(duì)暫存區(qū)和工作區(qū)進(jìn)行重置。 --hard:替換引用;置換暫存區(qū);置換工作區(qū)。 --soft:替換引用。

小結(jié)熟悉reset重置的用法。學(xué)會(huì)利用reflog恢復(fù)錯(cuò)誤重置。6、Git檢出重置命令可以更改master的游標(biāo)指向,如何能夠改變HEAD的指向呢?HEAD可以理解為頭指針,是當(dāng)前工作區(qū)的“基礎(chǔ)版本”,當(dāng)執(zhí)行提交的時(shí)候,HEAD所指向的提交將作為新提交的父提交。下面查看下當(dāng)前HEAD的指向。 #cat.git/HEAD #gitbranch-v

用gitcheckout命令檢出當(dāng)前提交的父提交。 #gitcheckout[ID]^

查看下現(xiàn)在HEAD和master所對(duì)應(yīng)的提交ID。 #gitrev-parseHEADmaster

可以看出當(dāng)前頭指針和master已經(jīng)指向了不同的提交。即當(dāng)前是處于“分離頭指針”狀態(tài)?,F(xiàn)在再做一次提交,HEAD會(huì)怎么變化呢? #touchdetached-commit.txt #gitadddetached-commit.txt #gitcommit-m“commitindetachedHEADmode.” #cat.git/HEAD #gitlog--graph--pretty=oneline

可以看到HEAD指向了最新的提交,并且是建立在之前指向的提交之上的。下面切換到master分支上。 #gitcheckoutmaster

切換之后,HEAD重新指向了分支,而不是斷頭模式。但是剛才提交的日志也不見了。 #gitlog--graph--pretty=noeline

挽救分離頭指針,因?yàn)閯偛诺奶峤晃幢蝗魏畏种ё粉櫟?,因此不能保證這個(gè)提交會(huì)永遠(yuǎn)存在于對(duì)象庫(kù)中。 #gitmerge[ID]

深入理解gitcheckout命令#gitcheckout[-q][<commit>][--]<paths>#gitcheckout[<branch>]#gitcheckout[-m][[-b|--orphan]<new_branch>][<start_point>]

第一種用法<commit>是可選項(xiàng),如果省略則相當(dāng)于從暫存區(qū)進(jìn)行檢出。和重置命令不同,重置一般用于重置暫存區(qū),而檢出主要是覆蓋工作區(qū)。這種用法不會(huì)改變HEAD,主要用于指定版本的文件覆蓋工作區(qū)的對(duì)應(yīng)文件。

第二種用法則會(huì)改變頭指針。只要HEAD切換到一個(gè)分支上才會(huì)被跟蹤,否則就會(huì)處于分離頭指針狀態(tài)。第二種用法主要是用于切換分支的。

第三種用法主要是用來(lái)創(chuàng)建并切換到新的分支的。新的分支從<start_point>指定的提交開始。小結(jié)了解檢出的作用初步了解檢出的用法7、進(jìn)度恢復(fù)

我們?cè)跁捍鎱^(qū)一節(jié)保存了工作進(jìn)度Git可以通過(guò)下面命令恢復(fù)工作進(jìn)度。 #gitstashlist #gitstashpop

保存的進(jìn)度都恢復(fù)了,下面進(jìn)行提交。 #gitcommit-m“addnewleavewelcome.txt.”

后悔了,重置放棄最新的提交。 #gitreset--softHEAD^

添加welcome.txt,撤出a/b/c/hello.txt #gitaddwelcome.txt #gitresetHEADa/b/c/hello.txt

全部清除 #gitreset #gitcheckout--welcome.txt #gitclean-fdstash的用法: #echoByebye>>welcome.txt #echohello.>hack-1.txt #gitaddhack-1.txt #gitstashsave“hackedwelcome.txt,new”

工作區(qū)恢復(fù)了原貌,修改都不見了。 #echofix.>hack-2.txt #gitstash

現(xiàn)在有了兩個(gè)保存進(jìn)度,如何恢復(fù)第一個(gè)進(jìn)度 #gitstashapplystash@{1} #gitstashclear

小結(jié)學(xué)會(huì)stash的常用命令stashsavestashpopstashliststashapplystashclear8、刪除操作前面講的都是如何添加更改文件,下面是如何刪除文件。首先保存下當(dāng)前進(jìn)度。 #gitstash #gitstashapply

查看下當(dāng)前工作區(qū)都有哪些文件: #ls

直接在工作區(qū)刪除文件 #rm*.txt

通過(guò)下面命令,可以看到版本庫(kù)中文件還在 #gitls-files

結(jié)論:工作區(qū)刪除文件對(duì)版本庫(kù)無(wú)任何影響執(zhí)行g(shù)itrm命令刪除文件

根據(jù)上面的輸出的提示,我們應(yīng)該使用gitrm命令來(lái)刪除 #gitrmdetached-txthack-1.txtnew-commit.txtwelcome.txt

刪除動(dòng)作被添加到了暫存區(qū),這時(shí)候執(zhí)行提交動(dòng)作,就從真正意義上執(zhí)行了文件刪除。

#gitcommit-m“deletefilesusinggitrm.”

但是,文件只是在版本庫(kù)的最新提交中刪除了,在歷史提交中還在??梢酝ㄟ^(guò)下面的命令查看歷史版本的文件列表。 #gitls-files--with-tree=HEAD^

也可以查看歷史版本中刪除的文件內(nèi)容。 #gitcat-HEAD^:welcome.txtgitadd-u快速刪除

恢復(fù)下現(xiàn)場(chǎng) #gitreset--hartHEAD^ #gitstashapply-q #rm*.txt #gitadd-u #gitcommit-m“deletefilesusinggitadd-u.”恢復(fù)刪除的文件經(jīng)過(guò)上面的操作,工作區(qū)已經(jīng)沒(méi)有了任何的文件。上面說(shuō)過(guò)執(zhí)行刪除并提交,只是在提交中刪除了文件,在歷史版本中還存在。我們可以通過(guò)歷史版本來(lái)恢復(fù)文件。執(zhí)行下面命令可以恢復(fù)welcome.txt文件。 #gitcat-HEAD^:welcome.txt>welcome.txt或者 #gitshowHEAD^:welcome.txt>welcome.txt

當(dāng)然,使用checkout命令更為簡(jiǎn)潔實(shí)用。(思考)

文件已經(jīng)被恢復(fù)到文件區(qū)了,提交到版本庫(kù)就可以了。 #gitadd-A #gitcommit-m“restorefiles.”

通過(guò)再次添加刪除文件是最自然的恢復(fù)方法。其他版本庫(kù)如CVS也采用同樣的方法。但是其他系統(tǒng)卻會(huì)帶來(lái)嚴(yán)重的副作用--文件變更歷史被人為割裂,或者是存儲(chǔ)空間的浪費(fèi)。Git卻沒(méi)有這種副作用。聯(lián)想下Git對(duì)象庫(kù)小結(jié)學(xué)會(huì)刪除文件的方法學(xué)會(huì)恢復(fù)刪除的方法9、Git克隆雞蛋不要裝在一個(gè)籃子里版本庫(kù)A版本庫(kù)B.git.gitgitclone①②A①:PUSH②:PULLB①:PULL②:PUSHgitclone克隆版本庫(kù)主要有三種用法

#gitclone<repository><directory> #gitclone--bare<repository><directory.git> #gitclone--mirror<repository><directory.git>

方法1是將repository指向的版本庫(kù)克隆到directory目錄下。文件都會(huì)檢出,版本庫(kù)位于工作區(qū)下的.git目錄中。

方法2和3創(chuàng)建的克隆版本庫(kù)都不包含工作區(qū),直接就是版本庫(kù)的內(nèi)容,這樣的版本庫(kù)稱為裸版本庫(kù)。一般約定俗成裸版本庫(kù)的目錄以.git為后綴,所以上面示例中將克隆出來(lái)的裸版本庫(kù)目錄名寫作<directory.git>。

用法3區(qū)別于用法2之處在于用法3克隆出來(lái)的裸版本庫(kù)對(duì)上游版本庫(kù)進(jìn)行了注冊(cè),這樣可以在裸版本庫(kù)中使用gitfetch命令和上游版本庫(kù)進(jìn)行持續(xù)同步。

對(duì)等工作區(qū)

#gitclone/path/../demo/path/../demo-backup #cddemo #gitcommit--allow-empty-m“test1” #gitcommit--allow-empty-m“test2” #gitpush/path/../demo-backup

出錯(cuò)了,因?yàn)槟J(rèn)更新非裸版本庫(kù)的當(dāng)前分支是不被允許的,這將會(huì)導(dǎo)致暫存區(qū)和工作區(qū)與推送至版本庫(kù)的提交不一致。 #cddemo-backup #gitpull #gitlog--oneline-2

為什么執(zhí)行pull命令沒(méi)有像push那么長(zhǎng)的命令,因?yàn)樵趫?zhí)行clone命令時(shí),克隆出來(lái)的版本庫(kù)對(duì)原版本庫(kù)進(jìn)行了注冊(cè)。所以執(zhí)行拉回的時(shí)候無(wú)需設(shè)置上游版本庫(kù)的地址。

克隆裸版本庫(kù)

#gitclone--bare/path/../demo/path/../demo.git #cddemo #gitcommit--allow-empty-m“test3” #gitcommit--allow-empty-m“test4” #gitpush/path/../demo.git

這次推送成功了,因?yàn)槁惆姹編?kù)不存在工作區(qū),因此不會(huì)造成當(dāng)前分支與工作區(qū)的不同。

創(chuàng)建生成裸版本庫(kù)裸版本庫(kù)不但可以通過(guò)克隆方式創(chuàng)建,還可以通過(guò)gitinit命令以初始化的方式創(chuàng)建,之后的同步與上面大同小異。 #gitinit--bare/path../demo-init.git #cd/path../demo #gitpush/path../demo-init.git

推送出錯(cuò)了,這是由于創(chuàng)建的是裸版本庫(kù),沒(méi)有工作分支,所以無(wú)法推送。 #gitpush/path../demo-init.gitmaster

加上參數(shù)master,表示推送到master分支上,推送成功。 #gitcommit--allow-empty-m“test5” #gitcommit--allow-empty-m“test6” #git

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論