【问题标题】:Delphi RES files and GitDelphi RES 文件和 Git
【发布时间】:2011-01-20 12:51:25
【问题描述】:

我有一个用 Delphi 编写的大项目,我想使用 Git 管理它的源代码。我创建了 Git 存储库,其中包括我的应用程序的源代码和第 3 方组件。所有这些东西都是使用msbuild 自动构建的。

最大的问题是 RES 文件。每次我重建我的应用程序时,其中一些都会更新,有些则不会。有些有 *.rc 源,有些没有。我不能忽略所有 res 文件(.gitignore),因为没有资源我的项目将无法构建。另外,我不能包含 res 文件 - 它们会随着构建而变化,我不想在差异中看到它们。

你在 Git 下如何处理 *.res 文件?有什么建议吗?

【问题讨论】:

    标签: delphi git resources


    【解决方案1】:

    欢迎来到俱乐部。 Delphi 中的应用程序 .res 文件对于使用源代码控制的每个人来说都是一种痛苦。您想使用 auto-inc-buildnumber 但它会弄乱您的源控制。 我所做的是

    • 像这样拆分图标和版本资源:

      {$R *_icon.res}

      {$R *._version.res}

    • 禁用内部版本号的自动 inc

    • 向项目添加预构建事件

      • 在与项目对应的 .ini 文件中增加内部版本号
      • 使用 .ini 文件中的版本信息生成 .rc 文件
      • 从 .rc 文件编译一个 .res 文件
    • 将 *_icon.res 文件添加到源代码管理中,它永远不会改变,所以这是安全的

    • 将带有版本信息的 .ini 文件添加到源代码管理中,它是一个文本文件,因此很容易区分

    我编写的用于生成版本 .res 文件的工具是免费软件,available here 也来自OSDN

    【讨论】:

      【解决方案2】:

      强烈建议在任何类型的版本控制系统中禁用项目设置中的“自动递增内部版本号”。这样,将 .res 文件添加到存储库是“安全的”。

      我一直在寻找一种方法来自动更新项目 .res 文件中版本信息中的内部版本号,但最好的办法是使用版本信息更新一个额外的 .rc。但在实践中,我通常在发布二进制文件的最终版本之前将版本号更新为当前的 subversion 修订号。

      【讨论】:

        【解决方案3】:

        我将我的项目 RES 文件保存在 git 中(那些与 dpr 名称匹配的文件)。

        我相信每次构建时项目 RES 文件都会更改的唯一原因是,如果您设置了增量构建编号,这对我来说意味着您需要将 res 保留在源代码控制中,或者您不关心构建号码,所以你应该关闭该选项。

        我也有从 RC 构建的 RES 文件,每次编译都会改变,所以我有一个用于 *.res 的 gitignore,然后我为项目 RES 文件添加 git add -f project.res

        【讨论】:

        • 感谢您的提示,但我有 25 多个带有源代码的组件(以及该死的 res 文件)。找出哪些 res 文件已更改,哪些未更改将花费大量时间。但是最大的问题是必须包含一些资源(所以我这样做git add -f)并且每次我重建组件时都会更改。
        • 终于做到了。花了很多时间,但我对结果很满意。
        【解决方案4】:

        你能:

        • 忽略所有.res文件
        • 生成可以生成的.res文件(编译资源脚本.rc文件)
        • 只添加没有.rc 文件的.res 文件来生成它们:如果您在.gitignore 中指定它们将被忽略,那么添加它们是可以的:它们不会出现在差异中.

        【讨论】:

          【解决方案5】:

          根据定义,RES 文件是编译后的 RC 文件。因此,理想情况下,您应该忽略所有 RES 文件并仅提交 RC 更改。如果它以某种方式发生,您没有某个特定 RES 文件的 RC 源,那么只将这个“孤立”RES 文件添加到 git - 此类文件不应在构建之间更改(因为没有 RC 文件要生成他们来自)。如果由于某些奇怪的原因(Delphi,呵呵)这样的 RES 文件确实发生了变化,那么你注定要失败。

          底线:RES 文件是编译目标 - 与其他二进制文件(obj、exe 等)没有什么不同

          【讨论】:

          • 在Delphi中,项目的RES文件与其他二进制文件不同,它没有对应的RC,并且包含其他地方找不到的信息,例如图标和版本号
          • 我明白了。所以你注定(Delphi ftw!)跳过箍,其他答案提供详细说明:)
          【解决方案6】:

          我不知道 GIT,但在 SVN 下,我只是简单地“SVN ADD”几个重要的,而不是自动生成的。由于未版本化的文件被排除在 diff 之外,因此也需要注意这一点。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-08-08
            • 2010-09-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多