如何管理 git 存储库中的 IDE 文件?

Posted

技术标签:

【中文标题】如何管理 git 存储库中的 IDE 文件?【英文标题】:How to manage IDE files in a git repository? 【发布时间】:2013-06-10 12:55:00 【问题描述】:

该应用程序是使用 Sencha Architect 开发的,它使用大量辅助文件来管理各种与 IDE 相关的东西(导出路径、IDE 的版本控制等)。

每次团队成员在 Sencha Architect IDE 中打开项目时,其中一些文件都会发生变化。

举一个特别烦人的变化的例子,考虑一下 Architect 生成的*.xds 文件中的属性exportPath。我将有一个我选择的服务器发布到一个特定的路径,其他团队成员将有不同的服务器/路径配置。

在我们的代码库中,我非常希望有 IDE 文件:

    在单独的存储库中, 在子模块中(是的,特定于 git,我知道)或 驻留在用户计算机上,VCS 不会注意到它们的变化。

这里要注意的关键是,Sencha Architect 期望文件位于与项目相关的特定位置,因此 IDE 文件必须与普通源文件位于同一位置。

此外,使用 .gitignore 也不是一个选项,因为 Sencha Architect 会在其中的一些文件中写入对其他团队成员正确打开它们至关重要的信息。例如。在打开项目时,Sencha Architect 可以决定将项目升级到更新版本(如果您想打开项目,它是非可选的),并且在更新过程中,IDE 会修改一些源代码-代码文件。其他团队成员必须知道版本升级才能正确打开项目。

This SO question 为 Sencha 使用的复杂格式提供了一些背景信息。我原谅我在评估 Sencha Architect 架构时的负面语气,但他们似乎把一个好主意(使用元数据和代码生成)做得太过分了(使所有优秀的 unix 工具的使用无效,包括 git)。

这里的首选方法是什么?为什么?

【问题讨论】:

这取决于文件对项目的重要性。例如,对于 C# 和 ReSharper,.DotSettings 文件被放入 VCS,而 .user.DotSettings 文件则不是。只是问自己一个问题:如果文件丢失,是否可以构建项目?它会正确构建吗? @Athari:感谢您的评论,我已经用与此相关的更多信息更新了问题 如果项目级和用户级选项混合在一个文件中,恐怕没有简单的解决方案。您不能只提交文件的某些部分而忽略其他部分,AFAIK。我会向 Sencha 提交功能请求,将选项分成不同的文件。同时,您可以与其他开发人员达成协议,仅在有重大更改时才提交 IDE 文件,并处理合并选项。 @ThorbjørnRavnAndersen:git 子模块(或子树)似乎是一个可行的解决方案,这就是我在问题中提到它们的原因。但是怎么做?子模块的管理加上 Sencha Architect 要求将 IDE 文件与源文件放在一起似乎使得这很难做到...... 【参考方案1】:

除非您有非常令人信服的理由,否则不应对 IDE 文件进行版本控制。也许您的项目仅使用特定 IDE 中的插件构建,您需要对这些设置进行版本控制。如果您不需要这些文件来构建或运行您的项目,您可能不应该对它们进行版本控制。

您可以使用 Git ignore those files。特别是,IDE 文件非常适合全局 gitignore,因为每个用户都可以使用他们想要的任何 IDE,并且这些设置应该应用于他们的所有存储库。

【讨论】:

我完全同意你的看法。然而,这个项目已经有各种版本控制下的 IDE 文件,团队成员依赖于 VCS 中的文件。 Gitignoring 它们不是一种选择,因为 Sencha Architect 会在其中的一些中写入对其他团队成员正确打开它们至关重要的信息。我会将这个添加到问题中。谢谢。【参考方案2】:

对 IDE 文件使用版本控制可能会有所帮助,但存储用户特定设置的文件除外。另见https://intellij-support.jetbrains.com/hc/en-us/articles/206544839-How-to-manage-projects-under-Version-Control-Systems。

对这些文件使用版本控制的好处是

为整个开发团队共享代码样式 管理和共享受版本控制的嵌套存储库。 等

【讨论】:

您的链接已损坏,当前工作链接为intellij-support.jetbrains.com/hc/en-us/articles/…

以上是关于如何管理 git 存储库中的 IDE 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 git 存储库中的 jar 文件添加为 gradle 中的依赖项?

如何使用 git diff 比较不在存储库中的两个远程文件?

如何在 Git 存储库中删除多个已删除的文件

如何将文件从一个文件夹移动到同一git存储库中的另一个文件夹保留历史记录[重复]

如何仅删除远程存储库中的文件? [复制]

如何将 Git 存储库转换为嵌套在另一个(父)Git 存储库中的子模块?