我们有一个我们想要与Subversion一起使用的Web应用程序框架。我们在设置它之前已经尝试了几次,但是我们的应用程序的代码生成部分导致了问题。
问题在于,来自一个开发人员的生成代码可以是比另一个开发人员更新的文件,但是较新文件的内容可能较旧,因为作为代码生成基础的代码和xml文件具有由开发人员nr2更新。
我们看到的一个解决方案是排除代码生成的文件,但我们经常会获得生成的新文件,并且它们会自动添加到存储库中,除非我们记得将其排除,我们必须手动签入最新生成的文件。你怎么知道你是否有最新生成的文件?
有关如何在Subversion中解决此问题的任何建议吗?
答案 0 :(得分:24)
决定是否应该在Subversion中的某些内容的最佳方法是记住它是版本控制系统。 如果您不需要记住它随时间的变化情况,则无需在svn
。使用 svn:ignore
排除来自这种考虑的文件。
这就是这种情况:您不关心生成的文件如何随时间变化,只关注用于生成它们的原始代码。这意味着他们应该被排除在Subversion之外。您可以使用预提交挂钩执行此操作 - 例如,强制执行所有代码生成的文件不应该提交。我对这个策略有一个最喜欢的短语:“版本的配方,而不是蛋糕。”
你怎么知道你是否有最新生成的文件?
完全;你没有,因为生成的文件依赖于用于创建它们的源。下一步是确保您的构建过程在给定初始源代码的情况下自动生成这些文件,但如果您不知道如何执行此操作,那么这可能是一个单独的StackOverflow问题。
答案 1 :(得分:10)
我们研究过的一个解决方案是排除代码生成的文件
是的!一千次是的!永远不要对可以从其他文件生成的文件进行版本控制。而是将生成规则添加到makefile(或其他构建脚本)。
它们会自动添加到存储库
什么是自动添加它们?据我所知,我总是不得不手动添加文件。如果自动添加的工具是错误的,那么修复该工具是否正确?
除非我们记得将其排除
你有生成工具添加评论说“由$ TOOL自动生成的文件”,并添加一个subversion挂钩,它会抓取该注释的文件并拒绝它们。为代码生成工具做出适当的规定;例如:如果文件包含“自动生成”注释,如果它在同一行的注释中也有“svn rejection except”,则添加它。
你怎么知道你是否有最新生成的文件?
通过最新的配方生成它,这是最新的subversion提交。
答案 2 :(得分:4)
您应该使用svn:ignore,因为您根本不想将自动生成的内容提交给subversion。
答案 3 :(得分:2)
也许我很简单,但我不会将生成的文件存储在版本控制中。由于它是生成的,因此无法保留它的版本历史记录。
使用代码和xml在版本控制中进行生成,您始终可以为每个版本生成代码。
答案 4 :(得分:0)
另一个好策略是不在生成的文件中编写代码。让他们分开。 然后无论是谁生成它们都没关系。
保持逻辑不在生成的文件中。
答案 5 :(得分:0)
将生成的文件命名为“className.autoGenerated.cs”,并使用相应的名称模式“* .autoGenerated.cs”添加递归 svn:ignore 属性。