织梦CMS - 轻松建站从此开始!

罗索实验室

当前位置: 主页 > 基础技术 > UML,RUP,SCM >

怎么用clear case?

罗索客 发布于 2005-12-05 16:11 点击:次 
1ClearCase简介 ClearCase是一种配置管理工具,由Rational公司开发,是开发小组用来跟踪、管理软件开发过程各个工件的配置管理系统,ClearCase可以协助开发组织更好地管理软件开发进程。 ClearCase可以和Rational公司的其他软件紧密结合,例如UCM、ClearQuest等等。 Cle
TAG:

1ClearCase简介

ClearCase是一种配置管理工具,由Rational公司开发,是开发小组用来跟踪、管理软件开发过程各个工件的配置管理系统,ClearCase可以协助开发组织更好地管理软件开发进程。
ClearCase可以和Rational公司的其他软件紧密结合,例如UCM、ClearQuest等等。
ClearCase包括两套:ClearCaseLT和ClearCase(MultiSite)。前者可以用于在同一个局域网的开发小组,适合于中小型开发组织;ClearCase(MultiSite)则适应于分布于不同地理位置、不同局域网的开发小组,适合于大型的开发组织。
因此,一般的公司使用ClearCaseLT就足够了。
注:在后续文章中,经常将ClearCase简称为CC。

2ClearCaseLT工作原理

2.1系统组成

ClearCaseLT由ClearCaseLTServer和ClearCaseLTClient两个部分组成,其中服务器部分负责数据的集中管理;客户端部分则安装在各个需要使用ClearCase服务的机器上,以及主要开发人员的计算机上,属于典型的Client/Server结构。
ClearCaseLTServer采用VOB(VersionedObjectBase)存储配置管理数据,用户通过视图(VIEW)的方式获取VOB中存储的数据;UCM方式(参见“项目管理”部分)中,主要通过Stream(流)和Activity(活动)管理项目。

2.2VOB、VIEW

VOB是ClearCase存储软件系统各个组成元素的所有版本数据的仓库,一个版本是其中包含的特定文件或目录;VIEW则是通过一定的规则选择出来的各个元素特定版本的集合,用户通过VIEW存取、修改各个元素。
VOB和VIEW的关系如下图所示:
视图有两种类型:快照视图(snapshotview)及动态视图(dynamicview)。快照视图,是将CC服务器中的视图内容拷贝到开发人员的机器中,开发人员需要经常与服务器同步以保持数据的一致性,快照视图的好处在于开发人员不必一直通过网络与CC服务器保持连接;动态视图则是动态的将CC服务器中的内容同步到开发人员的机器中,这就要求开发人员一直保持与服务器的网络连接。一般来讲,由管理员决定选用哪种视图。
开发人员的开发涉及到两个视图:开发视图和集成视图。如果用户的名字为pat,参与的项目叫做test,那么两个视图缺省的名字为pat_test和pat_test_integration。
开发视图用于开发人员的开发过程,开发人员在开发视图中完成软件的开发、修改、提交等工作;集成视图的作用是存放开发人员完成的工作,使得开发人员可以通过该视图中的内容对其开发进行验证。

2.3CHECK-IN&CHECK-OUT

像其他配置管理工具一样,ClearCaseLT通过Check-in和Check-out的方式实现配置管理。Check-out一个文件时,ClearCase就会在视图中创建该文件的一个可编辑的版本,可以对该文件进行修改;Check-in一个文件时,ClearCase就在VOB中创建该文件的一个新的永久的版本,本地视图中对应的文件就会变成只读属性,无法修改。

2.4基线(Baseline)

在软件开发过程中,可以将各个元素的不同的版本组合成一个基线。通过基线表示软件项目开发达到了一定的要求,也可以说是里程碑。
项目管理员可以根据情况设置相应的基线,并随着项目的发展逐步设置新的基线。

2.5活动(Activity)

活动是开发者为完成、提交一项开发任务而创建的,是用来记录开发者创建或修改的文件集合(变化集合)的对象,例如下图所示的修改BUG。一个活动包含一个组件(Component)两个或多个元件(Element)的多个版本。
活动是UCM的基本对象。
通过活动,开发者可以一次完成对多个文件的操作,而不必一一处理,可以极大的提高工作效率。

2.6流(Stream)

流记录了在项目的私有工作区和共享工作区中的所有活动历史。流同时也定义了开发者通过私有工作区可以存取相应元件(例如文件foo.c)的哪个版本。

3ClearCaseLT设置

3.1安装ClearCaseLTServer

安装ClearCaseLTServer的步骤参见后续章节的ClearCase安装部分。
安装完毕ClearCaseLTServer以后,需要进行一些设置,主要是数据的准备、环境变量设置、权限设置等。

3.2生成基础VOB

ClearCase服务器安装完毕之后,会自动启动ClearCase服务器设置向导,设置初始的VOB。
也可在以后单独运行该向导。
如果需要额外的VOB数据,需要通过ClearCase管理控制台(AdministrationConsole)完成。

3.3设置环境变量

由于WindowsNT/2000中的BUG,ClearCase要正常完成授权管理,必须设置环境变量:
a.打开控制面板,选择“系统”进入“系统特性”设置
b.选择“高级”页面,点击“环境变量”按钮,进入环境变量设置。在“用户变量”一栏中点击“新建”按钮,输入变量名称:CLEARCASE_PRIMARY_GROUP变量值设置为将要访问ClearCase的用户组,例如CLEARCASE_USERS,表示CLEARCASE_USERS组可以访问ClearCase。(在安装ClearCaseClient的Windows2000/NT的机器里面也必须设置CLEARCASE_PRIMARY_GROUP,方法参照b;Windows98需要在autoexec.bat文件里面设置该环境变量)

3.4权限管理

权限管理在ClearCase的使用管理中十分重要,必须正确设置权限,才能正常使用ClearCase的各种功能。

3.4.1ClearCaseLT服务器端的权限设置

ClearCase通过Windows提供的用户组实现用户登录管理,因此必须设置相应的可以访问ClearCase功能的用户组。
以上一节提供的数据为例,ClearCase管理员需要在ClearCase服务器上生成一个用户组CLEARCASE_USERS,然后产生要使用ClearCase进行软件开发的用户账号,并且将这些账号指定到CLEARCASE_USERS组。
注意:指定的用户组名称必须和前面设置的环境变量CLEARCASE_PRIMARY_GROUP中的名字相同!

3.4.2ClearCase客户的设置

ClearCase客户端必须采用在服务器中提供的账户,登录到服务器域,才能使用ClearCase。

3.5其他事项

如果遇到问题,可以使用ClearCase提供的“RationalClearCaseLTDoctor”检查问题所在,然后根据它提供的方法解决问题。
该工具在ClearCaseLT服务器和客户端都有。

4ClearCaseClient安装、配置

4.1配置LicenseServer(许可服务器)

运行ClearCase安装程序,根据提示逐步进行,选择Client即可安装客户端、选择Server即可安装服务端。
待安装完成后,在目标机中执行“开始”菜单栏中的RationalLicenseKeyAdministrator。首先点击按钮“取消”,然后点击“Settings”,弹出对话框后,点击“licenseFiles”,做相应软件授权设定。
点击按钮“确定”配置成功。

4.2安装ClearCaseLT软件

要安装ClearCaseLTServer,则使用鼠标选中“RationalClearCaseLTServer”,然后点击按钮“下一步”,开始安装Server。
要安装ClearCaseLTClient,则使用鼠标选中“RationalClearCaseLTClient”,然后点击按钮“下一步”,开始安装Client软件。
根据提示,继续安装,就可以完成Server或者是Client的安装。

4.3ClientCase客户端配置

安装完毕客户端软件后,需要对客户端系统进行一些设置。
首先配置用户组,具体方法参照错误!未找到引用源。对于Windows98中设置环境变量的方法,请自行参考相应的文档。
其次设置网络属性,设置客户机的网络ID以及登陆的域。注意:需要在域中填写ClearCaseLTServer所在计算机的域名称。
在Windows2000中,通过控制面板打开“系统”功能,进入“网络标识”页面,点击“属性”按钮,设置计算机名称和所属的域。
用户每次登录计算机时,必须选择登录到域。输入在ClearCaseLTServer计算机上的用户名称和密码,这样才能使用ClearCase提供的服务。

5项目管理

使用CC进行项目管理,可以采用两种方式:BaseClearCase方式和UCM(UnifiedChangeManagement)方式。
BaseClearCase方式是基于文件的管理方式,UCM方式则主要采用Activity方式进行项目管理。与BaseClearCase方式相比,UCM方式具有以下一些优点:
UCM比BaseClearCase更加有效
UCM使用Stream方式管理项目,比BaseClearCase采用Branch方式管理项目的方式减少了配置工作
UCM方式对基线的管理更加自动化并提供了附加的执行操作
UCM方式使用活动管理项目,更加简单,并提供了与ClearQuest工具集成的功能
UCM方式更加有利于并行开发模式
下面对项目管理的讨论主要基于UCM方式。

5.1UCM基础

UCM方式采用一种迭代开发过程,开发人员在同一个UCM项目中工作。
项目管理者负责创建项目,维护项目公共区域。
一个项目包括了公共区域和多个私有工作区域,私有工作区域允许开发人员在活动上各自独立地进行工作。
工作过程如下:
项目管理者创建项目并且为项目中的元件确定初始基线集合;
开发人员通过创建私有工作区域、获取项目基线内容,加入该项目;
开发人员创建活动并且一次在一个活动上工作,与活动相关的文件集合称为变化集;
当开发人员完成活动,并且在其私有工作区对其工作进行了测试后,通过执行交付将其工作与开发组共享。交付操作将开发者私有区域中的工作合并到项目共享区域。
项目管理者在项目共享区域集成开发人员交付的工作。
项目管理者定期在项目共享域创建新的基线,用来集成开发人员的工作。
项目管理者执行快速验证测试,以保证新的基线可以正常工作。软件质量工程师将执行更多的扩展测试。
项目管理者定期在基线的质量和稳定性提高后调整极限的晋升级别(如:创建、测试、发布)以反映适当的里程碑。当新的基线经过了足够的测试,项目管理者可以将其指定为推荐基线。
开发者执行rebase操作来修改其私有工作区,使其包含新的推荐基线所确定的新版本集。
开发者继续如下的开发循环:基于活动进行开发工作、发布完成的活动、根据新基线修改其私有工作区域。
上述的任务可以分为两个循环:项目管理和开发

5.2创建项目

创建并配置一个项目,需要按照以下步骤进行:
创建存放项目信息的仓库
创建包含开发者使用的文件集组件
创建基线,以便开发人员可以确定开始其工作的文件版本
选择希望采取的开发策略
注意:创建新的项目应当以安装CC时使用的用户登录,其他用户才能正常使用该项目。
创建步骤:
a.使用安装了CCLTServer的计算机,运行其中的”RationalClearCaseLTAdministrationConsole”,加入保存新的项目数据所需要的VOB。
在此创建的VOB为TEST(具体是否创建VOB根据实际需求而定)。
b.打开运行RationalClearCase程序组中的“RationalClearCaseLTProjectExplorer”,进入项目浏览器:创建新的项目,根据提示操作,选择缺省的选项,一直到第三步:NewProject–Step3
c.添加项目使用的基线
点击“Add”按钮:
从组件列表中选择指定的组件(component),在此,选择刚刚创建的组件TEST,然后基线列表中出现了与组件相关的基线,选择一个基线,新的组件只有一个基线:xxxx_INITIAL,此处选择的是TEST_INITIAL基线。点击OK,这样,就为将要创建的项目选择了初始基线,点击下一步,进入步骤四。
d.设置可修改组件、调整项目策略
选择项目中需要修改的组件,在此选择TEST,实际应用中需要根据实际情况做出选择。
点击按钮“Policies”,调整项目的策略,具体的项目策略应当根据实际情况进行调整,一般是将”ForAlldeliveries”策略设置为Enabled.
e.继续选择缺省的配置,完成项目的创建。这样就生成了一个以缺省VOB为基础的新项目,新项目生成一个缺省的Integration_Stream:testa_Integration(这里假定刚刚生成的新项目名称为testa)

5.3通知开发组成员加入新的项目

创建了新项目后,需要通知、指导开发人员加入到新创建的项目中,具体的方法参见开发部分。

5.4管理项目

当通知开发人员加入到新项目开发中后,项目管理员的职责就是不断监视项目开发的进展情况,对不同开发者提交的源代码进行相应的管理、验证工作;在开发进展到一定程度后,为项目生成新的基线;指定新的推荐基线,直到项目开发完毕。(参见UCM基础部分)

5.4.1生成新的基线

管理员需要根据开发人员的开发情况,经常针对当前开发生成新的基线,以便更好的保存项目的开发过程。
操作过程如下:
(1)启动”RationalClearCaseLTProjectExplorer”,选择当前的项目,选中项目的集成视图,点击鼠标右键,选择”Properties”功能,修改属性:进入Lock页面,将状态改为Locked。锁定IntegrationStream,防止用户提交新的数据。
(2)选中项目的集成视图,点击鼠标右键,选择”makebaseline…”功能,在弹出的”makebaseline”对话框中,输入基线的名称、描述、类型,并且在”ViewContext”中选择对应的集成视图。上图中选择的是递增类型视图、以jim_testa_integration视图为基础。
(3)按照(1)中的方法,将IntegrationStream的状态改为Unlocked。

5.4.2管理基线

在项目开发过程中会产生许多的基线,管理员需要根据项目开发的进展来管理基线,例如改变基线的属性、提升基线等。
下面举例说明如何提升基线,这主要涉及到修改基线的属性。(可以在多个地方修改基线的属性,下面只是其中的一种)
a.进入IntegrationStream属性功能
b.选择基线
c.调整基线属性
在晋升(promotion)下拉框中,列出了缺省的晋升级别,根据当前项目的进展情况选择一个,然后点击“确定”按钮。
REJECTED表示该基线所代表的内容被拒绝接受;INITIAL表示该基线为初始基线;BUILT表示该基线的内容已经创建成应用程序;TESTED表示该基线已经被测试过;RELEASED表示该基线已经发布。

5.4.3指定推荐基线

在一个开发团队并行开发项目的过程中,很可能出现各个开发人员修改不同步的情况,有时会导致对同一个文件出现不同的版本,这就需要管理员对此进行跟踪管理,采用的主要手段是推荐基线。
采用推荐基线就是要求各个开发人员将他的开发视图中的内容与基线所代表的内容保持一致,以避免冲突。
对于各个开发人员提交的开发数据,管理人员进行审查、测试,创建基线,当提交的代码已经达到一定的稳定程度或者是一定规模后,管理人员可能认为需要让所有的开发人员与当前的代码保持一致,他就可以将认为可行的基线设置为推荐基线,然后要求各个开发人员rebase他们的开发视图与该推荐基线中的内容保持一致,然后再在此基础上继续开发。
在一个项目的开发过程中,管理员不断的生成新的基线,根据实际情况变动推荐基线,以保证各开发人员工作的一致性。
管理员可以根据实际情况添加、删除或者改变当前的基线。
完成设置新的推荐基线后,需要通知各个开发人员rebase他们的开发视图,以便与推荐基线的内容保持一致。

6项目开发

6.1ClearCaseLTClient工具简介

ClearCaseLTClient安装成功后,上述各个工具中,RationalClearCaseLTExplorer将是开发人员最常使用的工具,其他一些工具许多都已经集成在RationalClearCaseLTExplorer中了。
RationalClearCaseLTExplorer左边是ShortCutPane(快捷区),通过它可以方便的进行各项操作,包括两个部分:Toolbox(根据箱)和Views(视图),Toolbox中包括各种工具,Views中则是开发人员所参与的各个项目的视图。
Toolbox中,GettingStarted中是使用帮助部分;UCM部分是统一变化管理部分,开发人员将主要使用该部分来进行开发过程的控制,功能包括:加入项目开发、提交数据、Rebase、打开项目浏览器;BaseClearCase部分是基础的CC功能,包括修改视图属性、创建新的视图、删除视图、修改快捷视图等。
在Views中列出了开发人员参与的各个项目的视图,一般每个项目包括两个视图:开发视图和集成视图。上图显示的是项目testa的开发视图jim_testa,该视图中尚无内容,其中可以看到一项view.dat,该文件表示了与视图相关的内容,开发过程中切勿删除此文件,否则CC将失去该视图,恢复操作很复杂。
下面开始详细介绍ClearCase的使用。

6.2开发流程

开发人员的主要的工作流程是加入项目,然后基于活动实施开发,提交活动,根据管理员的要求rebase工作区,然后继续开发,直到开发完成。

6.3加入一个项目

要加入一个项目,主要点击RationalClearCaseLTExplorer/Toolbox/UCM中的”JoinProject按钮”(参见ClearCaseLTClient工具简介部分),然后根据提示进行操作,就可以完成加入项目开发的过程。
加入项目后,点击菜单View/RefreshViewShortcuts,在左边面板的Views中就会出现项目的视图,同时,在计算机的硬盘(缺省的是C盘)中会产生两个目录:user_project和user_project_integration。上面的例子中生成的目录为:jim_testa、jim_testa_integration。
以后,开发工作将会在user_project中展开,测试工作将会在user_project_integration中进行。
注:要想加入到项目开发,计算机的登录用户应当满足“ClearCaseLT设置”部分的要求。

6.4进行开发工作

加入到一个项目后,就可以开始着手开发工作,在开发过程中,可以使用不同的开发工具,可以提交的东西包括软件源代码、设计文档以及根据管理员要求可以提交的其他内容。开发人员可以使用开发工具直接在开发视图中进行修改。
但是,在开发中一定需要记住一点:在开发视图中对文件进行修改之前,一定需要将准备修改的内容checkout,然后才能修改,修改完毕后,使用checkin加入到视图中。

6.4.1加入文件、目录

最初加入项目的开发人员可能面对的是一个空的项目,需要不断加入新文件或者是目录,这可以在RationalClearCaseLTExplorer中或者Windows资源管理器中完成。
在开发视图对应的文件夹的快捷菜单出现了ClearCase的快捷操作方式。
通过Windows资源管理器,在开发视图目录中生成新的目录,拷贝加入文件。例如:在jim_testa\\test目录中加入文件夹source、doc,source文件夹中加入新的文件home.html,这时新产生的目录和文件并没有纳入CC的管理之下,必须手工将其加入到CC管理,即AddtoSourceControl。
首先选择需要加入到CC控制的目录或者是文件,然后通过Tools/AddtoSourceControl或者快捷按钮将其加入到版本控制中。
添加到版本控制中要求选择“活动”,(UCM方式基于活动),输入活动名称,活动被命名为addfolder。这样新加入的内容就加入到CC控制之下。
注意:任何新加入的文件/目录都需要通过AddtoSourceControl加入到CC中。

6.4.2CheckOut

加入新的代码在开发过程中需要不断的修改,首先需要完成CheckOut工作。操作比较简单,选中需要CheckOut进行修改的目录或文件,然后通过Tools菜单或快捷菜单或快捷按钮,实现CheckOut功能。任何需要修改的文件,都要执行CheckOut功能,才能进行修改。
执行了CheckOut之后,可以将ClearCase的各个工具关闭。

6.4.3修改

CheckOut以后,开发人员就可以对相应的文件进行修改了,可以在开发视图目录中直接修改,也可以在其他地方修改之后,覆盖该视图中原来的文件。

6.4.4CheckIn

修改后,要将新改动的内容加入到CC中,这就需要CheckIn。如果一次修改了许多文件,为了防止漏掉一些修改的内容,可以使用快捷菜单中的FindCheckouts功能,这样可以找出所有的被CheckOut的文件,选中这些文件,然后选择CheckIn,要取消这次修改,也可以选择UndoCheckout,当然也可以在View中选择某个或某些文件,从快捷菜单中选择CheckIn完成CheckIn操作。

6.5提交工作

当开发工作进行一定时间之后,要提交所作的改动,以便管理员及其他开发人员看到这些改动。
这样,改动的部分就会加入到集成视图中,CC服务器也会得到改动的部分,管理员可以根据新的数据进行测试、生成新的基线、晋升基线、生成新的推荐基线等工作。
当系统完成提交工作后,提交工作并没有真正的完成,CC会弹出对话框,请操作者确认:
按照顺序操作:
(1)点击OK,这时会打开一个集成视图窗口,以便开发者检验提交的数据是否正确,如果提交结果正常,关闭集成视图窗口;
(2)如果确认提交的工作正常,点击Complete,系统将会把所作的改动提交到CC服务器中;如果认为提交的结果不正确,点击Close退出,继续修改、开发。
(3)提示工作完成后,点击Close,完成提交工作。
如果提交的过程中出现异常,CC会提示开发人员,按照提示操作就可以了。

6.6rebase

项目管理员在不断关注项目的开发进展情况时,如认为出现了一个比较好的版本,需要各个开发人员以其为基础继续开发时,管理人员就会建立一个基线,并将其设置为推荐基线,然后要求开发人员保持与推荐基线代表的内容一致,然后在该基线的基础上继续开发。
这时开发人员需要执行rebase操作,使自己的开发视图与其他人保持一致,rebase也有多种方法,“提交工作”一节的图表示了其中的两种方式。

6.7异常处理

在开发复杂系统时,会产生开发人员的代码冲突问题,在提交工作时会出现一些问题,这时需要开发人员对提交的工作进行审查、选择正确的版本等。
另外,还有其他可能会出现的一些异常,请参考帮助来处理。

6.8备份与还原

备份还原方法
1.备份和还原VOB
(1)备份VOB
锁定VOB
备份VOB的存储目录
解锁VOB
注意事项:遇到不能备份VOB的存储目录时,应在控制面板中关闭CC的服务。
(2)还原VOB
restore
stopsandrestartsCC
updatestheCCVOBregistry
MergetheVOBdatabasesnapshotandVOBstoragedirectory
Copiesthetemporarystoragedirectorytotargetlocation
RunscheckvobtoresynchronizetheVOBdatabaseandstoragepools
注意:不能还原网络镜像。
步骤:step
用高级管理用户登入安装CC的主机
确认目标目录所在盘符有足够的空间来还原备份的VOB
解锁VOB
注意事项:遇到不能备份VOB的存储目录时,应在控制面板中关闭CC的服务。
(2)还原VOB
restore
stopsandrestartsCC
updatestheCCVOBregistry
MergetheVOBdatabasesnapshotandVOBstoragedirectory
Copiesthetemporarystoragedirectorytotargetlocation
RunscheckvobtoresynchronizetheVOBdatabaseandstoragepools
注意:不能还原网络镜像。
步骤:step
用高级管理用户登入安装CC的主机
确认目标目录所在盘符有足够的空间来还原备份的VOB
关闭处于工作状态的VIEW
运行:
vob_restore/flex
UNCnames(\\\\host\\share\\rest-of-path)
检查
解锁
“/vobstore/flex.vbs
分析VOB和VIEW
2.备份和还原VIEW
一、备份步骤:
(1)确定VIEW的存储目录使用CCAdministratorConsole工具或执行Lsview查看它的存储信息。获得View的存储路径。
例如:
c:\\>cleartoollsview–longakp_vu
可以获得如下信息:
viewonhost:Neptune
viewserveraccesspath:
/home/akp/views/akp.vwsc:\\home\\akp\\view\\akp.vws
(2)将处于工作状态的VIEW设为只读
cleartoolchview–readonlyakp_vu
(3)BackupView的存储目录
(4)取消只读
c:\\cleartoolchview–readwriteakp_vu
(二)还原View
(1)登入服务端主机
(2)检查目标位置的剩余磁盘空间
(3)转移目标位置的存储目录。更名或删除。
例如:
c:\\home\\akp\\view>renakp.vwsakp.vws.old
(4)还原备份文件
%c:\\>cleartoolrecoverview–tagakp_vu
6.9权限管理
在域中分组管理。
各用户加入不同的小组。
不同小组对项目具有不同的权限。

7其他事项

ClearCase是一种先进的软件配置管理工具,功能强大、复杂,上述介绍只列出了其功能的九牛一毛,ClearCase的使用说明书超过了2000页。
ClearCase还支持UNIX系统,混合平台开发等,除了支持图形界面以外,还支持命令行格式的操作。
因此短短二十几页的介绍根本无法详述ClearCase所有功能,上述介绍只能起到入门的作用,真正熟练掌握、使用CC还需要多多实践、阅读使用手册。
ClearCase提供的手册包括:
ClearCase介绍
ClearCase安装手册
ClearCase软件开发手册
ClearCase开发人员手册
ClearCase管理手册
ClearCase项目管理手册
ClearCase参考手册
等等。 (iwgh)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www1.rosoo.net/a/200512/2148.html]
本文出处: 作者:iwgh
顶一下
(3)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容