5.4.9 处理同一文件的并发更新
首先,我们讨论一下一个被建议用来进行修改操作的协
议。当在工作空间中使用资源时,您的操作是独立于CVS资源库的。因为发生在资源库中的更改可能是在您不知道的情况下发生的,所以非常重要的一点是,如果
还未检查资源库中是否有更新取代了您的更改,那么您一定不要提交任何更改。Team |
Update…操作会用资源库中那些取代了您的更改的任何更改来更新项目的本地副本。对于文本文件(包括Java类)来说,Team |
Update…操作会自动对任何更改进行合并(从资源库到工作空间),即使这些更改可能造成冲突。在遇到冲突时,合并操作会用特定的CVS标记文本来标识
文件中的冲突,以帮助您识别出冲突行。标记文本并不是与任何类型的文件都兼容,例如它可能导致编译错误。
Update…
操作是一个非常强大的操作,我们在练习时一定要小心。在下面这个例子中,Pat和Lynn更新了一个简单的文本文件。无需知道它,它们都对以“B”和
“C”开始的行进行了更新。标记文本会对冲突的那些行以及引入了冲突的版本号(1.2)进行了标识。对于一个带有众多冲突的复杂Java文件来说,您可能
很难解决其中的冲突。
A is for apple
<<<<<<< sample.txt
B is for bird (updated by pat
)
C is for crow (updated by pat
)
=======
B is for bobcat (updated by lynn
)
C is for cow (updated by lynn
)
>>>>>>> 1.2
D is for dog
E is for excellent
F is for farm
G is for goat...
Team | Synchronize with
Repository…操作也支持更新,但是该操作不会自动进行更新。在执行该操作后会显示Synchronize视图,并会列出工作空间副本和资源库最
新资源之间那些不一致的资源。在Synchronize视图中,您可以对这些差别进行检查,并决定所要采取的操作。由于Team |
Synchronize with Repository…操作可使您拥有更多的控制权,所以我们建议您使用该操作来代替Update…操作。
下面总结一下文件并发更新的基本规则:在对工作空间
中的文件进行修改之前,您必须用资源库中的所有更改来更新工作空间中的资源。为了安全起见,此时请使用Team | Synchronize with
Repository…操作。在Synchronize视图中,您可执行更新操作,还可提交更改,并可协调冲突。
5.4.10 使用CVS的Watch/Edit支持以避免对同一文件的并行更新
CVS
的Watch/Edit支持是Eclipse本身就提供的。如果您同意使用CVS的Watch/Edit支持,那么在提交资源时,您和小组其他成员之间就
可以避免冲突。在启用了CVS的Watch/Edit支持之后,您的项目小组可以更好地理解在所有具体项目中,当前谁正更新文件。相反,前面所讨论的
CVS Annotate视图为您所显示的是先前的更改以及谁做的更改。CVS的Watch/Edit支持是在项目层次上被启用的。如果在Team |
CVS >Watch/Edit的首选项设置页面中选中了Configure projects to use Watch/Edit on
checkout复选框,那么在项目被检出时,Watch/Edit支持将被自动激活。您也可以通过设置项目的CVS属性在受CVS管理的现有项目上启用
Watch/Edit支持。在CVS的Watch/Edit支持被启用时,该项目中的文件处于只读状态。此时,如果您在编辑器中打开了某文件后又试图对该
文件进行修改,那么CVS服务器会被询问。在编辑文件时,如果其他人也正在编辑该文件,那么就会出现一个对话框以通知您小组中其他成员也正在编辑该文件
(见图5-9)。这时,您可以继续对该文件进行编辑,但是在您提交该文件时需要进行冲突管理。在文件被修改时,检查标记修饰符
会被添加到该文件上。
图5-9 显示其他人正在编辑同一文件的对话框
在项目、文件夹以及文件上执行Team |
Show Editors操作后会打开CVS Editors视图。CVS
Editors视图中列出的是所有正在被其他人更新的资源(见图5-10)。无论是否处于Watch/Edit的控制之下,您在任何项目及项目资源上都可
以使用Team | Show Editors操作。但是Team | Show
Editors操作只会对启用了Watch/Edit支持的项目资源进行标识。
图5-10 列出了哪个用户正在更新文件夹中文件的CVS Editors视图
您可以使用Team |
Edit操作来显式地通知CVS服务器,让CVS服务器知道您想对文件进行更新。您还可以使用Team |
Unedit操作来通知CVS服务器,让CVS服务器知道您不想再编辑该文件。这样,您所做的任何更改都会被从CVS资源库中检出。表5-3给出了有关这
些操作的信息。在向CVS提交了更改之后,Watch/Edit列表中的资源会被隐式删除掉。
Watch/Edit是一个非常有用的工具。但是该
工具的使用需要遵循一些规则,并要注意一些考虑事项。首先,如果要使Watch/Edit功能高效,那么小组中的每个成员都必须在存在潜在冲突的项目中启
动Watch/Edit功能。其次,您必须连接到CVS服务器上。如果您没有和CVS服务器相连,并且想更新一个文件,那么您将不得不显式地将该文件的只
读状态(从该文件的属性页面中可获得该属性)取消掉。当然,该支持现在是折中的。这是因为,没有任何人知道该更新,而且在提交过程中存在潜在的冲突。如果
您删除了一个项目并且该项目资源的Watch/Edit首选项设置没有被启用,那么CVS服务器将不会被通知,并且CVS服务器会继续向外报告您正在对这
些资源进行编辑。如果您的小组计划使用Watch/Edit支持,那么明智的做法是小组中所有人都启用被标注为Configure projects
to use Watch/Edit on checkout的CVS Watch/Edit首选项设置。
5.4.11 恢复被删除的文件
有时候,在文件被删除并且更改被提交给CVS后,您
可能需要恢复所删除的文件。幸运的是,CVS不会将所删除的文件从该文件所在的资源库中移除。您可以使用Team | Restore from
Repository操作来恢复所删除的文件。如果被删除的文件在资源库中存在,那么您将看到一个对话框。在该对话框中,您可以选择所要恢复的文件的具体
修订版(见图5-11)。而文件的最新修订版则是一个对所删除文件的引用。这是因为文件删除是一个CVS修订操作。
图5-11 显示可恢复的被删除文件的Restore from Repository对话框
当一个文件被恢复到工作空间中的时候,该文件被看作是一个新文件。在提交该文件之前或提交该文件时,必须将该新文件添加到版本控制中。
5.4.12 其他CVS用户界面元素
1. Checkout向导
在New wizard对话框中获得的是CVS向导中的检出项目。通常,您会使用CVS Repositories视图来检出项目。但是,有些CVS资源库是不允许被浏览的。在这种情况下,检出向导可能就比较有用。但是在这种情况下,您必须预先知道该项目的名称。
2. CVS备忘单
若要打开Cheat Sheet Selection对话框,则选择Help | Cheat Sheets…命令。对于CVS任务来说,备忘单用来为分支和合并操作提供帮助。