A. tfs checkout为什么自动获取最新
前两天讨论Source Code老是被同事覆盖的问题时,发现在VS中开始编辑时自动Check Out的代码居然不是Latest Version,吓了一大跳,潜意识里觉得这是一个很严重的Bug,因为在VSS, CVS等版本控制系统中,但Check out的时候都会自动获取最新的版本。
而后查了MSDN Forums和相关的blog,发现居然说是TFS的By Design。按TFS团队的说法,这是基于如下考虑:
1.假定TFS Server上的代码总是一个完整的可用的Build,也就是说每个员工必须保证你的一个完整的Check In是必须可以Build成功的。
2.通常意义上,你开始新的工作的时候同样应该确保你的本地版本是可以通过Build的。当然可能是跟Server上最新的版本同步的,也可能是Server上某个时刻的SnapShort,总之是一个好的版本。
3.当你需要编辑代码的时候,Check out这个动作只是做了个Editable的标记而已。如果发现Server上有新的版本,只是提示你Server上的版本比你的Local版本要新,而不是Get Lastest Version。为何呢?因为通常意义上来说,如果Server上有一个新的版本,意味着有了一个新的ChangeSet,而一个ChangeSet并不是只有一个文件,如果你只是把正要编辑的版本Get Lastest Version,由于Code的依赖关系,很可能导致本地编译被Block。
4.为了避免开发人员陷于此种陷阱,TFS团队决定不是直接Get Lastest Version,而是在你完成了代码工作后要Check In的时候告诉你有Conflict,需要再做Merge来。这样在Check In的时候开发人员必须仔细的对比检查,做好Merge工作才能确保在你Check In之后Server上又是一个好的Build。Merge的时候注意千万别把别的开发人员的Code给覆盖了。