我应该将 .vscode 文件夹提交给源代码管理吗?

Should I commit the .vscode folder to source control?

.vscode 文件夹是否要提交给源代码管理?

在新项目中,文件夹是空的,只有 settings.json 文件。什么样的东西会进入这个文件夹?它是特定于机器的,特定于开发人员的,例如 .vs 文件夹,因此不被提交吗?还是所有开发人员都应该共享此文件夹,因此应该提交它?

文件顶部的注释 .vscode/settings.json 指出:

// Place your settings in this file to overwrite default and user settings.
{
}

这似乎暗示该文件夹应包含特定于项目的设置,因此应包含在源代码中。此外, this post on UserVoice 似乎暗示一些类型会进入那里,也暗示它应该被提交。

如果您想与团队共享设置、任务配置和调试配置,请检查 .vscode 文件夹。如果您想在团队中强制执行设置,我认为通常与团队共享设置(例如空格与制表符)是有意义的。我们在 VS Code 团队中也共享调试和任务特定设置,因为我们希望我们的团队拥有相同的 VS Code 调试目标和任务目标集。

顺便说一下,您不需要在项目中有一个 .vscode 文件夹来进行设置。您还可以在用户级别配置设置。

答案是"NO",因为.vscode文件夹是给这个编辑器的,你不应该把这些个人设置推送到repo,以防万一混淆其他人,所以你可以将它添加到项目的 .gitignore 文件中以忽略更改

  • 从不提交 .vscode/settings.json - 除了 search.exclude 的奇怪例外。如果您真的需要,请非常小心,只将您想要 强制 的项目特定设置提供给其他开发人员。
  • 用于验证、格式化、编译使用其他文件,如 package.json.eslinttsconfig.json
  • 唯一有意义的 .vscode 是用于调试的复杂启动配置。
  • 小心,您的系统中可能存在第三方扩展,可以将私人信息放在那里!

您不能 做的是将整个 settings.json 内容文件复制并粘贴到 .vscode/settings.json。我看到有些人这样做并且提交文件是一种暴行。在这种情况下,您不仅会破坏其他人的工作空间,而且最糟糕的是,您将向用户强制执行您不应该喜欢美学、UI、体验的设置。您可能会破坏他们的环境,因为有些环境非常依赖系统。假设我有视力问题,所以我的 editor.* 用户设置是个性化的,当我打开您的项目时,视觉效果会发生变化。假设我有视力问题,我需要个性化用户编辑器。* 设置才能工作。我会生气的。

如果你是认真的,请不要犯 .vscode/settings.json。一般来说,对验证、编译等特定项目有用的设置是有意义的,但通常你可以使用特定的工具配置文件,如 .eslint、tsconfig.json、.gitignore、package.json。等。我想 vscode 作者只是添加了该文件以简化新手体验,但如果你想认真的话就不要这样做!

唯一的例外,在非常特殊的情况下可能是 search.exclude

在 commit/ignore 之间有第三个聪明的选择:使用 .default 后缀提交。

例如,您可以将 settings.json 添加到 .gitignore,然后提交 settings.json.default,这很像(在我的团队中)使用 .env 文件的常见做法。

我从视频中得到了这个建议Commit editor settings to version control? by Mattias Petter Johansson

同其他答案:没有。

作为示例,考虑 Git 2.19(2018 年第 3 季度)选择的方法,它添加了一个脚本(在 contrib/ 中)以帮助 VSCode 的用户更好地使用Git 代码库。

换句话说,生成 .vscode 内容(如果它还不存在),不要对其进行版本控制。

commit 12861e2, commit 2a2cdd0, commit 5482f41, commit f2a3b68, commit 0f47f78, commit b4d991d, commit 58930fd, commit dee3382, commit 54c06c6 (30 Jul 2018) by Johannes Schindelin (dscho)
(由 Junio C Hamano -- gitster -- in commit 30cf191 合并,2018 年 8 月 15 日)

contrib: add a script to initialize VS Code configuration

VS Code is a lightweight but powerful source code editor which runs on your desktop and is available for Windows, macOS and Linux.
Among other languages, it has support for C/C++ via an extension, which offers to not only build and debug the code, but also Intellisense, i.e. code-aware completion and similar niceties.

This patch adds a script that helps set up the environment to work effectively with VS Code: simply run the Unix shell script contrib/vscode/init.sh, which creates the relevant files, and open the top level folder of Git's source code in VS Code.

除了这里的争论之外,为什么不只看实践呢?

我目前发现的保持 .vscode 的最大项目之一是 Mozilla Firefox。 Firefox 团队似乎分享了 their common tasks 和推荐的扩展。

所以我想保留 .vscode 并不是一个坏主意,只要你知道自己在做什么。

当我看到共享 .vscode 的其他大项目时,我会更新此 post。

总结其他答案

建议通常排除 .vscode 文件夹,但保留 select JSON 允许其他开发人员重新创建共享设置的文件。

要包括的设置示例:

  • 运行 测试套件 (settings.json)
  • 的特定语言测试配置
  • linter 和代码格式化工具的扩展设置,以强制执行此存储库中使用的语言规则 (settings.json)
  • 运行 和调试配置 (launch.json)
  • 共享任务 - 如果使用 VS Code 管理 (tasks.json)

请注意,某些设置可以存储在用户设置或工作区文件中,或从 .vscode 文件夹传输到其中。见下文。


示例.gitignore代码

这是 https://gitignore.io 中建议的设置。您可以在那里搜索“VisualStudioCode”以获取最新推荐的 .gitignore 文件。我使用这个网站作为 .gitignore 我大部分新回购协议的起点:

# Created by https://www.gitignore.io/api/visualstudiocode
# Edit at https://www.gitignore.io/?templates=visualstudiocode

### VisualStudioCode ###
.vscode/*      # Maybe .vscode/**/* instead - see comments
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

### VisualStudioCode Patch ###
# Ignore all local history of files
**/.history

# End of https://www.gitignore.io/api/visualstudiocode

在上面的 .gitignore 文件中,.vscode/* 行(注意:关于是否应包含 * 的一些争论 - 请参阅评论;.vscode/**/* 可能更好也忽略嵌套文件夹)表示排除 .vscode 文件夹中的所有内容,但是 !.vscode/a_specific_file 行告诉 git “不”忽略该文件夹中的某些特定文件(settings.jsonlaunch.json、等等)。最终结果是 .vscode 文件夹中的所有内容都被排除在外,但在其他行之一中特别命名的文件除外。


其他因素

在您的存储库中包含 .vscode 文件夹实际上不会 伤害 使用不同 IDE(或 text/code 编辑器)的任何人.

但是,如果这些文件包含需要特定于您的环境的通用设置(例如安装存储库的绝对路径),则可能会导致其他使用 VS Code 的人出现问题,或者某些设置可能无法正确加载in.关键是要避免保存你本地环境自定义的设置,只分享大家可以使用的设置。

例如,如果 IDE 设置文件有 repo 或任何 files/libraries 等的绝对路径,那就不好了,不要共享。但是,如果所有引用都是相对的,那么它们应该适用于使用 repo 的任何人(尽管要注意 Windows/Unix.. 之间的路径规范差异)。


关于用户、工作区和文件夹设置

注意: .vscode 文件夹中的设置文件通常在您更改 文件夹 版本时更新设置 - 但这似乎取决于各个扩展名的编码方式,因为我 运行 对此规则有多个例外。

  • 如果您更改 user 设置,它们通常存储在其他地方(位置取决于 OS 设置,通常在主目录中)。
  • 如果您更改了 工作区 设置,它们通常存储在您当前使用的 *.code-workspace 文件中。如果您没有工作区(您直接打开了一个文件夹),那么它们可能会转到 .vscode 文件夹,但是,总的来说,这可能取决于拥有该设置的扩展程序。

因此,您通常应该将个人 PC 的自定义设置放入 用户 设置中,并将通用设置放入工作区或文件夹设置中。

  • 异常示例:Python 扩展更新 .vscode/settings.json 以在 pythonpath 设置下具有当前文件夹的绝对路径,这使其特定于当前 PC。

一种无需在项目 git 存储库中提交设置即可保留设置的简单方法是创建一个工作区并将文件夹添加到其中。

创建工作区时,需要保存一个文件code-workspace。此文件包含自定义设置,只需将此文件保存在 git 存储库之外,即可将 .vscode 添加到 .gitignore 文件中。

好吧,这似乎已经很晚了,但是如果您发现很难在不包含任何子文件的情况下忽略 .vscode/,您可以忽略该目录:

.vscode/

然后手动跟踪你想要的文件:

git add -f .vscode/launch.json

-f 即使文件被忽略也会添加文件。一旦 Git 看到对 .vscode/launch.json 的更改,系统将提示您像提交任何其他文件一样提交它们。

这实际上对我有用,导致我遇到同样的问题,试图忽略 .vscode/ 路径,而不包含子文件 settings.json