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

636

在源代码控制中是否应该提交 .vscode 文件夹?

在一个全新的项目中,这个文件夹是空的,除了 settings.json 文件。哪些内容会放到这个文件夹里呢?它是机器特定的、开发者特定的,像 .vs 文件夹一样不能提交吗?还是所有开发者都要共享这个文件夹,因此应该提交?

.vscode/settings.json 文件顶部的注释如下:

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

这似乎意味着文件夹应包含特定于项目的设置,因此应包含在源代码中。此外,这篇UserVoice帖子似乎暗示一些类型定义将在其中放置,也建议将其提交。


如果您在Visual Studio中启动一个项目,然后提交它,应该有一个适当的(至少是典型的)起始.gitignore FE。如果它应该在那里,它可能会在那里。您还可以引用此处,我已经使用过并没有问题。 - ChiefTwoPencils
5
很好的想法,@ChiefTwoPencils!值得一提的是,Visual Studio 创建的默认.gitignore目前已经将.vscode文件夹排除在外。但由于VS Code本身相对较新,他们可能还没有解决这个问题。我暂时将该文件夹保持未跟踪状态,同时获取更多信息。 - Ronald Zarīts
2
如果你正在阅读这篇文章,请订阅 https://github.com/microsoft/vscode/issues/15909,也许有一天你会感到快乐。 - NikT
9个回答

540

如果您希望与团队共享设置、任务配置和调试配置,请检查.vscode文件夹。通常情况下,如果要在团队中实施设置,则与团队共享设置(例如空格与制表符)是有意义的。我们VS Code团队还共享调试和任务特定的设置,因为我们希望我们的团队针对VS Code具有相同的一组调试目标和任务目标。

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


200
如果你想分享文件级别的设置,比如“空格 vs 制表符”,那么你应该考虑使用跨编辑器解决方案,比如EditorConfig - Tanz87
30
如果你在使用VSCode进行像Python项目这样的工作,那么工作区设置将会包含环境特定的Python路径,例如VirtualEnv或Anaconda环境。在大多数情况下,检查这些文件会带来很大的问题。相反,可以上传一个示例/默认文件。 - StefanGordon
16
这个流行的答案似乎是错误/不完整的。 - ripper234
8
这难道不会限制开发者选择IDE吗? - Shadab Faiz
4
我希望您能帮我翻译以下内容:我想检查一些设置,例如 files.exclude,但不包括像 python.pythonPath 这样的设置,因为后者取决于机器。是否有一种方法可以针对每个项目检查某些设置?同一份代码可能会被不同的用户、不同的机器和不同的操作系统使用。 - dashesy
显示剩余10条评论

229

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

建议通常排除.vscode文件夹,但保留选择的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(或文本/代码编辑器)的任何人造成伤害。

然而,如果这些文件包括需要特定于您的环境的通用设置(例如安装存储库的绝对路径),则可能会导致其他使用VS Code的人遇到问题或某些设置无法正确加载。关键是避免保存仅适用于本地环境的设置,只共享可以(或在此存储库的情况下应该)由所有人使用的设置。

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


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

注意:.vscode 文件夹中的设置文件通常在您更改 文件夹 版本的设置时更新,但这似乎取决于各个扩展程序的编码方式,因为我遇到了多个例外情况。

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

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


4
最好操作:将".vscode/settings.json.default"这个文件复制一份并命名为"settings.json"。然后将原来的"settings.json"文件重命名为"settings.json.default"。 - JohnFlux
4
“.vscode/*” 对我不起作用,已经调整为“.vscode/”。 - oleksa
4
改为 .vscode/ 通常会破坏重新包含的文件 - .vscode/* 将忽略所有文件(但不是子文件夹)。.vscode/ 将忽略整个文件夹,这也意味着 Git 将忽略重新包含的文件。或者如文档所述:如果一个文件的父目录被排除在外,则无法重新包含该文件。 - JimmiTh
1
看起来,这里的大多数人真正寻找的是:https://github.com/microsoft/vscode/issues/15909(尚未得到解决)。 - NikT
1
@JimmiTh 我不认为“.vscode/*将忽略所有文件(但不包括子文件夹)”是正确的。我尝试过使用.vscode/*!.vscode/settings.json,它可以很好地忽略.vscode子目录中的文件。 - bmitc
显示剩余2条评论

73

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

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

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


8
一个 settings.json.default 文件是有意义的,但前提是您的整个团队正在使用VS Code,并且您的代码库没有被共享到更广泛的受众。我发现,在GitHub上的我的开源项目中,我只需确保将其添加到默认的gitignore文件中,因为我不想强迫我的潜在用户使用特定的IDE来使用我的代码库。 - james-see
18
@jamescampbell 添加特定于IDE的文件几乎从不强制别人使用该IDE,只是在他们确实使用该IDE时给他们获取您的常见环境设置的选项。更大的问题是这些文件是否得到官方支持 - 也就是说,是否打算始终保持最新和有效。理论上,您可以拥有多个不同IDE的IDE环境文件同时存在而没有任何冲突。 - LightCC
1
@Quuxuu,你在.vscode中输入了.default,但是VSC无法识别它。settings.json被gitignore忽略,所以如果团队成员想要使用默认设置 - 只需将settings.json.default复制到settings.json(新文件,被git忽略)。这样,您可以稍后使用自己的个人首选项覆盖它,而不必提交更改。 - Tymek
1
@LightCC 在开源项目中留下特定于 IDE 的文件仍然是不好的实践。当然,这让他们可以使用我的环境设置,但很有可能他们已经有他们自己的环境设置了。除非该项目需要特定 IDE(插件等),否则最好保持尽可能的中立性,即使是这样,我也可能会将其.gitignore。如果有人想要 IDE 设置,他们总是可以问的。例外情况是为了标准化而在公司内部使用。 - jon.bray.eth
4
@SentientFlesh,我不同意这是“不良做法”。这更多是一个团队或项目需要决定的惯例。就我的先前评论而言,有什么害处呢?此外,更关键的是工具集是否被核心开发团队/维护者“官方支持”。 - LightCC
显示剩余5条评论

28
  • 永远不要提交 .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作者只是为了简化新手体验而添加了该文件,但如果你想认真对待,请不要这样做!

12
如果你真的想要在团队/项目中所有开发者之间共享设置,那么我认为你对于.vscode/settings的建议太过限制了。如果可以的话,请使用.eslint.editorconfig文件,但仍应该检查.vscode/settings - Matt Bierner
4
马特,为什么你假定其他所有开发者都使用 VS Code?可能有人在使用 WebStorm、Vim 或 Sublime,这就是为什么你应该使用 Eslint 等工具而不是 settings.json 的原因。 - cancerbero
5
如果你在团队中使用 vscode 或者你正在参与一个有多个开发者使用 vscode 的项目,检查 .vscode/settings 文件夹是有意义的。这些设置并不都有跨编辑器的等效项。请注意,我会尽力使翻译通俗易懂,但不会改变原意。 - Matt Bierner
值得注意的是,dotnet new gitignore 包括 .vscode/settings.json 以进行跟踪(以及 .vscode/ 中的其他一些文件),因此您建议“永远不要直接提交.vscode/settings.json”与微软官方的做法存在直接矛盾。 - Luke
举一个具体反例:我不得不提交 settings.json,因为 Code 的 Editorconfig 扩展仍然不支持强制执行 quote_style 属性,并将其设置为相关属性声明。你可以让 linter 强制执行此操作,但自动完成仍会默认使用错误的引号,所以每次使用建议的导入时都会出现一个标志。 - Coderer
显示剩余4条评论

24

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

到目前为止,我发现保存.vscode的最大项目之一是Mozilla Firefox。看起来Firefox团队分享了他们的常规任务和推荐扩展

因此,我认为只要知道自己在做什么,保留.vscode并不是一个坏主意。

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


1
我们不应该仅仅因为某个大公司使用了某种技术或方法,就盲目地跟从。 - Naser Mirzaei
4
@NaserMirzaei 确实如此,我也没有说我们应该采用它。但是很多随机的人在这里说“不”,而在一些组织中并没有实践这种做法。那么这可以成为一个好信号,表明他们的论点可能有所遗漏。 - Bumsik Kim

17

和其他回答一样:不行。

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

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

请查看commit 12861e2commit 2a2cdd0commit 5482f41commit f2a3b68commit 0f47f78commit b4d991dcommit 58930fdcommit dee3382commit 54c06c6(2018年7月30日)由Johannes Schindelin (dscho)提交。
(于2018年8月15日由Junio C Hamano -- gitster --合并至commit 30cf191

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

VS Code是一个轻量但功能强大的源代码编辑器,可在Windows、macOS和Linux上运行。
除了其他语言外,它还通过扩展支持C/C++,提供不仅编译和调试代码,还有智能感知,即代码感知完成和类似的便利。

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


10

好的,虽然可能有点晚,但如果你发现难以忽略 .vscode/ 目录而不包括任何子文件,你可以只忽略整个目录:

.vscode/

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

git add -f .vscode/launch.json

-f 参数可以让 Git 添加被忽略的文件。一旦 Git 发现 .vscode/launch.json 文件发生变化,就会像其他文件一样提示你进行提交。

这对我实际起作用了,因为我也遇到了同样的问题,试图忽略 .vscode/ 路径,但又不想包含子文件 settings.json


3
答案是“不”,因为.vscode文件夹是属于这个编辑器的,你不应该把这些个人设置推送到代码库中以免混淆其他人,所以你可以将其添加到项目的.gitignore文件中以忽略这些更改。

24
我不同意你的严格立场。正如@BenjaminPasero在答案中提到的,你并不一定需要这样做,但在许多情况下是有意义的,例如共享任务配置。当然,要注意自己的队友,并避免无谓地强加个人喜好给他们。 - Ronald Zarīts
2
是的,这就是为什么我们有单独的用户设置和工作区设置(工作区中的.vscode/settings.json文件):https://code.visualstudio.com/docs/getstarted/settings#_creating-user-and-workspace-settings 只有像工具配置之类的东西才会放入工作区设置中。 - Matt Bierner
@RonaldZarīts .vscode文件夹是关于你自己的编辑器设置和代码风格的,我认为它只是供个人使用的,所以像我之前说的那样,不要将该文件夹推送到git控制流中。 - jialin wang
9
抱歉,我已经做过了。笑话开一边,这个还包含一些有用的项目可以分享,例如在我的项目中我们有(1)launch.json - 调试启动配置,设置不容易。 (2) settings.json - 项目级别的设置,比如要使用哪个 TypeScript 编译器、空格规则,(3) tasks.json - 构建命令。您可以选择不共享,但我们认为它很有用。 - Ronald Zarīts
1
@jialinwang 不,它们不是。 它们是文件夹级别的设置。 您不仅应导入顶层设置,如果您有任何特定于子文件夹的设置,还应包括这些设置。 重要的是将用户首选项从文件夹级别设置中排除(出于其他原因,这很重要)。 您应该在文件夹级别设置中包含适用于整个文件夹的设置:格式化程序、linters、空格约定(例如,修剪最终尾随新行、制表符大小...)... - DylanYoung

3

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

当你创建一个工作区时,需要保存一个名为 code-workspace 的文件。该文件包含自定义设置,只需将此文件保存在 Git 存储库之外,并可以自由地将 .vscode 添加到 .gitignore 文件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接