有没有办法强制同步 Visual Studio 代码扩展在单独的机器 运行 不同的 OS 上?

Is there a way to force sync Visual Studio Code extensions on a seperate machine running a different OS?

配置偏差

当我使用两个系统时,我希望它们都与同一组扩展同步。 在我的例子中,我使用的主要系统正在工作,一旦我在家里加载我的编辑器,我希望任何卸载或添加的扩展最终都能同步。

这不会发生。

我的设置

手动修复

我想强制同步扩展以使其对齐,但在设置同步中似乎没有办法做到这一点 UI。

我的临时解决方案是禁用所有扩展,然后使用 PowerShell 解析备份的 json 以转换为 code install-extension 命令。这并没有解决它,因为它仍在漂移。

我的理解是键绑定在每个平台上都是唯一的,但扩展应该是唯一的。

长期解决问题

有什么我应该检查的,以防止扩展与内置 Visual Studio 代码设置同步同步。

Note: I'm not using the Shan.code-settings-sync extension at this time, having migrated over in the last year to the built in sync solution. If I don't figure this out I might consider changing back over.

如果我可以通过日志解决实际导致此类漂移的原因,我将根据我的进度更新它 post。

手动修复

要手动恢复,该选项不包含在上下文菜单中,而是包含在悬停时出现的图标。

Restoring Extensions

在此处使用还原图标。

更新:据我所知,这解决了我的问题。 我刚刚在 Windows 上打开了 VSCode,几个小时前我在 macOS 上安装的扩展现在可以正确显示了。

我也发现内置的 Vscode 设置同步功能在同步扩展时有错误。如果在两台不同的机器上安装了两个干净的 vscode,我的 none 扩展已同步。

  1. 似乎不​​存在的扩展(也许开发者删除了他们的扩展)会导致 所有 扩展无意中成为文件中的 'blacklisted' lastSyncextensions.json 在键 "skippedExtensions":[] 下。您可以通过命令 Settings Sync : Open Local Backups Folder 访问此文件。对我来说,我所有的扩展都被列为要跳过​​,因此没有扩展在 vscode.

    的新安装上同步
  2. 同步时出现暂时性互联网错误,例如在日志 [settingssync] [error] Download: XHR failed 中也会导致扩展在上述 lastSyncextensions.json 中的 "skippedExtensions" 中被列入黑名单。这有时也会导致 vscode 广播无法下载的扩展被其他机器删除 运行 vscode(使用相同的 Github 帐户同步)。

查看 vscode Settings Sync : Show Log 并查找跳过的扩展列表。

一旦某些东西被列入黑名单 - 问题是如何解决这个问题。

解决方案 1 - 从被不存在的扩展阻止的所有扩展中恢复

第 1 步:

识别不再存在的扩展(在 vscode 扩展 UI 中搜索它们,如果它们没有出现,那么它们就是罪魁祸首)。对我来说,它们恰好是 "skippedExtensions" 列表中的前几个条目。然后将它们添加到 settings.json"settingsSync.ignoredExtensions"。对于我的情况,我添加了条目:

"settingsSync.ignoredExtensions": [
    "patrys.vscode-code-outline",
    "gayanhewa.referenceshelper",
    "ms-vscode-remote.remote-ssh-explorer"
],

第 2 步(残酷的重新同步):

现在我们需要重新同步。通过您机器上的 Settings Sync:Show Synced Data / "Synced Machines" r.click 和 select "Turn off Settings Sync" 关闭设置同步。这似乎比简单地退出设置同步更有效。

现在单击正常的 vscode 齿轮图标(左下方)并登录到设置同步。这提示我像全新安装,是否合并,覆盖本地等。这次所有的扩展都OK了。

解决方案 2 - 从暂时性互联网错误导致的黑名单扩展程序中恢复

假设您在同步日志 (Settings Sync : Show Log) 中看到一些 skipped 扩展:

[2021-12-30 14:05:57.690] [settingssync] [info] Extensions: Updated last synchronized extensions. Skipped: ["sapos.yeoman-ui","tht13.html-preview-vscode","patbenatar.advanced-new-file","alexisvt.flutter-snippets","vscjava.vscode-java-pack","vscjava.vscode-java-dependency","vscjava.vscode-java-test","vscjava.vscode-maven","vscjava.vscode-java-debug","janisdd.vscode-edit-csv","mohd-akram.vscode-html-format","zjhmale.vscode-ag"].

这会导致您机器上的文件 lastSyncextensions.json 中密钥 "skippedExtensions" 下的这些扩展似乎被永久列入黑名单。你如何解决这个问题?

You can get to lastSyncextensions.json via the command Settings Sync : Open Local Backups Folder and then open the file in vscode itself.

为了正确安装这些扩展,我编辑了 lastSyncextensions.json 并清除了列表 - 它现在显示为 "skippedExtensions":[]。 然后我使用 vscode UI 转到之前跳过的每个特定扩展,并安装它。这也应该在可能受到影响的任何其他 vscode 机器上重新安装它。

Possibly, a simpler solution 2 (which I haven't tried) is don't bother with editing the file lastSyncextensions.json - simply do the brutal re-sync described in step 2 of my solution 1 above. Thus hopefully the lastSyncextensions.json gets regenerated (as well as the problematic "skippedExtensions": entry) and this time pray your internet connection is good and there are no download errors this time.

我只需要关闭和打开设置同步就可以了。