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

.vscode文件夹是否意味着提交给源代码控制?

在一个新项目中,除了settings.json文件外,文件夹是空的。这个文件夹里会有什么东西?它是特定于机器的、特定于开发人员的,比如.vs文件夹,因此不能提交?或者所有开发人员都应该共享这个文件夹,从而提交它?

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

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

这似乎意味着文件夹应该包含特定于项目的设置,因此应该包含在源代码中。此外,这篇关于UserVoice的文章似乎暗示了一些类型会在那里,也表明它应该被提交。

196696 次浏览

如果您想与团队共享设置、任务配置和调试配置,请检入.vscode文件夹。我认为如果你想在一个团队中强制设置,与团队共享设置(例如空格与选项卡)是有意义的。我们VS Code团队也共享调试和任务特定的设置,因为我们希望我们的团队对VS Code有相同的调试目标和任务目标。

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

答案是“不”,因为.vscode文件夹是这个编辑器的,你不应该把这些个人设置推送到repo,以免让其他人感到困惑,所以你可以把它添加到项目的.gitignore文件中来忽略这些更改

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

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

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

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

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

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

我从将编辑器设置提交给版本控制?马蒂亚斯·皮特·约翰逊的视频中得到了这个建议

和其他答案一样:没有。

举例来说,考虑一下Git 2.19(2018年Q3)选择的方法,它添加了一个脚本(在contrib/中)来帮助VSCode的用户更好地使用Git代码库。

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

参见提交12861 e2提交2 a2cdd0提交5482年f41提交f2a3b68提交0 f47f78提交b4d991d提交58930 fd提交dee3382提交54 c06c6(2018年7月30日) (由滨野朱尼奥——gitster——提交30 cf191合并,2018年8月15日)

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

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

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

为什么不关注实践,而不是这里的争论呢?

我发现迄今为止保留.vscode的最大项目之一是Mozilla Firefox .。 看起来Firefox团队共享他们的共同任务和推荐的扩展

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

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

.vscode文件夹中提交一些文件

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

设置的示例包括:

  • 特定于语言的测试配置,以运行测试套件(settings.json)
  • linet和代码格式化工具的扩展设置,以强制执行此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/*行(注意:关于是否应该包括*的一些争论-见注释;.vscode/**/*也可以忽略嵌套文件夹)表示排除.vscode文件夹中的所有内容,但随后!.vscode/a_specific_file行告诉git“不”;忽略该文件夹中的某些特定文件(settings.jsonlaunch.json等)。最终的结果是,除了在其他行中特别指定的文件外,.vscode文件夹中的所有内容都被排除在外。


其他因素

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

然而,对于其他人使用VS Code,这可能会导致问题,或者一些设置可能无法正常加载,如果这些文件包含通用设置,需要特定于您的环境-比如repo安装的绝对路径。关键是要避免保存适合您本地环境的自定义设置,只共享那些可以(或者,在这个回购的情况下,应该)供所有人使用的设置。

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


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

当你更改文件夹版本的设置时,.vscode文件夹中的设置文件通常会更新-但这似乎取决于个人扩展的编码方式,因为我遇到过这个规则的多个例外。

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

所以,你通常应该把你的个人电脑的自定义设置放入用户设置中,把通用设置放入工作空间文件夹设置中。

一个简单的方法来保持你的设置而不提交到你的项目git存储库是创建一个工作区,并添加文件夹。

当您创建一个工作区时,您需要保存一个文件code-workspace。这个文件包含自定义设置,只需将这个文件从git存储库中保存出来,就可以将.vscode添加到.gitignore文件中。

好吧,这可能看起来很晚了,但如果你发现不包括任何子文件就很难忽略.vscode/,你可以忽略目录:

.vscode/

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

git add -f .vscode/launch.json

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

这实际上为我工作,因为我遇到了同样的问题,试图忽略.vscode/路径,不包括子文件settings.json