PowerBuilder 8.0 开发环境集成使用版本控制
2024-07-21 02:10:14
供稿:网友
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. 如何删除废弃的对象?
答:首先,这需要具有管理员权限的用户才能够操作。其次,这里面涉及到的内容,将在中级篇中介绍。一般用户管理员联系。