【问题标题】:Should I commit the .vscode folder to source control?我应该将 .vscode 文件夹提交到源代码管理吗?
【发布时间】:2016-01-03 01:45:00
【问题描述】:

.vscode 文件夹是否旨在提交源代码管理?

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

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

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

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

【问题讨论】:

  • 如果你在 Visual Studio 中启动一个项目然后提交它应该有一个正确的(至少是典型的)启动 .gitignore FE。如果它注定在那里,它可能会在那里。你也可以参考this,我用过没有问题。
  • 好主意,@ChiefTwoPencils!作为记录,Visual Studio 创建的默认.gitignore 确实在此时排除了.vscode 文件夹。但由于 VS Code 本身相当新,他们可能还没有开始接触它。在获取更多信息时,我暂时未跟踪该文件夹。
  • 如果你正在阅读这篇文章,请订阅github.com/microsoft/vscode/issues/15909,也许有一天你会很开心????

标签: visual-studio-code


【解决方案1】:

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

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

【讨论】:

  • 如果您想共享文件级设置,例如“空白与制表符”,那么您应该查看像 EditorConfig 这样的交叉编辑器解决方案。
  • 此目录有一个 80 MB 大小的子目录“chrome”。您确定这应该提交到存储库吗?
  • 您不能将 VSCode 用于诸如 python 项目之类的东西,其中工作区设置将具有用于 VirtualEnv 或 Anaconda 环境之类的特定于环境的 python 路径。在大多数情况下,检查这些文件听起来像是一个大问题。改为签入示例/默认文件。
  • 所以,这个流行的答案似乎是错误的/不完整的。
  • 这不会限制开发者对 IDE 的选择吗?
【解决方案2】:

总结其他答案

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

要包括的设置示例:

  • 运行测试套件的语言特定测试配置 (settings.json)
  • 用于 linter 和代码格式化工具的扩展设置,以强制执行此 repo 中使用的语言规则 (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/* 行(注意:关于是否应该包括 * 的一些争论 - 请参阅 cmets;.vscode/**/* 也可能会更好地忽略嵌套文件夹)说要排除.vscode 文件夹中的所有内容,但随后 !.vscode/a_specific_file 行告诉 git“不要”忽略该文件夹中的某些特定文件(settings.jsonlaunch.json 等)。最终结果是 .vscode 文件夹中的所有内容都被排除在外,但在其他行之一中特别命名的文件除外。


其他因素

在您的 repo 中包含 .vscode 文件夹实际上不会伤害任何使用不同 IDE(或文本/代码编辑器)的人。

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

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


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

注意:.vscode 文件夹中的设置文件通常会在您更改 文件夹 版本的设置时更新 - 但这似乎取决于如何单独的扩展是编码的,因为我遇到了这个规则的多个例外。

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

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

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

【讨论】:

  • 最好这样做:!.vscode/settings.json.default 然后将 settings.json 转换为 settings.json.default
  • 是的,这是另一种选择。您可以将默认/通用版本保存到存储库,然后让人们制作他们在此之后使用的本地版本。但是,很难协调在那之后需要发生的任何变化。
  • .vscode/* 对我不起作用,已调整为 .vscode/
  • 更改为.vscode/ 通常会破坏重新包含的文件-.vscode/* 将忽略所有文件(但不是 子文件夹)。 .vscode/ 将忽略整个文件夹,这也意味着 git 将忽略重新包含。或者正如文档所说:如果排除了该文件的父目录,则无法重新包含该文件。
  • 关于.vscode/.vscode/* cmets,可能有使用.vscode/**/* 的替代解决方案。我还没有测试,但它应该有效地做与.vscode/ 相同的事情,并递归地包含所有文件夹和文件,但不会产生不允许排除的副作用。
【解决方案3】:

在提交/忽略之间有第三个聪明的选择:以.default 后缀提交。

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

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

【讨论】:

  • settings.json.default 是有道理的,但这是假设您的整个团队都在使用 vs 代码并且您的代码库没有被共享给更广泛的受众。我发现我在 GitHub 上的开源项目,我只是确保将它添加到我的默认 gitignore,因为我不想在我的代码库的潜在用户上强制使用特定的 IDE。
  • @jamescampbell 添加特定于 IDE 的文件几乎不会强制任何人使用该 IDE - 如果他们碰巧使用该 IDE,它只会让他们选择获取您的通用环境设置。更大的问题是这些文件是否得到官方支持 - 即旨在始终保持最新并且可以正常工作。从理论上讲,您可以为不同的 IDE 提供多个 IDE 环境文件,而不会出现任何冲突。
  • @Quuxuu 你把 .default 放在 .vscode 中。 VSC 无法识别它。 settings.json 在 gitignore 中,所以如果团队成员想要使用默认值 - 只需将 settings.json.default 复制到 settings.json(新文件,被 git 忽略)。这样,您以后可以用自己的个人喜好覆盖它,而无需提交更改。
  • @LightCC 在开源项目中保留特定于 IDE 的文件夹仍然是不好的做法。当然,这让他们可以选择使用我的环境设置,但他们很可能已经设置了自己的环境。除非项目需要特定的IDE(插件等),否则最好尽可能保持它不可知,即使那样我也可能会 .gitignore 它。如果有人想要 IDE 设置,他们可以随时询问。出于标准化目的,公司内部的例外情况。
  • @SentientFlesh 我不同意这是“不好的做法”。这更像是给定团队或项目需要决定的约定。根据我之前的评论,有什么害处?此外,它更多的是关于核心开发团队/维护者是否“正式支持”工具集。
【解决方案4】:
  • 从不提交 .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

【讨论】:

  • 我觉得您对.vscode/settings 的建议过于严格。如果可以,请使用 .eslint.editorconfig 文件,但如果您确实希望在团队/项目的所有开发人员之间共享设置,您仍应签入 .vscode/settings
  • Matt,你为什么认为所有其他开发人员都使用 vscode ?可能是使用 webstorm、vim、sublime 的人,这就是为什么你应该使用 eslint 等而不是 settings.json。
  • 再一次,如果您在使用 vscode 的团队工作,或者您正在从事许多开发人员使用 vscode 的项目,那么签入.vscode/settings 是有意义的。并非所有这些设置都具有跨编辑器等效项
  • @MattBierner 很公平,如果您在一家强制执行编辑器的公司中开发封闭源代码项目,但我认为这种情况并不常见,尤其是在开源项目中......
  • 关于第三方扩展的观点非常有效-例如,我相信 MS SQL 扩展会将连接配置文件添加到项目/工作区 settings.json(如果存在)-尽管它不存储凭据它可能正在检查服务器名称等。
【解决方案5】:

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

到目前为止,我发现的最大的项目之一是 .vscodeMozilla Firefox。 看起来 Firefox 团队分享了@98​​7654322@ 和推荐的扩展。

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

当我看到分享.vscode的其他大项目时,我会更新这篇文章。

【讨论】:

    【解决方案6】:

    与其他答案相同:否。

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

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

    参见commit 12861e2commit 2a2cdd0commit 5482f41commit f2a3b68commit 0f47f78commit b4d991dcommit 58930fdcommit dee3382commit 54c06c6(2018 年 7 月 30 日)@987333。 br>(2018 年 8 月 15 日由 Junio C Hamano -- gitster --commit 30cf191 中合并)

    contrib:添加脚本初始化VS Code配置

    VS Code 是一款轻量级但功能强大的源代码编辑器,可在您的桌面上运行,适用于 Windows、macOS 和 Linux。
    在其他语言中,它通过扩展支持 C/C++,不仅提供构建和调试代码,还提供 Intellisense,即代码感知完成和类似的细节。

    此补丁添加了一个脚本,帮助设置环境以有效地使用 VS Code:只需运行 Unix shell 脚本contrib/vscode/init.sh,它会创建相关文件,然后打开 Git 源代码的顶级文件夹在 VS 代码中

    【讨论】:

      【解决方案7】:

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

      【讨论】:

      • 我不同意你的严格立场。正如@BenjaminPasero 的回答中提到的那样,您不必这样做,但在许多情况下这是有意义的,例如共享任务配置。当然,留心队友而不是不必要地强加偏好是很好的。
      • 是的,这就是为什么我们有单独的用户设置和工作区设置(工作区中的.vscode/settings.json 文件):code.visualstudio.com/docs/getstarted/… 只有工具配置之类的东西才会进入工作区设置
      • @RonaldZarīts .vscode文件夹是关于你自己编辑器的设置和代码样式的,我觉得是自己用的,所以我之前说过,不要推文件夹到 git 控制流。
      • @jialinwang 对不起,我已经这样做了。 ;) 除了笑话之外,它还包含有用的分享项目,例如在我的项目中,我们有 (1) launch.json - 启动配置进行调试,设置起来并不简单。 (2) settings.json 项目级设置,例如要使用的 TypeScript 编译器、空格规则,(3) tasks.json - 构建命令。您可以选择不分享,但我们觉得它很有用。
      • @jialinwang 不,他们不是。它们是文件夹级别的设置。您不仅应该包括顶级文件夹,如果您有任何特定于子文件夹的设置,您还应该包括这些设置。重要的是让您的用户偏好 超出文件夹级别的设置(这对于其他原因也很重要)。您应该在文件夹级设置中拥有的东西应该适用于整个文件夹:格式化程序、短绒、空白约定(例如,修剪最后的尾随新行、制表符大小......)......
      【解决方案8】:

      好的,这可能看起来很晚,但是如果您发现在不包含任何子文件的情况下很难忽略 .vscode/,您可以忽略该目录:

      .vscode/
      

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

      git add -f .vscode/launch.json
      

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

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

      【讨论】:

        【解决方案9】:

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

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

        【讨论】:

          猜你喜欢
          • 2019-01-23
          • 1970-01-01
          • 2015-10-30
          • 2010-09-09
          • 2021-10-09
          • 1970-01-01
          • 2023-02-09
          • 1970-01-01
          • 2020-05-27
          相关资源
          最近更新 更多