在Subversion提交之前修改文件

时间:2009-03-31 21:01:45

标签: svn tortoisesvn

我正在使用TortoiseSVN for Windows,想知道我是否可以设置某种宏来修改提交中存储库中的一个文件。

在我的subversion存储库中,我有一个名为“Web.Config”的XML文件。在该XML文档中设置了一些标记名为“add”的节点,这些节点表示XML Path / Configuration / appSettings下的“Build Number”,“Build Description”和“Last Build Date”。此XML文件使用“添加”节点上的“key”属性来确定正在设置哪些设置。

上述节点在每次提交之前都会手动更改(据说,但我并不总是这样做)。

我的问题是:   我提交时是否可以在文件中修改这些设置?

4 个答案:

答案 0 :(得分:2)

考虑使用subwcrev.exe将构建(修订版)编号注入提交后的web.config 中。这是我通常的经验(而不是在提交之前完成) - 只需将subwcrev添加为构建步骤,构建后步骤或“发布”步骤的一部分。

正如我在上面的评论中所说,我不太确定使用预提交钩子是一个好主意,因为这意味着你的本地文件在你提交它的那一刻就会立即过时。

答案 1 :(得分:1)

您可以使用预提交钩子脚本。 预提交挂钩允许您在服务器提交更改之前执行脚本。关于设置预提交钩子脚本的好文章是here

答案 2 :(得分:0)

也许使用svn pre-commit hooks?

另一个选项(我更喜欢和使用的那个)是在构建期间将这些数据放入Web程序集中,然后在代码中以编程方式读取它。如果您使用的是.NET,那就是:)

  1. 在构建中添加一个步骤以生成通用的AssemblyInfo.cs。 (见[http://blog.darrenstokes.com/2007/12/17/ease-versioning-multiple-assemblies-by-splitting-up-assemblyinfo/]1
  2. “添加为链接”此文件到您的每个项目
  3. 当您需要此信息时,您可以从Reflection获取它,例如:

    System.Diagnostics.FileVersionInfo version = System.Diagnostics.FileVersionInfo.GetVersionInfo
        (System.Reflection.Assembly.GetExecutingAssembly()。Location);

    Console.Out.WriteLine(“MyApplication v {0} by Me”,version.FileVersion);

答案 3 :(得分:0)

也许您可以找出一个不需要修改这样的文件的不同系统。

另外,我怀疑你有非源,非依赖可部署的承诺源代码控制。我只包含项目的源代码以及项目在源代码管理中引用的第三方程序集。我会忽略您的项目'\bin\obj目录。

每个人都应该能够从源代码控制中检查最新的(或任何版本),为其环境设置外部因素(创建数据库,设置权限等),执行项目的构建脚本,并拥有功能齐全的应用程序。

但是直接在源代码控制中保留最新的.dll或.msi并不是拥有一个功能齐全的项目所必需的,而且可能不是一个好主意。