在将Grails工件签入(TFS)之后,所有手工艺品都会被锁定,而进一步的脚手架也会失败,例如运行generate-所有这些都是针对以前为其检入的某个域运行的。这真的很痛苦。到目前为止,我们一直在检查整个项目,然后再做更多的工作,但这会导致其他问题。有什么办法能更好地处理这件事吗?我是TFS的新手。
--编辑#1 --
当我谈到锁定时,我指的是被写入保护的本地文件。
--编辑#2 --
我想我可以使用git或git(不确定哪个更好),可能是svnbridge,但我希望为我的团队提供一个更简单的解决方案。大多数只使用TFS,引入新版本控制系统的需求可能会破坏整个Grails项目。
发布于 2014-07-07 09:47:44
可以将预构建事件添加到受影响的项目中。右键单击项目并在build选项卡下选择属性,您可以输入命令行代码对受影响的文件进行签出。根据为解决方案设置配置的方式,您可能更好地卸载项目,然后直接键入.csproj文件,以便为所有配置启动预构建事件。
只有您的脚手架文件应该是目标文件,这样当您获得最新版本并执行构建时,您的脚手架文件将被签出,当您在签出的文件中进行检查时,将对签出文件进行比较,如果没有对脚手架做任何修改,那么签入将被忽略,因为没有任何更改。
在您的解决方案中,用grails脚手架标识项目。

如果您右键单击项目并选择属性,则转到Build Events选项卡。

您可以在这里输入脚本进行预构建或后期构建,但是直接在项目xml中输入可以提供更多的灵活性。
卸载项目,以便直接编辑项目xml。

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

向下滚动到Project文件xml的底部,您将在这里找到构建前和构建后的部分。条件语句应该设置为满足您的需要,这里我假设版本只用于构建,所以只有在配置不等于发布的情况下才会触发代码。

取消对预构建部分的注释,并在编译代码之前添加要激发的代码。这只是一个例子,您可能需要扩展到文件的路径,具体取决于项目的结构。
<!--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>然后,您可以关闭Project文件并在visual studio中重新加载。
您的流程现在应该是
在签入时,如果您的脚手架文件已经更新,它们应该被签入,如果没有发生任何更改,TFS应该忽略这些文件并撤消签出。
发布于 2014-07-01 23:39:16
如果使用的是TFS 2012或更高版本,则可以使用所谓的本地工作区(而不是服务器工作区)。这将阻止TFS使您的文件只读。
它应该是TFS 2012+中的默认工作区类型,但是您可以通过单击源代码管理资源管理器中的工作区下拉列表,选择工作区.然后编辑您的工作区,单击“高级”,并检查您的工作区类型是否设置为“本地”。
https://stackoverflow.com/questions/24520257
复制相似问题