{"id":256847,"date":"2026-08-11T10:05:31","date_gmt":"2026-08-11T17:05:31","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/visualstudio\/?p=256847"},"modified":"2026-08-10T09:58:15","modified_gmt":"2026-08-10T16:58:15","slug":"managing-git-submodules-without-leaving-the-ide","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/visualstudio\/managing-git-submodules-without-leaving-the-ide\/","title":{"rendered":"Today I will&#8230; manage Git Submodules without leaving the IDE"},"content":{"rendered":"<p>If you&#8217;ve worked with Git submodules for any length of time, you probably have a love-hate relationship with them. They&#8217;re genuinely useful for pulling a shared library, an SDK, or common build scripts into your project. But actually working with them usually means tabbing over to a terminal and trying to remember whether it&#8217;s<code> git submodule update --init or --init --recursive<\/code> this time all while a perfectly good IDE sits right in front of you, shrugging.<\/p>\n<p>That&#8217;s the part we wanted to fix. Starting in <strong>Visual Studio 18.9<\/strong>, Git submodules are a first-class part of the IDE no more bouncing out to the command line just to keep your dependencies in order. It&#8217;s been one of the most-requested Git features for a long time, and honestly, it&#8217;s about time.<\/p>\n<h3>They finally feel like part of Git in the IDE<\/h3>\n<p>Submodules aren&#8217;t a mystery folder anymore. There&#8217;s a dedicated <strong>Submodules<\/strong> section in the <strong>Git Repository<\/strong> window, they show up properly in <strong>Git Changes<\/strong>, and the branch and repository pickers actually understand how your parent repo and its submodules relate.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/submodule-in-git-repo.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-256852\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/submodule-in-git-repo.webp\" alt=\"submodule in git repo image\" width=\"533\" height=\"383\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/submodule-in-git-repo.webp 533w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/submodule-in-git-repo-300x216.webp 300w\" sizes=\"(max-width: 533px) 100vw, 533px\" \/><\/a><br \/><em>\u00a0<\/em><em>\u00a0 \u00a0[Image: Submodules section in the Git Repository window)\u00a0 \u00a0\u00a0<\/em><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/image.webp\"><img decoding=\"async\" class=\"alignnone  wp-image-256866\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/image.webp\" alt=\"image image\" width=\"654\" height=\"516\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/image.webp 819w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/image-300x237.webp 300w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/image-768x606.webp 768w\" sizes=\"(max-width: 654px) 100vw, 654px\" \/><\/a><\/p>\n<p><em>[Image: Submodules in the Git changes window)\u00a0 \u00a0\u00a0<\/em><\/p>\n<h3 style=\"text-align: left;\">Add, update, and delete without leaving your seat<\/h3>\n<p>From that Submodules section, you can add, update, or remove a submodule right there no memorized flags, no terminal detour. Open a solution or folder and Visual Studio <strong>discovers and activates your submodules<\/strong> automatically, while keeping them out of the main local repositories list so your repo picker doesn&#8217;t turn into a cluttered mess.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/Selecting-a-submodule.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-256853\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/Selecting-a-submodule.webp\" alt=\"Selecting a submodule image\" width=\"839\" height=\"387\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/Selecting-a-submodule.webp 839w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/Selecting-a-submodule-300x138.webp 300w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2026\/07\/Selecting-a-submodule-768x354.webp 768w\" sizes=\"(max-width: 839px) 100vw, 839px\" \/><\/a><\/p>\n<p><em>[Image: Selecting a submodule repository in Visual Studio]<\/em><\/p>\n<h3>Read-only by default<\/h3>\n<p>Most of the time you&#8217;re just *using* a submodule, not editing it, so Visual Studio treats them as <strong>read-only by default<\/strong>. That saves you from accidentally committing changes into a dependency you only meant to reference. When you do want to work *inside* one, it&#8217;s a single setting: <strong>Tools &gt; Options &gt; Source Control &gt; Git<\/strong>, find <strong>Automatically activate multiple repositories<\/strong>, and pick <strong>Yes, include submodules<\/strong>.<\/p>\n<h3>This is just the start<\/h3>\n<p>This is the first milestone, not the finish line. It covers the core of what you need day to day, and there&#8217;s more coming in future releases depending on what you tell us.<\/p>\n<h3>We&#8217;d love to hear from you<\/h3>\n<p>This feature exists because so many of you kept asking for it, so keep the feedback coming. Drop your thoughts on the <a href=\"https:\/\/developercommunity.visualstudio.com\/t\/Full-Git-submodule-support\/351549\">Feature Ticket<\/a> , and if something breaks, please use the\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/visualstudio\/ide\/how-to-report-a-problem-with-visual-studio?view=vs-2022\" target=\"_blank\" rel=\"noopener\">Report a Problem tool<\/a> in Visual Studio is the fastest way to reach us. You can also find the team on <a href=\"https:\/\/twitter.com\/VisualStudio\" target=\"_blank\" rel=\"noopener\"><span data-contrast=\"none\">Twitter @VisualStudio<\/span><\/a><span data-contrast=\"none\">, <a href=\"https:\/\/www.youtube.com\/@visualstudio\">YouTube<\/a>, and\u00a0<\/span><a href=\"https:\/\/www.linkedin.com\/showcase\/microsoft-visual-studio\/\" target=\"_blank\" rel=\"noopener\"><span data-contrast=\"none\">LinkedIn.<\/span><\/a><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<p>Thanks, as always, for coding with us.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;ve worked with Git submodules for any length of time, you probably have a love-hate relationship with them. They&#8217;re genuinely useful for pulling a shared library, an SDK, or common build scripts into your project. But actually working with them usually means tabbing over to a terminal and trying to remember whether it&#8217;s git [&hellip;]<\/p>\n","protected":false},"author":26573,"featured_media":256852,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[155],"tags":[431,6824,7019],"class_list":["post-256847","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-visual-studio","tag-git","tag-submodules","tag-visual-studio-2026"],"acf":[],"blog_post_summary":"<p>If you&#8217;ve worked with Git submodules for any length of time, you probably have a love-hate relationship with them. They&#8217;re genuinely useful for pulling a shared library, an SDK, or common build scripts into your project. But actually working with them usually means tabbing over to a terminal and trying to remember whether it&#8217;s git [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts\/256847","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/users\/26573"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/comments?post=256847"}],"version-history":[{"count":2,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts\/256847\/revisions"}],"predecessor-version":[{"id":256855,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts\/256847\/revisions\/256855"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/media\/256852"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/media?parent=256847"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/categories?post=256847"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/tags?post=256847"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}