【问题标题】:Eclipse changes project settings timestamp comment after checkout结帐后Eclipse更改项目设置时间戳注释
【发布时间】:2012-04-24 07:49:58
【问题描述】:

我有一个包含许多 (> 50) 包的 Eclipse 工作区。一些包包含特殊的项目设置,例如,客户特定的代码格式。

如果我设置一个新工作区并使用客户特定的代码格式签出现有项目,Eclipse 会自动将org.eclipse.jdt.ui.prefs 中的日期注释更改为当前日期!

这是 SVN 中的首选项文件 (org.eclipse.jdt.ui.prefs):

#Tue Apr 24 09:15:20 CEST 2012
eclipse.preferences.version=1
formatter_profile=_myProfile
formatter_settings_version=12

这是结帐后的文件(org.eclipse.jdt.ui.prefs):

#Tue Apr 24 09:30:25 CEST 2012
eclipse.preferences.version=1
formatter_profile=_myProfile
formatter_settings_version=12

如果我将整个项目的编码设置为 UTF-8,org.eclipse.core.resources.prefs 设置文件也会发生同样的情况。

SVN:

#Tue Apr 24 09:26:48 CEST 2012
eclipse.preferences.version=1
encoding/<project>=UTF-8

结帐后:

#Tue Apr 24 09:28:00 CEST 2012
eclipse.preferences.version=1
encoding/<project>=UTF-8

如果项目包含两个设置文件(org.eclipse.core.resources.prefsorg.eclipse.jdt.ui.prefs),则只会更改 org.eclipse.core.resources.prefs 设置文件!

有人知道为什么 Eclipse 会更改此行以及如何避免它吗?

【问题讨论】:

  • 非常有趣的问题。我没有答案,但有一条评论:将Eclipse的设置存储在subversion中很方便,但有时它会咬你。 Subversion 只能存储完整的文件,Eclipse 的配置是部分配置,部分生成或缓存。
  • 至于 为什么 Eclipse 更改日期:这是java.util.Properties 处理的标准.properties 文件格式。它包括文件的写入日期。

标签: eclipse svn version-control project-settings


【解决方案1】:

不要将你的 Eclipse 设置存储在 subversions 中!!! 它不允许您有不同的设置或不同的 Eclipse 版本。 如果你有不同的环境,那将是一个真正的痛苦。

如果您想保持工作区设置同步,请考虑使用 Workspace Mechanics 之类的东西。

如果这只是为了共享您的格式设置,请将它们导出为 XML 并将 XML 文件存储在您的存储库中。每个开发者都可以导入 XML 文件。

【讨论】:

  • 感谢您的回答,但是 - (1) 通常我们有一个标准的开发人员 eclipse。所有开发人员都有相同的版本!但是我们需要针对不同的项目客户特定的设置。 (2) 感谢您提供指向 Workspace Mechanics 的链接。我今天就测试一下!
  • Workspace Mechanics 很好……但最后我检查了您是否可以为不同的项目设置不同的设置。我也需要为不同的项目设置不同的格式——尽管在这种情况下是由于历史原因......
  • 工作空间力学不是我们的选择!我们将开始分享整个 IDE 的格式设置,不再针对特定项目!因此,这对我来说实际上是正确的答案!
【解决方案2】:

在很多情况下我也感到困惑,但我不确定我能否给你一个完整的答案。

首先,我的org.eclipse.core.resources.prefs 文件从不包含时间戳!我还有其他偏好文件——比如org.eclipse.jdt.ui.prefs——似乎总是有时间戳。在我目前的设置中,它们似乎从未过度更新。

偏好 API 有几代

  • org.eclipse.core.runtime.Preferences - 通过 Plugin.getPluginPreferences() 访问 - 在 Eclipse 3.0 中已弃用;现在模拟 - 不要使用这个!
  • org.eclipse.jface.preference.* - 通过 AbstractUIPlugin.getPreferenceStore() 访问 - 在 Eclipse 3.1 中被取代;现在模拟 - 用于字段编辑器
  • org.eclipse.core.runtime.preferences.* - 通过 Platform.getPreferencesService() 访问 - 基于 OSGi 首选项服务

那些使用第三代 API 的首选项,读写首选项文件似乎总是通过EclipsePreferences 发生。这个类做了“正确”的事情并删除了时间戳。

在某些情况下 - 例如在处理 JDT 中的格式时 - 使用了特殊的 org.eclipse.jface.preference.PreferenceStore。这个类没有做正确的事情,只是写出时间戳。

为什么要使用这个类,具体在什么情况下使用,从代码中不是很清楚...

有一点是肯定的,但我找不到避免这种情况的方法!

【讨论】:

    【解决方案3】:

    这可能是行尾的问题吗?您的特定 Eclipse 版本的特性?

    如果 SVN 中用于文件的 EOL 字符与用于开发的机器上的默认值不匹配,我可以想象 Eclipse 重写设置文件而没有任何明显的实质性变化。但是,在这种情况下,您应该只在切换机器时看到问题。解决方法是将svn:eol-style = native 属性添加到有问题的文件中。

    我限制自己对问题的猜测,因为我无法复制您看到的行为,无论是否有不匹配的行尾。我在 repo 中有许多带有配置文件的 Eclipse 项目,尽管 Eclipse 不经常以不合需要的方式自动更改它们,但它们总是会发生实质性的变化。仅通过在 Eclipse Helios SR2(更符合您的设置文件的格式)或 Eclipse SDK 3.7.2(M20120208-0800)上导入他们的项目,我无法获得任何设置文件来仅更改其日期戳。也许仅仅升级 Eclipse 就可以解决问题(一定要导出你的设置!)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2011-09-05
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多