Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TFS生成分支的服务器生成?_Tfs_Mapping_Branch_Build Server - Fatal编程技术网

TFS生成分支的服务器生成?

TFS生成分支的服务器生成?,tfs,mapping,branch,build-server,Tfs,Mapping,Branch,Build Server,我们有一个TFS2008项目,有两个分支(“Main”和“NewFeature”)。 每个都是源代码的完整、独立的“副本”(变体) 通过更改工作区映射,我们可以将任何一个变体映射到本地PC上,并且一直在使用这两个分支,没有任何问题 但是,如果我设置映射以将构建服务器切换到NewFeature分支(该分支只需交换NewFeature源代码,而不更改构建服务器的任何其他内容),则会出现错误: There is no working folder mapping for $/Main/Product.

我们有一个TFS2008项目,有两个分支(“Main”和“NewFeature”)。 每个都是源代码的完整、独立的“副本”(变体)

通过更改工作区映射,我们可以将任何一个变体映射到本地PC上,并且一直在使用这两个分支,没有任何问题

但是,如果我设置映射以将构建服务器切换到NewFeature分支(该分支只需交换NewFeature源代码,而不更改构建服务器的任何其他内容),则会出现错误:

There is no working folder mapping for $/Main/Product.sln
i、 e.当它从NewFeature分支构建时,在Main分支中仍有一些东西在查看,即使源代码中没有对该分支的引用。它似乎正在缓存一些对Main的引用

我已经完成了一个完全干净的构建(从服务器上删除了构建文件夹,并使用/p:ForceGet=true运行构建,以确保映射被刷新到服务器,并且服务器上没有可能缓存工作区绑定的文件),但这没有帮助

有什么建议吗?

请确认:

  • $(SolutionToBuild)在引用Product.sln时使用相对路径
  • $/NewFeature/../TFSBuild.proj和$/NewFeature/Product.sln之间的相对路径与主分支中的路径相同
/编辑/

但是,请注意,$/Main和$/branchs/Feature在树层次结构中处于同一级别并不重要。构建服务器上的本地路径也不重要。*重要的是每个分支下面的内容。如果内容在内部是一致的,那么所有现有的构建脚本都应该在没有修改的情况下工作

有关我如何将一切联系在一起的具体示例,请参阅我过去的答案,例如:

我的方法不是唯一的方法,但我可以证明它比我多年来遇到的所有其他变体都更有效:)


*坦率地说,尝试对团队构建进行微观管理可能会比对MSBuild脚本进行拟议的重组更加痛苦。为了可靠性,你必须把你的版本控制放在某个地方…如果你拥有1的构建服务器(或者将来可能),那么你必须考虑一个改变部署策略……你最终需要一个元SCM过程来管理你的SCM进程!p> 好的,结果是-我找到了一个解决办法

由于我们的传统构建过程(构建、复制、模糊、构建自定义安装程序、复制到放置文件夹),我无法轻松地将分支放置在主分支旁边。它需要替换它

因此,如果我有Main和NewFeature,我希望取消映射Main并在其位置映射NewFeature(即,在构建服务器上使用“c:\Main”,只需更改出现在那里的源代码)

解决方案#1(最简单、最明显、最符合逻辑的解决方案)是使用以下映射:

  • $/NewFeature->c:\Main
预期结果:NewFeature代码结构只是替换了Main,而构建服务器并不知道它位于不同的分支上

实际结果:失败,出现“即使未使用,也未映射$/Main”错误

解决方案#2就是这样做:

  • $/Main->c:\IgnoreThisFolder
  • $/NewFeature->c:\Main
这是有效的(它抑制了警告,因此允许生成继续进行MSBuild,而不知道它正在分支中生成)。然而,它很难看,构建不必要地获取了所有主要分支源代码

解决方案#3(未经测试,除非我知道它比#2好得多,否则很难尝试)是:

  • 将所有源代码(从$/Main、$/branchs/Feature)移动到$/branchs/Main和$/branchs/Feature以获得一致的层次结构深度,并重写MSBuild脚本以使用这些新路径
  • 希望我可以只映射到我需要的分支,并编辑TFSBuild.proj以将其重定向到该分支中的构建

    (编辑:是的,这很有效。我们现在已经重新组织了我们的整个代码结构,以便所有(所有分支)在单个团队项目的公共根目录下,分支/构建不再是问题-现在可以轻松地执行我们需要的任何操作。诀窍是将根文件夹插入层次结构中,以便您可以在任意级别进行分支。我已在构建脚本中添加了一个小调整,以便我们可以将分支作为参数传递给MSBuild,因此,现在构建任何变体都很容易。我们不想处理的任何分支都可以被隐藏起来,构建服务器仍然很高兴。)

摘要 所有这些解决方案(使用技术术语)都很糟糕。您必须重新映射工作区(在这种情况下,这并不简单:需要9个映射条目,因此这是一件容易出错且繁琐的事情),编辑TFSBuild.proj,删除所有源代码,并使用/p:ForceGet=true运行生成以在分支之间切换生成。因此,切换分支大约需要一个小时。难以置信-最多需要几分钟

我意识到我们的项目离理想的设置还很远,但我不敢相信在TFS中分支会如此困难(在SourceSafe、Accurev和Performance中这是小菜一碟,为什么在TFS中如此痛苦?)


其他人如何组织他们的TFS分支机构?如何在分支之间切换开发人员?如何在分支之间切换服务器构建?真的一定要这么痛苦吗?

新更新:

正如在另一个答案中所报告的那样,我找到了一个适合于短期特性分支的解决方法,但它确实没有很好地工作。从那以后,我又回到了这个问题,完整的解决方案非常简单:

在TFSBuild.proj中,路径基于$(BuildProjectFolderPath)。此路径解析为类似$/Main的服务器端(源代码管理路径),而不是本地路径(D:\ServerBuildFolder\Main)

<