14

我知道它已经一次又一次地出现,但我的具体问题是:我有多个使用 wpt、cdt 和 jdt 扩展(和其他扩展)的工作区。我想创建从所有工作区到设置文件子集的硬链接(我在 Windows 上),这些设置文件管理快捷方式、工作区首选项等。例如,当我在一个工作区中更改快捷方式时,更改将传播到所有其他工作区。问题是 .metadata/.plugins 文件夹一团糟(我相信设置都在那里)。例如,我知道我必须链接文件:

<workspace>\.metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.jdt.core.prefs
<workspace>\.metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.jdt.ui.prefs

我相信我不应该尝试链接整个 .metadata/.plugins 文件夹,因为它包含特定于工作空间的数据。

  • 硬链接目录是否安全足够\.metadata\.plugins\org.eclipse.core.runtime\.settings

  • 有人可以向我指出一些关于里面所有这些.index.dat二进制文件的文档\.metadata\.plugins\吗?

  • 如果这是不可能的,我至少会感谢目录中各种.prefs文件的参考\.metadata\.plugins\*\.settings,尤其是.metadata\.plugins\org.eclipse.core.runtime\.settings那个

谢谢

4

3 回答 3

8

好吧,我所做的(Windows 7 上的 Eclipse Juno)是:

  • 创建了一个新的 eclipse 工作区,比如说test,运行它然后关闭它

  • 把它变成了一个 git repo

  • 将 eclipse 创建的文件连同这个 .gitignore 一起提交:

    # binary files
    *.dat
    *.tree
    *.index
    .metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache
    .metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache
    .metadata/.mylyn/repositories.xml.zip
    *.resources
    
    # logs
    *.log
    
    .metadata/.lock
    
    # later additions
    .metadata/.plugins/org.eclipse.pde.core/.cache/
    *.running
    
  • 切换到新分支

    启动我的一个工作区,导出所有设置,然后启动test工作区并导入它们。在 Beyond Compare 的帮助下比较了工作空间的 .metadata/ 目录。除了文件之外,这些文件.metadata\.plugins\org.eclipse.core.runtime\.settings\夹是相同的org.eclipse.ui.workbench.prefs- 但差异似乎并不重要(即特定于工作区)。在关闭工作区时,该文件org.eclipse.jdt.launching.prefs也被修改了。切换到 master 并在我的其他工作区重复。


有并发症 - 例如:

  • 该文件org.eclipse.jdt.core.prefs存在于test工作区中,而在原始工作区中(从我导入)有(二进制相同)org.eclipse.jdt.core.prefs.bak

  • 文件org.eclipse.pde.core.prefs未导入

  • 文件org.eclipse.jdt.launching.prefsorg.eclipse.ui.workbench.prefs不同。

在第五个工作区之后,我确定了文件

.metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml 
.metadata/.plugins/org.eclipse.jdt.launching/.install.xml

在导入设置时创建(在新工作区中),文件.metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.pde.core.prefs未导出/导入,文件在导入.settings\org.eclipse.ui.workbench.prefs合并(即 *ENABLED_DECORATORS* var 保持原样)并org.eclipse.jdt.launching.prefs在关闭 Eclipse 时进行编辑。

还有其他复杂情况,例如包含项目引用的文件:

  • 例如,该文件org.eclipse.wst.sse.core.prefs包含工作区中的项目名称 - 我将其报告为错误(修复得非常快!)。

  • CDT 创建了一堆文件,例如:

    .settings/org.eclipse.cdt.core.prj-<projectName>.prefs
    .settings/org.eclipse.cdt.ui.prj-<projectName>.prefs
    

在导出/导入时盲目同步。这实际上是一个比之前报道的要复杂得多的案例。

实际上,您在.settings目录中的任何内容都会被复制(我想只要它有.prefs后缀)。这需要另一个错误报告。

在其他包含工作区特定选项的文件中会遇到类似的情况 - 例如org.eclipse.ui.ide.prefs其中包含对工作集的引用 - 这是相当工作区特定的 - 或org.eclipse.ui.browser.prefs其中包含 internalWebBrowserHistory - 通常也是工作区特定的。


无论如何,我决定使用硬链接 - 所以我规范了我的偏好(从一个新的工作区开始会容易得多)并复制了除org.eclipse.wst.sse.core.prefs, thecdt和 the之外的所有设置org.eclipse.pde.core.prefs(因为某些原因它没有被导入.org.eclipse.ui.workbench.prefs比较特别的还包含快捷键)。然后我运行:

REM move_settings.bat
set SETTINGS_DIR=C:\path\to\tempalte\workspace\.metadata\.plugins\org.eclipse.core.runtime\.settings
set WORKSPACE_SETTINGS_DIR=C:\path\to\actual\workspace\.metadata\.plugins\org.eclipse.core.runtime\.settings
mkdir %WORKSPACE_SETTINGS_DIR%\zBackups
pause
FOR /F %%G IN ('DIR^ %%SETTINGS_DIR%%^ /b') DO (
    move %WORKSPACE_SETTINGS_DIR%\%%G %WORKSPACE_SETTINGS_DIR%\zBackups
    mklink /H %WORKSPACE_SETTINGS_DIR%\%%G %SETTINGS_DIR%\%%G
)
pause

对于我的工作空间。

猜猜看:eclipse 会破坏硬链接。我尝试了软链接 ( mklink %WORKSPACE_SETTINGS_DIR%\%%G %SETTINGS_DIR%\%%G),但也没有任何乐趣。

最后

我不得不硬链接(连接)整个设置目录(以及我提到的所有有问题的文件)——这真的不是一个解决方案。在这些日子里,必须解决这种情况。无论如何,这是.bat我使用的:

:: Change to the directory that this batch file is in
:: NB: it must be invoked with a full path!
:: run the bat from the dir you want to backup your prefs to
for /f %%i in ("%0") do set curpath=%%~dpi
cd /d %curpath%

set WORKSPACES=javaEE\ javaSE\ c++\ python\ android\

set TEMPLATE_WORKSPACE=name_of_the_template_workspace\
set WORKSPACES_DIR=C:\Dropbox\eclipse_workspaces\
set SETTINGS_DIR=.metadata\.plugins\org.eclipse.core.runtime\.settings
REM set SETTINGS_DIR=.metadata\.plugins\org.eclipse.core.runtime\.settings\ WONT DO
set TEMPLATE_SETTINGS_DIR=%WORKSPACES_DIR%%TEMPLATE_WORKSPACE%%SETTINGS_DIR%

for %%G in (%WORKSPACES%) do (call :subroutine_needed %%G)
GOTO :eof

:subroutine_needed
    set WORKSPACE=%1
    set WORKSPACE_SETTINGS_DIR=%WORKSPACES_DIR%%WORKSPACE%%SETTINGS_DIR%
    set BACKUP_DIR=%CD%\zBackups\%WORKSPACE%
    mkdir %BACKUP_DIR%
    pause

    move %WORKSPACE_SETTINGS_DIR% %BACKUP_DIR%
    pause

    junction  %WORKSPACE_SETTINGS_DIR% %TEMPLATE_SETTINGS_DIR%
    pause

我会根据需要更新这篇文章

于 2012-11-25T02:12:57.773 回答
6

你也可以看看workspace mechanic,一个由谷歌开发的小插件:http ://code.google.com/a/eclipselabs.org/p/workspacemechanic/

28/11/12 更新

据我了解,您需要保持同步一些插件首选项。

维基解释很好。我向您推荐的步骤如下:

有了它,您应该能够处理同步您的工作区首选项。

奖励:我喜欢将工作区机制首选项放在 Dropbox 上,以便在团队成员和/或我的计算机之间共享,您可以在这里找到一个小的操作方法:https ://gist.github.com/3090900

希望这可以帮助。

问候

于 2012-11-27T23:09:14.707 回答
4

遗憾的是,仍然必须有解决方法。我做了与你类似的步骤,但我首先尝试硬链接,然后做了 git 存储库。

对我来说,git 存储库是更好的选择,因为我想在多个工作站上同步我的工作空间。所以对于所有仍在寻找解决方案的人,我就像你一样开始:

  • 创建一个干净的工作空间
  • 在 .metadata 中创建 git-Repo
  • 重启 Eclipse 看看有什么变化
  • 创建另一个工作区,看看有什么变化
  • 等等 ..

到目前为止,我设法拥有一个.gitignore包含所有不需要或不重要的东西。我的工作空间仍然不是 100% 可移植的,但几乎..

当我启动一个新的 Eclipse 工作区时,我必须做的就是这么git clone简单。缺点是有些设置没有被跟踪。这些主要是 GUI 设置,几乎也包含特定于工作区的设置。

所以使用这个 .gitignore 你可以有一个手动同步的工作区,它适用于大多数设置。但是需要保养。。

/.lock
*.log
*.index
/.plugins/org.eclipse.core.resources/.projects
/.plugins/org.eclipse.epp.usagedata.recording
/.plugins/org.eclipse.core.resources/.history
/.plugins/org.eclipse.ltk.core.refactoring/.refactorings
/.mylyn
/.plugins/org.eclipse.core.resources/.root/
/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources
/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.egit.core.prefs
/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.usagedata.recording.prefs
/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs
/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.core.prefs
/.plugins/org.eclipse.jdt.core/
/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml
/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml
/.plugins/org.eclipse.jdt.ui/jdt-images/
/.plugins/org.eclipse.ui.workbench/workingsets.xml
/.plugins/org.eclipse.wb.discovery.core/
/.plugins/org.eclipse.wb.core/
/.plugins/org.eclipse.wst.internet.cache/cache.xml
/.plugins/org.eclipse.team.ui/syncParticipants.xml
/.plugins/org.eclipse.team.cvs.core/.running
/.plugins/org.eclipse.ui.workbench/workbench.xml
/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.egit.ui.prefs
/.plugins/org.eclipse.m2e.core/nexus/
/.plugins/org.eclipse.m2e.core/workspaceState.ser
/.plugins/org.eclipse.debug.core/.launches/
/.plugins/org.eclipse.debug.ui/launchConfigurationHistory.xml
/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.java.ui.prefs
dialog_settings.xml
/.plugins/org.eclipse.core.resources
/.plugins/org.eclipse.recommenders.rcp
/.plugins/org.eclipse.e4.workbench/workbench.xmi
/.plugins/org.eclipse.recommenders.completion.rcp.calls
/.plugins/org.eclipse.recommenders.completion.rcp.overrides
/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs
/.plugins/org.eclipse.wst.sse.core

我的提示是,您可以查看每次关闭 Eclipse 后发生的变化。这就是帮助我创建这个 gitignore 文件的原因,它比插件更有效。

于 2013-08-08T11:27:30.367 回答