2014-07-01 30 views
0

将Grails工件检入Team Foundation Server(TFS)之后,所有工件都会被锁定,并且进一步脚手架失败,例如运行generate-all,而不是先前检入过工件的域。真的很痛苦。到目前为止,我们在做更多工作之前一直在检查整个项目,但这会导致其他问题。有什么方法可以更好地管理?我是TFS的新手。Grails脚手架和tfs文件锁定

- 编辑#1 -

当我说到锁定的,我指的是本地文件被写保护。

- 编辑#2 -

我想我可以使用git-TFS或GIT-TF(不知道这是真是再好不过了),可能svnbridge,但我希望能为一个简单的解决方案我的团队。大多数人只和TFS合作过,而引入新版本控制系统的要求可能会破坏整个Grails项目。

回答

1

您可以将预构建事件添加到受影响的项目中。右键单击该项目并选择构建事件选项卡下的属性,您可以输入命令行代码对受影响的文件进行检查。 根据您的解决方案为您的解决方案进行设置,最好卸载该项目,然后直接输入到.csproj文件,以便您可以为所有配置启动预构建事件。

只有你的脚手架文件应该是有针对性的,这种方式当你得到最新和执行建立你的脚手架文件将被检出,当你来做检查检查出来的文件将进行比较,如果没有chages是制作到脚手架,然后签入将被忽略,因为没有变化。

在您的解决方案与Grails的脚手架

Solution Structure

如果右键单击该项目并选择属性识别您的项目,然后去生成事件选项卡

Project Properties

你可以在此处输入脚本以进行构建前或构建,但直接在项目xml中输入会为您提供更大的灵活性。

卸载的项目,以便您可以编辑XML项目直接 Unload Project

然后再次右击并选择编辑Project.CSProj

Edit Proj file

向下滚动到项目文件的底部xml,在这里你可以找到编译前和编译后的部分。条件语句应该被设置为满足您的需求,在这里我假定版本只被构建使用,所以只有在配置不等于Release时才会触发代码。

enter image description here

取消对预生成部分,并添加你想火所编译的代码之前的代码。这只是一个示例,您可能需要根据项目的结构来扩展文件的路径。

 <!--To modify your build process, add your task inside one of the targets below and uncomment it. 
     Other similar extension points exist, see Microsoft.Common.targets.--> 
    <!--Target for prebuild event when the configuration is not Release--> 
    <Target Name="BeforeBuild" Condition=" '$(Configuration)' != 'Release' " > 
    <!--Recursively check out everything in the sub folder--> 
    c:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\tf.exe checkout Scaffolding /recursive 
    <!--Check out a list of individual files--> 
    c:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\tf.exe checkout Scaffoldingfile1.cs Scaffoldingfile2.cs 
    </Target> 

然后,您可以关闭项目文件,并在Visual Studio中重新加载。

你的程序应该成为

  • 获得从源头控制
  • 最新的代码重新生成解决方案
  • 你的脚手架代码应该自动检出
  • 使该解决方案的任何变化
  • 执行检查

检查脚手架文件是否已更新时,应检入它们,如果没有发生变化,TFS应忽略文件并撤消检出。

+0

这听起来像是一个很好的解决方案。请分享这样的语法。不知道我完全理解你的建议。 –

+0

非常感谢。我怀疑我会执行它,但似乎是正确的解决方案。看起来我们很快就会转向Mercurial,这将成为一个非问题。 –

0

如果您使用的是TFS 2012或更新版本,则可以使用所谓的本地工作区(而不是服务器工作区)。这将阻止TFS使您的文件成为只读文件。

它应该是TFS 2012+中的默认工作空间类型,但您可以通过单击Source Control Explorer中的工作空间下拉列表选择工作空间...然后编辑工作空间,单击高级并检查您的工作空间类型设置为本地。

+0

我很伤心地使用TFS 2010。 –