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 持续整合战略-项目参考号';s vs分支/合并_Tfs_Continuous Integration_Branching And Merging - Fatal编程技术网

Tfs 持续整合战略-项目参考号';s vs分支/合并

Tfs 持续整合战略-项目参考号';s vs分支/合并,tfs,continuous-integration,branching-and-merging,Tfs,Continuous Integration,Branching And Merging,假设您在遗留代码库(企业API)中有7个核心项目。代码库大约有50个应用程序引用一个或多个核心项目。在手动完成vss到tfs的迁移后,只有50个应用程序中的两个仍然可以工作。为了使应用程序重新工作,许多应用程序已从企业API中取出,并放入自己的TFS项目中 我试图说服同事们,他们应该而不是将核心项目分成一个分支,将副本放在单独的TFS项目中,并且在发布到PROD之后,只将核心项目的附加内容合并回企业API中。显然,如果持续集成的频率较低,则持续集成将更加困难 我试图说服同事们,最好将核心项目从企

假设您在遗留代码库(企业API)中有7个核心项目。代码库大约有50个应用程序引用一个或多个核心项目。在手动完成vss到tfs的迁移后,只有50个应用程序中的两个仍然可以工作。为了使应用程序重新工作,许多应用程序已从企业API中取出,并放入自己的TFS项目中

我试图说服同事们,他们应该而不是将核心项目分成一个分支,将副本放在单独的TFS项目中,并且在发布到PROD之后,只将核心项目的附加内容合并回企业API中。显然,如果持续集成的频率较低,则持续集成将更加困难

我试图说服同事们,最好将核心项目从企业API中取出,放到他们自己的TFS项目中,然后引用bin/Debug


分支、复制分支以分离TFS项目然后合并(并在最后查看冲突)更好吗?还是封装核心项目并强制20人的团队只使用每个核心项目的一个副本更好?

这实际上取决于共享代码的成熟度。我想说,有三种方法可以遵循,每种方法都有各自的优缺点:

选项1:直接从他们自己的团队项目中引用他们

Team Project Application 1
-->  Development
        --> ...
-->  MAIN
        --> Sources
            --> Application 1
                --> Application1.sln

Team Project Application 2
-->  Development
        --> ...
-->  MAIN
        --> Sources
            --> Application 2
                --> Application1.sln

Team Project CoreProject 1
-->  Development
        --> ...
-->  MAIN
        --> Sources
            --> CoreProject1.csproj
使用这种方法,您可以在CI构建中设置,使所有应用程序在您签入CoreProject后开始构建。
您必须使用约定在本地映射团队项目(否则编译将中断)

如果您不断更改CoreProject,并且需要将这些更改快速反映到所有受影响的应用程序中,这是一个很好的方法。
这还意味着您可以承受某个应用程序的不稳定性,如果CoreProject中的重大更改会造成这种不稳定性

选项2:通过分支间接引用它们

Team Project Application 1
-->  Development
        --> ...
-->  MAIN
        --> SharedSources
            --> CoreProject1_branch
                --> CoreProject1.csproj
        --> Sources
            --> Application 1
                ---> Application1.sln

Team Project Application 2
-->  Development
        --> ...
-->  MAIN
        --> SharedSources
            --> CoreProject1_branch
                --> CoreProject1.csproj
        --> Sources
            --> Application 2
                ---> Application1.sln

Team Project CoreProject 1
-->  Development
        --> ...
-->  MAIN
        --> Sources
            --> CoreProject1.csproj
使用这种方法,每次签入CoreProject1中的更改时,都需要组织对每个受影响应用程序的合并。这需要一定的努力,,但是,这样你就有时间在自己的平台上稳定CoreProject,然后将其合并到你的应用程序中。
这种方法意味着你对每个CoreProject都有一个构建定义。
一般来说,如果你重视CoreProject的稳定性,并且如果你的应用程序因某些原因发生变化而无法“污染”,那么这是一种很好的方法麻烦顺便说一句,这是我们采取的方法

选项3:在每个应用程序中引用文件

Team Project Application 1
-->  Development
        --> ...
-->  MAIN
        --> SharedBinaries
            --> CoreProject1_branch
                --> CoreProject1.dll
        --> Sources
            --> Application 1
                ---> Application1.sln

Team Project Application 2
-->  Development
        --> ...
-->  MAIN
        --> SharedBinaries
            --> CoreProject1_branch
                --> CoreProject1.dll
        --> Sources
            --> Application 2
                ---> Application1.sln

Team Project CoreProject 1
-->  Development
        --> ...
-->  MAIN
        --> Sources
            --> CoreProject1.csproj
使用这种方法,您需要将CoreApplication内置的二进制输出检入到每个应用程序中。
只有在您确信CoreApplication是稳定的情况下才建议这样做&您不需要定期调试它

基本上,选项2和选项3是类似的,由著名的辩论“项目与文件参考”分开。有关SO资源,请参阅,通过搜索可以检索到更多

如果您的核心项目由于不断变化和/或单元测试覆盖率较低,您应该选择选项2(或3)。
如果您对其质量有信心,选择选项1是一个不错的选择,因为它将极大地提高您的整体生产力

在不了解您的产品及其质量的情况下,仅仅根据您提供的相当大的数量(20人、50个解决方案、7个核心项目),我会选择选项2/3

另一个重要提示是:共享projectd没有任何分离测试的方法,这种情况经常发生。如果是这种情况,并且核心项目没有自己的单元测试,没有专门的测试计划等,那么除了选项1之外,做任何事情都没有意义


关于这个问题的另一个很好的资源是ALM rangers提供的。

我很确定您希望您的团队参考已经构建的核心API二进制文件。重用的正确粒度是发布的粒度(版本化构建)参见罗伯特C马丁的C++报告96,我们在这里解释:


基本上,团队似乎处于恐慌之中,只是做了最简单的事情,可以让他们回来并能够交付。这是可以理解的,但我认为最好是他们承认,最好是让他们的公共库作为共享代码库,重用代码而不是DLL是不好的,并且随着情况的稳定需要解决技术债务

+1这是我一直在寻找的答案,但我将另一个答案标记为答案,因为它有支持和反对的理由。谢谢你的时间,非常感谢。我希望我能接受两个答案。。。其他人投票给这个家伙,那个链接是我的大规模杀伤性武器!这怎么会偏离话题呢?我无法想象这更适合我们的程序员姐妹网站。