1 PB开发环境集成版本控制的介绍
PB6 至 PB8集成版本控制个不相同,在这里仅以PB8为例介绍集成使用版本控制。
1.1 设置
从PB8开始,有了工作区间Workspace的概念。开发者的工作是在一个工作区间中进行的。版本控制也是在工作区间中设置的。
查看Workspace的属性,在第3页(Source Control)中,设置版本控制的使用连接。
图一:PB8设置集成使用版本控制的连接
下面对其中的各项进行说明:
Source Control System 版本控制系统。在这里选择要使用的版本控制系统。这里列出来的是操作系统中安装了的,能够集成到开发环境中的版本控制系统。
UserID 登录用户账号。是开发者在所选择的版本控制系统中所拥有的登录账号。
Project 在版本控制系统数据库中所存在的,本次开发所需要的项目。
Local Root Directory 本地的根目录。这个路径或者它的子目录要包含Workspace。
Connect 连接版本控制。注意:有的版本控制在Project中不需要填写,在连接的时候选择Project。
Advanced… 设置高级属性。相当于执行菜单Entry→Source Control→Advanced Options(在Library Painter中的菜单)。
Require Comments on Check-in
在键入的时候需要填写注释说明。如果选中该项,在Check-in的时候,OK按钮是灰色的,除非你填写了注释说明。
This project requires that I sometimes work offline
选中这一项,在每次打开这个Workspace的时候,不会主动连接,而是出现一个对话框,询问是联机还是脱机(如图二)。
图二:询问是否脱机工作
Delete PowerBuilder Generated Object Files
这一项是决定是否自动删除PB生成的对象的源文件(*.sr?)。在执行版本控制的某些活动的时候,比如GetLastVersion、Check-out、Check-in、Refresh Status等操作的时候,PB会从版本控制系统中取得对象的源代码放置到本地。如果选中该选项,PB会在执行完操作以后,自动删除这些文件。如果不选中该选项,这些临时的源文件将保留在本地。使用某些版本控制系统比如Perforce, ClearCase, or Continuus source control systems等,不可以选择该选项。
另外,有些操作,即便是选择了该选项,可能也不会完全的清除这些临时的源文件。比如执行Refresh Status操作。如果不想保留这些文件,需要你手工清除。我的办法是使用一个批处理文件(DELSR.BAT),内容是Del *.sr?来删除这些文件。
Perform Diff on Status Update
取消了该选项选择,你将看不到本地对象与版本控制系统数据库的对象是否有差别。即:Refresh Status命令将无效。
Suppress prompts to overwrite read-only files
这个选项选择时候,在某些时候(具体忘记了),提示你是否覆盖。该选项可以提醒防止使用旧的文件覆盖新的文件。
Status Refresh Rate
自动刷新状态的时间,以分钟为单位。这里所指的状态是PB的对象是否被别人锁定,或者是否被更改而与本地的不相同。
这些可以参照该对话框的联机帮助,由英文的原文说明,建议阅读一下。
1.2 使用
使用版本控制之前,首先解释一下各种状态及显示的图标。
名称
图
说明
加号
表示这个对象还没有加入到版本控制数据库中。
圆点
表示这个对象加入到了版本控制,并且处在常规状态。可以被检出。
绿勾
表示这个对象被当前的开发者检出/锁定。
红叉
表示这个对象被其他的开发者检出/锁定。(其他人不可以再检出。)
问号
表示这个对象的状态未知,一般是还不知道是否与服务器的对象不同。
圆圈
表示这个对象与服务器上的内容不相同。如果是本人检出,则不出现该图标。
有关这个内容可参见PB 的HTML帮助(Compiled HTML Help File)中:
PowerBuilder User’s Guide
The PowerBuilder Environment
Chapter 3 Using Source Control
Using a source control system
对此有英文原版解释。
l 添加到版本控制中
当我们刚刚使用一个Project,要将所有的对象加入到版本控制中;
当我们新建了一些对象,要将他们加入到版本控制中。我们可以选择要加入的对象,鼠标右键单击,在菜单中选择“Add to Source Control…”添加到版本控制中。
在下面的几种情况下,我们可以在Target上单击鼠标右键,选择Add to Source Control:
1、 整个项目第一次要加入版本控制;
2、 新增了许多对象,分布在不同的PBL中,寻找起来较麻烦。
注:有关版本控制的命令,大部分存在于Library Painter的菜单Entry->Source Control中。对象的右键相关菜单根据情况会选择出现。
l 检出对象进行工作
我们要对某个对象进行修改的时候,需要将对象检出。我们选择这个(些)对象,执行“Check out”命令。对象即被当前操作用户检出,并且当前用户所检出的对象被更新为服务器上最新的版本。
l 检入对象提交更新
将对象修改完毕,需要提交到服务器上,对要提交的对象执行“Check in”命令即可。这样将服务器上的对象用检入用户本地的对象所更新。多数的版本控制系统是将该对象以新的版本号来保存。
l 检查更新
我们工作了一段时间,同伴们修改了其中的某些对象并提交到了服务器中。我们要检查服务器上的那些对象与本地的不同?我们需要执行“Refresh Status”命令。可以通过两种途径来执行:
1、 我只想检查某几个指定的对象,选择这些对象,执行该命令;
2、 我要检查所有的对象,或者排除少数的对象。选择Target对象,选择对所有对象操作。然后在弹出的对话框中去掉不需要检查的对象(或者默认选择全部)执行命令。
提示:选择Target可以方便的对大量的对象执行操作,但是要小心不要覆盖自己的工作。建议对通过Target对大量对象操作的时候,采用对话框中默认选择的对象。
l 更新本地对象
在适当的时候(比如操作者执行了Refresh Status,或者PB自己更新了状态)我们知道了本地某些对象与服务器上的不一致,我们可以执行Get Last Version…命令来同步对象。
l 对Target对象执行命令
对Target执行命令的时候,常常会出现一个窗口,询问是对所有对象操作还是仅仅对Target对象执行操作。如果对所有对象执行操作,PB还会弹出一个选择窗口来供开发者选择要操作的对象。如图三
图三:选择操作的对象范围
对Target对象执行某些命令可以方便的对大量的对象执行操作。但是偶尔使用不当会覆盖掉自己的辛勤劳动。下面将对Target执行各种命令的情况作一下综合说明。
Refresh Status,刷新状态。如果对所有对象执行该命令的时候,谈出的选择窗口中列出了所有的对象,但并不一定是所有对象都选中的。只有那些状态还不明了的(也就是图标的旁边有问号的对象)。
Get Last Version,同步对象的版本。弹出的选择窗口列出了所有的对象,但是默认选中的是PB认为内容不一致的,也就是图标前面有圆圈的对象。其他的对象也可以选择,但是建议不要点击右边的“全部选中”按钮,如果你有正在检出修改的对象,这样操作会将你对他们的修改覆盖掉。
Check-out,检出对象。弹出的选择窗口列出了所有未被检出的对象,也就是你可以执行检出的对象。默认情况下所有的对象都没有选择。除非的确有必要,一般不要点击右边的“全部选择”按钮检出所有对象。
Check-in,检出对象。谈出的选窗口列出了所有被你检出的对象,并且默认的情况下全部是选中的。
总之,通过Target对大量对象执行操作是很方便的,一般情况下认同它默认选择的列表即可。尽管有时候并不能够及时的更新状态信息,但是要选中全部对象进行操作,尤其是Get Last Version操作的时候,要小心。
l Show Difference…
显示不同。这个命令是对比本地的版本和服务器上最新的版本之间的差异。如果没有差异,则显示对话框告知文件相同。如果有差异,会显示版本控制系统的对比窗口。
l Show History…
显示版本历史。选择该命令,将打开版本控制系统的显示版本历史对话框。在该对话框中如果选择了两个版本,执行Diff命令,可以比较这两个版本的差异。
1.3 Q & A
下面对常见的一些问题作一下说明。
1. 我在对所有对象执行操作的时候,常常没有执行完成就中断了。
答:的确有这样的现象。我发现往往是版本控制系统慢的情况更容易出现这样的问题。更有甚者,可能会将PB这个关掉。遇到这样的情况,只能够选择部分的对象分批分次执行操作。你可以一次操作一个PBL内的对象,或者一个PBL内一半对象执行操作。
2. 我增加了一些对象,如何让我的同伴获得。
答:只要你将他们执行Add to Source Control,就可以了。版本控制系统会记住这些对象存在于哪些PBL中。
你的同伴这样操作:在Library Painter中,选择这个PBL,对他执行Get Last Version(通过点击菜单Entry→Source Control System→Get Last Version执行。PBL的右键菜单没有这些相关的命令。新增的对象会列在选择列表中,并且默认是选中的。或者,在通过Target对整个应用执行Get Last Version,所有服务器上新增的,本地没有的对象都会出现在列表中,并且默认是选中的。PB会将这些新增的对象下载到本地并且放置到正确的PBL文件中。在中级篇会对这个问题有一个详细的解释。
3. 如何检出Target对象本身?
答:要检出Target对象本身,在选择Target执行Check out命令的时候,在弹出的窗口中选择仅对单一文件操作,这样就是对Target对象本身进行操作。
在检出Target对象的时候,PB会告知“”这时候你需要在此执行一次 Get Last Version。
4. 我增加了一个PBL,如何让我同伴获得?
答:你的同伴会在适当的时候得知,他的Target对象与服务器上的不一致,他需要同步他的Target对象。同步过后,并不会立即得知Target中新增了一个PBL。当他下次打开这个Target(或者打开当前的Workspace)的时候,PB会告诉他,缺少一个xxx.pbl文件。这时候他需要手工创建这个PBL文件。然后关闭并重新打开Target,这时新的PBL就会出现在Target列表中。然后他需要选择新增的PBL并使用Get Last Version将其中的新增的对象下载到本地。
5. 如何正确的同步Target对象?
答:不正确的同步往往不能够成功地获得服务器上的Target对象的最新内容。由于Target在常规状态下是只读的,在执行Get Last Version的时候改写它的时候常常失败(这是PB的BUG)。你需要首先去掉文件的制度属性,然后执行Get Last Version。
6. 如何删除废弃的对象?
答:首先,这需要具有管理员权限的用户才能够操作。其次,这里面涉及到的内容,将在中级篇中介绍。一般用户管理员联系。