zoukankan      html  css  js  c++  java
  • 注意TFS中Checkout 不等于Get Latest (转载)

    前两天讨论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给覆盖了。

    这种新的设计对于已往使用VSS,CVS的开发人员来说习惯上可能一时很难转变,特别是在不知情的情况下很容易犯错。微软答应会在TFS的第二版本中会提供是否自动Get Latest的选项。

    PS:由此可见,Check in(CVS里对应术语是Commit)的时候在TFS里的Conflict的概念跟CVS里的Conflict还是有所区别的。在CVS 里,Conflict意味着无法自动Merge,而在TFS里,Conflict只是告诉你Server上有比你当前更新的版本而已,你可以选择自动 Merge、忽略本地版本、覆盖Server上的版本,或者对比后手工Merge重新提交。

    可以参考http://www.woodwardweb.com/vsts/000179.html获取更多详细信息。

    技术改变世界
  • 相关阅读:
    Java实现 LeetCode 691 贴纸拼词(DFS+map记录)
    Java实现 LeetCode 691 贴纸拼词(DFS+map记录)
    PHP is_resource() 函数
    PHP is_float()、 is_double()、is_real()函数
    PHP is_object() 函数
    PHP is_numeric() 函数
    PHP is_null() 函数
    目标检测算法进展大盘点
    斯坦福大学李飞飞团队图像分类课程笔记
    激光雷达与应用
  • 原文地址:https://www.cnblogs.com/davidgu/p/2250636.html
Copyright © 2011-2022 走看看