PowerBuilder 8.0 开发环境集成使用版本控制


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</S

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus