<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Introduction to Git Sync on Grafana Labs</title><link>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/</link><description>Recent content in Introduction to Git Sync on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/grafana/v13.2/as-code/observability-as-code/git-sync/index.xml" rel="self" type="application/rss+xml"/><item><title>Git Sync Key concepts</title><link>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/key-concepts/</link><pubDate>Tue, 18 Aug 2026 10:15:08 +0000</pubDate><guid>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/key-concepts/</guid><content><![CDATA[&lt;h1 id=&#34;git-sync-key-concepts&#34;&gt;Git Sync key concepts&lt;/h1&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Git Sync functionalities are constantly evolving. &lt;a href=&#34;/help/&#34;&gt;Contact Grafana&lt;/a&gt; for support or to report any issues you encounter and help us improve this feature.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;key-git-sync-components&#34;&gt;Key Git Sync components&lt;/h2&gt;
&lt;p&gt;Before you start using Git Sync, understand how the key Git Sync components relate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#grafana-instance&#34;&gt;Grafana instance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#git-repository&#34;&gt;Git repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#git-sync-repository-resource&#34;&gt;Git Sync repository resource&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#git-sync-connection-resource&#34;&gt;Git Sync connection resource&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;grafana-instance&#34;&gt;Grafana instance&lt;/h3&gt;
&lt;p&gt;A Grafana instance is a running Grafana server. Multiple instances can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connect to the same Git repository using different Repository configurations.&lt;/li&gt;
&lt;li&gt;Sync from different branches of the same repository.&lt;/li&gt;
&lt;li&gt;Sync from different paths within the same repository.&lt;/li&gt;
&lt;li&gt;Sync from different repositories.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;git-repository&#34;&gt;Git repository&lt;/h3&gt;
&lt;p&gt;A Git repository is the external storage you want to sync your Grafana instance with. You can organize your Git repository in several ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single branch, multiple paths: Use different directories for different purposes. For example, &lt;code&gt;dev/&lt;/code&gt;, &lt;code&gt;prod/&lt;/code&gt;, or &lt;code&gt;team-a/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Multiple branches: Use different branches for different environments or teams. For example, &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;develop&lt;/code&gt;, or &lt;code&gt;team-a&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Multiple repositories: Use separate repositories for different teams or environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;flexible-configuration-for-your-git-sync-repositories&#34;&gt;Flexible configuration for your Git Sync repositories&lt;/h4&gt;
&lt;p&gt;Git Sync repositories support different combinations of repository URL, branch, and path:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Different Git repositories: Each environment or team can use its own repository.
&lt;ul&gt;
&lt;li&gt;Instance A: &lt;code&gt;repository: your-org/grafana-prod&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Instance B: &lt;code&gt;repository: your-org/grafana-dev&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Different branches: Use separate branches within the same repository.
&lt;ul&gt;
&lt;li&gt;Instance A: &lt;code&gt;repository: your-org/grafana-manifests, branch: main&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Instance B: &lt;code&gt;repository: your-org/grafana-manifests, branch: develop&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Different paths: Use different directory paths within the same repository.
&lt;ul&gt;
&lt;li&gt;Instance A: &lt;code&gt;repository: your-org/grafana-manifests, branch: main, path: production/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Instance B: &lt;code&gt;repository: your-org/grafana-manifests, branch: main, path: development/&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Any combination: Mix and match based on your workflow requirements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;git-sync-repository-resource&#34;&gt;Git Sync repository resource&lt;/h3&gt;
&lt;p&gt;A repository resource is a Grafana configuration object that defines the connection between a group of repositories and your Grafana instance via Git Sync.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Which Git repository to sync with your Grafana instance.&lt;/li&gt;
&lt;li&gt;Which branch to use.&lt;/li&gt;
&lt;li&gt;Which directory path to synchronize.&lt;/li&gt;
&lt;li&gt;Sync behavior and workflows.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each repository resource creates bidirectional synchronization between a Grafana instance and a specific location in Git.&lt;/p&gt;
&lt;h3 id=&#34;git-sync-connection-resource&#34;&gt;Git Sync connection resource&lt;/h3&gt;
&lt;p&gt;A connection is the authentication setup between Grafana and an external Git provider, required when you&amp;rsquo;re not using a Personal Access Token or a static token to authenticate. Use it to authorize access to your external repositories, and to generate or refresh the credentials for Git Sync. A single connection can be reused across multiple repositories.&lt;/p&gt;
&lt;p&gt;For example, if you&amp;rsquo;re using GitHub App to authenticate, the connection represents the app installation. Grafana uses this connection to authenticate with GitHub, create access tokens, and authorize repository access on your behalf.&lt;/p&gt;
&lt;p&gt;The connection resource includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The external provider configuration: The authentication mechanism Grafana uses to communicate with the Git provider (for example, a GitHub App).&lt;/li&gt;
&lt;li&gt;The provider authorization or installation: The authorized entity that allows Grafana to request tokens from the provider.&lt;/li&gt;
&lt;li&gt;Repository access scope: The set of repositories that the connection (and therefore, Grafana) is authorized to access in the Git provider.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-does-git-sync-behave&#34;&gt;How does Git Sync behave?&lt;/h2&gt;
&lt;p&gt;Git Sync is bidirectional, and syncs a repository resource with your Grafana instance. You can modify provisioned resources both from the Grafana UI or from the synced GitHub repository, and changes will be reflected in both places:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Grafana monitors the specified Git location (repository, branch, and path).&lt;/li&gt;
&lt;li&gt;Grafana creates a folder in Dashboards (typically named after the repository).&lt;/li&gt;
&lt;li&gt;Grafana creates dashboards from dashboard JSON files in Git within this folder.&lt;/li&gt;
&lt;li&gt;Grafana commits dashboard changes made in the UI back to Git.&lt;/li&gt;
&lt;li&gt;Grafana pulls dashboard changes made in Git and updates dashboards in the UI.&lt;/li&gt;
&lt;li&gt;Synchronization occurs at regular intervals (configurable), or instantly if you use webhooks.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can find the provisioned dashboards organized in folders under &lt;strong&gt;Dashboards&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&#34;sync-targets&#34;&gt;Sync targets&lt;/h3&gt;
&lt;p&gt;With Git Sync you can place synced resources in Grafana in two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Folder sync&lt;/strong&gt;: Grafana creates a folder named after the repository and places all synced resources inside it. Subdirectories in the repository become subfolders within that folder. &lt;strong&gt;This is the default behavior&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Folderless sync&lt;/strong&gt;: Grafana places synced resources at the top level, without creating a wrapper folder. Files at the repository path root become top-level resources, and subdirectories become top-level folders.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use folder sync to keep each repository&amp;rsquo;s resources grouped together under a dedicated folder. Use folderless sync when you want provisioned resources to appear at the top of your Dashboards view instead of nested inside a repository folder.&lt;/p&gt;
&lt;p&gt;Both modes can coexist with each other and with resources that aren&amp;rsquo;t managed by Git Sync.&lt;/p&gt;
&lt;p&gt;The following examples use the same repository to show how the same files appear with each mode.&lt;/p&gt;
&lt;p&gt;The repository &lt;code&gt;grafana-manifests&lt;/code&gt; syncs from the path &lt;code&gt;grafana/&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;your-org/grafana-manifests/
└── grafana/
    ├── cpu-metrics.json
    └── team-platform/
        ├── _folder.json
        └── memory-usage.json&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;_folder.json&lt;/code&gt; file stores the &lt;code&gt;team-platform&lt;/code&gt; folder&amp;rsquo;s stable UID and display name, so the folder keeps its identity and permissions if you move or rename it in the repository. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/use-git-sync/#the-git-sync-folder-metadata-file&#34;&gt;The Git Sync folder metadata file&lt;/a&gt; for details.&lt;/p&gt;
&lt;p&gt;The instance also has content that isn&amp;rsquo;t managed by Git Sync: a manually created &lt;strong&gt;Ops&lt;/strong&gt; folder and an &lt;strong&gt;Ad-hoc dashboard&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With folder sync&lt;/strong&gt;, a repository folder wraps the synced resources, alongside the unprovisioned content:&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;Dashboards
├── 📁 grafana-manifests/      ← managed by Git Sync
│   ├── CPU Metrics Dashboard
│   └── 📁 team-platform/
│       └── Memory Usage Dashboard
├── 📁 Ops/                    ← not managed by Git Sync
│   └── Ops dashboard
└── Ad-hoc dashboard           ← not managed by Git Sync&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;With folderless sync&lt;/strong&gt;, the same files map to the top level, next to the unprovisioned content:&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;Dashboards
├── CPU Metrics Dashboard      ← managed by Git Sync
├── 📁 team-platform/          ← managed by Git Sync
│   └── Memory Usage Dashboard
├── 📁 Ops/                    ← not managed by Git Sync
│   └── Ops dashboard
└── Ad-hoc dashboard           ← not managed by Git Sync&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Folderless sync only manages the resources it provisions. The unprovisioned &lt;strong&gt;Ops&lt;/strong&gt; folder and &lt;strong&gt;Ad-hoc dashboard&lt;/strong&gt; are left untouched.&lt;/p&gt;
&lt;h4 id=&#34;multiple-folderless-repositories&#34;&gt;Multiple folderless repositories&lt;/h4&gt;
&lt;p&gt;Because folderless sync doesn&amp;rsquo;t create a wrapper folder, several folderless repositories can sync to the top level at the same time. Each repository manages only the resources it provisions:&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;Dashboards
├── CPU Metrics Dashboard      ← managed by grafana-manifests
├── 📁 team-platform/          ← managed by grafana-manifests
│   └── Memory Usage Dashboard
├── Billing Overview           ← managed by finance-dashboards
├── 📁 invoices/               ← managed by finance-dashboards
│   └── Monthly Invoices
└── Ad-hoc dashboard           ← not managed by Git Sync&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;git-sync-states&#34;&gt;Git Sync states&lt;/h3&gt;
&lt;p&gt;Your Grafana instance can be in one of the following Git Sync states:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unprovisioned&lt;/strong&gt;: None of the instance&amp;rsquo;s resources are being managed by Git Sync.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partially provisioned&lt;/strong&gt;: Some of the resources are controlled by Git Sync.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fully provisioned&lt;/strong&gt;: All supported resource types are managed by Git Sync. Unsupported resources are &lt;strong&gt;not managed&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;example-relationship-between-repository-branch-and-path&#34;&gt;Example: Relationship between repository, branch, and path&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s an example showing how the repository, branch, and path concepts work together:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;team-platform/grafana/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;In Git (on branch &lt;code&gt;main&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;your-org/grafana-manifests/
├── .git/
├── README.md
├── team-platform/
│   └── grafana/
│       ├── cpu-metrics.json       ← Synced
│       ├── memory-usage.json      ← Synced
│       └── disk-io.json           ← Synced
├── team-data/
│   └── grafana/
│       └── pipeline-stats.json    ← Not synced (different path)
└── other-files.txt                ← Not synced (outside path)&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;In the Grafana Dashboards view:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;Dashboards
└── 📁 grafana-manifests/
    ├── CPU Metrics Dashboard
    ├── Memory Usage Dashboard
    └── Disk I/O Dashboard&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Key takeaways:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grafana only synchronizes files within the specified path (&lt;code&gt;team-platform/grafana/&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Grafana ignores files in other paths or at the repository root.&lt;/li&gt;
&lt;li&gt;The folder name in Grafana comes from the repository name.&lt;/li&gt;
&lt;li&gt;Dashboard titles come from the JSON file content, not the filename.&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="git-sync-key-concepts">Git Sync key concepts&lt;/h1>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>Git Sync functionalities are constantly evolving. &lt;a href="/help/">Contact Grafana&lt;/a> for support or to report any issues you encounter and help us improve this feature.&lt;/p></description></item><item><title>Usage and performance limitations</title><link>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/usage-limits/</link><pubDate>Tue, 18 Aug 2026 10:15:08 +0000</pubDate><guid>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/usage-limits/</guid><content><![CDATA[&lt;h1 id=&#34;usage-and-performance-limitations&#34;&gt;Usage and performance limitations&lt;/h1&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Git Sync functionalities are constantly evolving. &lt;a href=&#34;/help/&#34;&gt;Contact Grafana&lt;/a&gt; for support or to report any issues you encounter and help us improve this feature.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;performance-considerations&#34;&gt;Performance considerations&lt;/h2&gt;
&lt;p&gt;When Git Sync is enabled, the database load might increase, especially if your Grafana instance has many folders and nested folders. Evaluate the performance impact, if any, in a non-production environment.&lt;/p&gt;
&lt;h2 id=&#34;usage-tiers-and-limits&#34;&gt;Usage tiers and limits&lt;/h2&gt;
&lt;p&gt;The following Git Sync per-tier limits apply:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Tier&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;Cloud - Free&lt;/strong&gt;&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;Cloud - Other&lt;/strong&gt;&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;On-prem OSS&lt;/strong&gt;&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;On-prem Enterprise&lt;/strong&gt;&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Amount of repositories&lt;/td&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;10&lt;/td&gt;
              &lt;td&gt;10 (default)&lt;/td&gt;
              &lt;td&gt;10 (default)&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Amount of synced resources per repository&lt;/td&gt;
              &lt;td&gt;20&lt;/td&gt;
              &lt;td&gt;1,000&lt;/td&gt;
              &lt;td&gt;No limit&lt;/td&gt;
              &lt;td&gt;No limit&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;On Grafana Cloud, tier limits can&amp;rsquo;t be changed from configuration. Contact Support if you need a higher connection limit, or &lt;a href=&#34;#shard-by-capacity-not-by-team&#34;&gt;shard by capacity&lt;/a&gt; instead of using a single connection per team or microservice.&lt;/p&gt;
&lt;p&gt;On self-managed Grafana (OSS or Enterprise), the repository count of &lt;strong&gt;10&lt;/strong&gt; in the table is the &lt;strong&gt;default&lt;/strong&gt;, not a hard ceiling. Raise or remove it with &lt;code&gt;[provisioning] max_repositories&lt;/code&gt; in the Grafana configuration file. On-prem resources per repository stay unlimited by default (&lt;code&gt;max_resources_per_repository = 0&lt;/code&gt;), and you can set a cap if you want one.&lt;/p&gt;
&lt;p&gt;Refer to &lt;a href=&#34;#modify-your-usage-limits&#34;&gt;Modify your usage limits&lt;/a&gt; for more details.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;recommended-limits&#34;&gt;Recommended limits&lt;/h3&gt;
&lt;p&gt;On Grafana Cloud, the repository-connection limit is a per-stack limit. On self-managed Grafana, the effective limit is whatever you set for &lt;code&gt;max_repositories&lt;/code&gt; (default &lt;code&gt;10&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do not sync more than 1,000 resources per repository connection as of today.&lt;/strong&gt; This isn&amp;rsquo;t an arbitrary cap: beyond roughly 1,000 resources per connection, the sync workflow puts noticeable load on Grafana itself, which may result in slower syncs and increased database load.&lt;/p&gt;
&lt;p&gt;Both of these limits are early figures. As Git Sync matures, these limits will raise by orders of magnitude. The goal is for Git Sync to support around 100 repository connections per stack, and up to roughly 1,000 in the longer term, with similar increases to the number of resources you can sync per connection.&lt;/p&gt;
&lt;p&gt;If these limits are affecting your use of Git Sync, 
    &lt;a href=&#34;/docs/grafana/v13.2/developer-resources/contribute/#communicate-with-grafana&#34;&gt;get in touch&lt;/a&gt; and explain your situation. You may also share any ideas or suggestions.&lt;/p&gt;
&lt;p&gt;For details on usage and storage limits, refer to &lt;a href=&#34;/docs/grafana-cloud/cost-management-and-billing/manage-invoices/understand-your-invoice/usage-limits/#other-usage-limits&#34;&gt;Dashboard and folder limits&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;modify-your-usage-limits&#34;&gt;Modify your usage limits&lt;/h3&gt;
&lt;p&gt;Before changing your usage limits, study your specific use case. Design the repository structure carefully, and determine how many repositories and how many resources you can support. For example, setting over 1,000 resources per repository may impact your system&amp;rsquo;s performance.&lt;/p&gt;
&lt;p&gt;In many cases, splitting a single repository across multiple connections, as described in &lt;a href=&#34;#scale-beyond-1000-resources-per-repository&#34;&gt;Scale beyond 1,000 resources per repository&lt;/a&gt;, is a better option than raising the limits.&lt;/p&gt;
&lt;h4 id=&#34;grafana-cloud&#34;&gt;Grafana Cloud&lt;/h4&gt;
&lt;p&gt;On Grafana Cloud, limits are enforced per tier and can&amp;rsquo;t be edited from configuration. The 10-connection limit can be increased slightly on request, but splitting a single repository across multiple connections is the recommended way to sync more resources without changing tier limits.&lt;/p&gt;
&lt;p&gt;Limit increases aren&amp;rsquo;t granted automatically. When you request one, Support will ask you to describe your use case to understand why the current limits aren&amp;rsquo;t enough, and assess whether the increase is necessary and safe for your stack&amp;rsquo;s performance.&lt;/p&gt;
&lt;h4 id=&#34;grafana-ossenterprise&#34;&gt;Grafana OSS/Enterprise&lt;/h4&gt;
&lt;p&gt;In Grafana On-prem (OSS or Enterprise), the table value of &lt;strong&gt;10&lt;/strong&gt; repositories is only the default, not a hard ceiling. Resources per repository remain unlimited by default. The 1,000-resources-per-connection figure is a performance recommendation, not an on-prem default cap.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re an on-prem user you can change the limits directly through configuration settings, as described below.&lt;/p&gt;
&lt;p&gt;To customize the limits use one of these configuration settings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;max_repositories&lt;/code&gt; to set how many repositories you can sync. Default is &lt;code&gt;10&lt;/code&gt;. Set to &lt;code&gt;0&lt;/code&gt; for unlimited repositories. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/setup-grafana/configure-grafana/#max_repositories&#34;&gt;&lt;code&gt;max_repositories&lt;/code&gt;&lt;/a&gt; in the Configure Grafana section to learn more.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;max_resources_per_repository&lt;/code&gt; to set the amount of resources per repository to sync. Default is &lt;code&gt;0&lt;/code&gt; (unlimited). Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/setup-grafana/configure-grafana/#max_resources_per_repository&#34;&gt;&lt;code&gt;max_resources_per_repository&lt;/code&gt;&lt;/a&gt; in the Configure Grafana section to learn more.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;scale-beyond-1000-resources-per-repository&#34;&gt;Scale beyond 1,000 resources per repository&lt;/h3&gt;
&lt;p&gt;If a single repository holds more than 1,000 resources, you don&amp;rsquo;t have to raise the per-repository limit. Instead, connect the same repository multiple times, with each connection pointing to a different folder (path) in the repository. Each connection syncs its own subset of resources and counts toward the 1,000-resource recommendation independently.&lt;/p&gt;
&lt;p&gt;Because a stack allows up to 10 repository connections, this lets you sync up to roughly 10,000 resources from a single repository while keeping each connection within the recommended range.&lt;/p&gt;
&lt;p&gt;When you split a single repository across several connections, use 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/key-concepts/#sync-targets&#34;&gt;folderless sync&lt;/a&gt; for each connection. With folder sync (the default), every connection creates its own wrapper folder named after the repository, so splitting the repository would change your folder hierarchy and nest resources one level deeper. Folderless sync places each connection&amp;rsquo;s resources at the top level, so the split has no effect on how your dashboards and folders are organized in Grafana.&lt;/p&gt;
&lt;p&gt;If you need more than that, the 10-connection limit can be increased slightly for Cloud stacks on request. Contact Support to discuss your use case.&lt;/p&gt;
&lt;p&gt;On Grafana Cloud, syncing this many resources may also exceed your stack&amp;rsquo;s maximum number of dashboards. If it does, you&amp;rsquo;ll need to increase that limit as well. Refer to &lt;a href=&#34;/docs/grafana-cloud/cost-management-and-billing/manage-invoices/understand-your-invoice/usage-limits/#other-usage-limits&#34;&gt;Dashboard and folder limits&lt;/a&gt; to review and adjust your dashboard limits.&lt;/p&gt;
&lt;h4 id=&#34;shard-by-capacity-not-by-team&#34;&gt;Shard by capacity, not by team&lt;/h4&gt;
&lt;p&gt;When you have many teams or tenants, it&amp;rsquo;s tempting to create one connection per team so each team maps to its own connection. Avoid this: it consumes connections quickly, doesn&amp;rsquo;t scale as teams grow, and on Grafana Cloud a single stack can&amp;rsquo;t be granted the hundreds of connections this would require.&lt;/p&gt;
&lt;p&gt;Instead, shard by capacity. Create one repository and group teams into a small number of shard folders, each holding up to about 1,000 resources, and connect each shard folder separately. For example, a customer with 190 teams and 900 resources fits comfortably in a single shard today:&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;your-org/grafana-manifests/
├── shard-1/        ← ~900 resources today, connected now
│   ├── team-a/
│   ├── team-b/
│   └── ...
├── shard-2/        ← empty for now, add a connection when shard-1 approaches 1,000
├── shard-3/        ← add later as you keep growing
└── shard-4/        ← ...up to 10 shards / connections per stack&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;As the number of resources grows, add &lt;code&gt;shard-2&lt;/code&gt;, &lt;code&gt;shard-3&lt;/code&gt;, and later shards, and connect each one. You can move teams between shards at any time to balance the load, so you only pay for the connections you actually need and can grow up to the 10-connection limit without restructuring your repository.&lt;/p&gt;
&lt;p&gt;If sharding isn&amp;rsquo;t practical for your setup, try raising the per-connection resource limit modestly, for example from 1,000 to a limit in the 1,200 - 1,500 range. This is a small adjustment for a bit of extra headroom, not an order-of-magnitude increase. Still, do not go beyond 1,500 resources per connection because of the performance impact on Grafana. For substantially larger scales, sharding remains the recommended approach.&lt;/p&gt;
&lt;h2 id=&#34;git-sync-across-multiple-organizations&#34;&gt;Git Sync across multiple organizations&lt;/h2&gt;
&lt;p&gt;Git Sync works across multiple organizations for self-managed Grafana instances. You can set up Git Sync independently in each of your organizations, and what you sync in one organization does not affect another. Teams that share a single Grafana instance across separate organizations can each manage their own provisioning from Git.&lt;/p&gt;
&lt;p&gt;This feature is available starting in Grafana 13.0.4, but not supported until Grafana 13.1.1.&lt;/p&gt;
&lt;h2 id=&#34;compatible-git-providers&#34;&gt;Compatible Git providers&lt;/h2&gt;
&lt;p&gt;Git Sync is available for any Git provider through a Pure Git repository type, and has specific enhanced integrations for GitHub, GitLab and Bitbucket.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;&lt;strong&gt;Provider&lt;/strong&gt;&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;Available in&lt;/strong&gt;&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;Authentication&lt;/strong&gt;&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Pure Git&lt;/td&gt;
              &lt;td&gt;Cloud, OSS, Enterprise&lt;/td&gt;
              &lt;td&gt;Personal Access Token&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;GitHub&lt;/td&gt;
              &lt;td&gt;Cloud, OSS, Enterprise&lt;/td&gt;
              &lt;td&gt;Personal Access Token or GitHub App&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;GitHub Enterprise (Server and Cloud)&lt;/td&gt;
              &lt;td&gt;Cloud, Enterprise&lt;/td&gt;
              &lt;td&gt;Personal Access Token or GitHub App&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;GitLab&lt;/td&gt;
              &lt;td&gt;Cloud, Enterprise&lt;/td&gt;
              &lt;td&gt;Personal Access Token&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Bitbucket&lt;/td&gt;
              &lt;td&gt;Cloud, Enterprise&lt;/td&gt;
              &lt;td&gt;API token with scopes&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Note that Pure Git, GitLab and Bitbucket are supported in Grafana v12.4.x or later only. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/set-up-before/#enable-git-providers&#34;&gt;Enable Git providers&lt;/a&gt; to set them up.&lt;/p&gt;
&lt;p&gt;To learn more about Git, refer to &lt;a href=&#34;https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Getting Started - About Version Control&lt;/a&gt; of the &lt;a href=&#34;https://git-scm.com/book/en/v2&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Pro Git book&lt;/a&gt; in the official Git documentation.&lt;/p&gt;
&lt;h3 id=&#34;the-pure-git-repository-type&#34;&gt;The Pure Git repository type&lt;/h3&gt;
&lt;p&gt;The Pure Git repository type uses the &lt;a href=&#34;https://git-scm.com/docs/protocol-v2&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Smart HTTP protocol v2&lt;/a&gt; (Git over HTTPS), with no provider-specific logic. Pure Git delivers the core Git Sync workflow: your repository is the source of truth, you may edit dashboards in the UI, and Grafana stays in sync.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Pure Git only supports &lt;strong&gt;Smart HTTP protocol v2&lt;/strong&gt;. Earlier protocol versions (v1, v0) and SSH transport are not supported.&lt;/p&gt;
&lt;p&gt;Make sure your Git server supports protocol v2 over HTTPS. Some providers, like Azure DevOps, only use v1 and are therefore not compatible with Git Sync.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;However, Pure Git doesn&amp;rsquo;t include any features that require provider APIs, such as webhook-driven instant sync, automated PR comments, or deep links to source files.&lt;/p&gt;
&lt;h3 id=&#34;enhanced-integrations-github-github-enterprise-gitlab-bitbucket&#34;&gt;Enhanced integrations: GitHub, GitHub Enterprise, GitLab, Bitbucket&lt;/h3&gt;
&lt;p&gt;If your Git provider is GitHub, GitHub Enterprise (Server and Cloud), GitLab, or Bitbucket, use the enhanced integration. Enhanced integrations understand the platform you&amp;rsquo;re using, allowing workflows that feel native: automated pull request comments with dashboard previews, instant webhook-based sync, or direct navigation from Grafana to source files in your provider&amp;rsquo;s UI.&lt;/p&gt;
&lt;p&gt;The GitHub enhanced integration is the most feature-complete experience today. It&amp;rsquo;s available in Grafana OSS, Enterprise, and Cloud, and enables richer pull request workflows, deeper linking between Grafana and GitHub, and tighter integration into review processes.&lt;/p&gt;
&lt;p&gt;The GitLab and Bitbucket integrations are only available in Grafana Enterprise and Grafana Cloud. While they&amp;rsquo;re less developed for the moment, expect continued improvements around pull request workflows, linking, and sync behavior.&lt;/p&gt;
&lt;h2 id=&#34;resource-support-and-compatibility&#34;&gt;Resource support and compatibility&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Git Sync only supports dashboards and folders&lt;/strong&gt;. Alerts, data sources, panels and other resources are not supported yet.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re a Grafana Cloud user, you can check the &lt;a href=&#34;https://grafana.ideas.aha.io/ideas&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Grafana roadmap portal&lt;/a&gt; to learn about future improvements.&lt;/p&gt;
&lt;h3 id=&#34;resource-compatibility&#34;&gt;Resource compatibility&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re using Git Sync in Grafana OSS or Grafana Enterprise, some supported resources might be in an incompatible data format. If this happens, syncing will be blocked. Compatibility issues will be fixed with an upcoming migration tool.&lt;/p&gt;
&lt;p&gt;A resource can be:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Is the resource?&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;Compatible&lt;/strong&gt;&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;Incompatible&lt;/strong&gt;&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;strong&gt;Supported&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;The resource can be managed with Git Sync.&lt;/td&gt;
              &lt;td&gt;The resource is supported but has compatibility issues. It &lt;strong&gt;cannot&lt;/strong&gt; be managed with Git Sync.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;strong&gt;Unsupported&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;The resource is &lt;strong&gt;not&lt;/strong&gt; supported and &lt;strong&gt;cannot&lt;/strong&gt; be managed with Git Sync.&lt;/td&gt;
              &lt;td&gt;Not applicable.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;nested-folders&#34;&gt;Nested folders&lt;/h3&gt;
&lt;p&gt;Git Sync supports up to four nested folders within a repository.&lt;/p&gt;
&lt;h2 id=&#34;known-limitations&#34;&gt;Known limitations&lt;/h2&gt;
&lt;h3 id=&#34;migration-to-git-sync&#34;&gt;Migration to Git Sync&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Full-instance sync is experimental.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When migrating to resources to Git Sync, you can still create, edit or delete resources, but changes may not be exported. The duration of this process depends on the number of resources involved.&lt;/p&gt;
&lt;h3 id=&#34;use-existing-resources&#34;&gt;Use existing resources&lt;/h3&gt;
&lt;p&gt;To add existing resources as provisioned Git Sync resources, you can use the Import dashboards tool, save them from the UI, save them as JSON files and commit them to the synced repository, or use &lt;code&gt;gcx&lt;/code&gt;. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/export-resources/&#34;&gt;Export non-provisioned resources from Grafana&lt;/a&gt; for more details. When migrating existing dashboards, the folder structure will be replicated in the provisioned repository.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-caution&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Caution&lt;/p&gt;&lt;p&gt;Git Sync cannot take ownership of a resource while an unmanaged resource with the same UID exists in Grafana, so you may need to manually remove the original resources to ensure the transition to provisioned resources. Since deleting resources implies certain operational caveats, refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/export-resources/#how-to-delete-existing-resources-in-grafana&#34;&gt;How to delete existing resources in Grafana&lt;/a&gt; for more information.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;restore-resources&#34;&gt;Restore resources&lt;/h3&gt;
&lt;p&gt;Restoring resources from the UI is currently not possible. As an alternative, you can restore dashboards directly in your GitHub repository by raising a PR, and they will be updated in Grafana.&lt;/p&gt;
]]></content><description>&lt;h1 id="usage-and-performance-limitations">Usage and performance limitations&lt;/h1>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>Git Sync functionalities are constantly evolving. &lt;a href="/help/">Contact Grafana&lt;/a> for support or to report any issues you encounter and help us improve this feature.&lt;/p></description></item><item><title>Set up Git Sync</title><link>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/</link><pubDate>Tue, 18 Aug 2026 10:15:08 +0000</pubDate><guid>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/</guid><content><![CDATA[&lt;h1 id=&#34;set-up-git-sync&#34;&gt;Set up Git Sync&lt;/h1&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Git Sync functionalities are constantly evolving. &lt;a href=&#34;/help/&#34;&gt;Contact Grafana&lt;/a&gt; for support or to report any issues you encounter and help us improve this feature.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;To set up Git Sync and synchronize your Grafana dashboards and folders with a GitHub repository, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Read 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/set-up-before/&#34;&gt;Before you begin&lt;/a&gt; carefully.&lt;/li&gt;
&lt;li&gt;Set up Git Sync &lt;a href=&#34;#set-up-git-sync-using-the-ui&#34;&gt;using the UI&lt;/a&gt;, with 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/set-up-terraform/&#34;&gt;Terraform&lt;/a&gt;, or 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/set-up-code/&#34;&gt;as code&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;After setup, &lt;a href=&#34;#check-your-dashboards-in-grafana&#34;&gt;check your dashboards have been synced correctly&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Optionally, you can also 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/set-up-extend/&#34;&gt;extend Git Sync with webhooks and image rendering&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Alternatively, on-prem file provisioning in Grafana lets you include resources, including folders and dashboard JSON files, that are stored in a local file system. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/&#34;&gt;Provision resources on-prem&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&#34;set-up-git-sync-using-the-ui&#34;&gt;Set up Git Sync using the UI&lt;/h2&gt;
&lt;p&gt;To set up Git Sync from the Grafana UI, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log in to your Grafana server with an account that has the Grafana Admin flag set.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Administration &amp;gt; General &amp;gt; Provisioning&lt;/strong&gt; in the left-side menu to access the Git Sync configuration screen. If you already have an active Git Sync connection, go to the &lt;strong&gt;Get started&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#select-your-provider&#34;&gt;Select your provider&lt;/a&gt; to start a new Git Sync setup: GitHub, GitLab, Bitbucket, or Pure Git.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#configure-the-provisioning-repository&#34;&gt;Configure the provisioning repository&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#choose-what-to-synchronize&#34;&gt;Choose what content to sync with Grafana&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#synchronize-with-external-storage&#34;&gt;Synchronize with external storage&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#choose-additional-settings&#34;&gt;Choose additional settings&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;select-your-provider&#34;&gt;Select your provider&lt;/h2&gt;
&lt;p&gt;Git Sync is available for any Git provider through a Pure Git repository type, and has specific enhanced integrations for GitHub, GitHub Enterprise, GitLab and Bitbucket. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/usage-limits/#compatible-providers&#34;&gt;Compatible providers&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p&gt;Select any of these options to proceed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/#configure-with-github&#34;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/#configure-with-github-enterprise&#34;&gt;GitHub Enterprise (Server and Cloud)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/#configure-with-gitlab&#34;&gt;GitLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/#configure-with-bitbucket&#34;&gt;Bitbucket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/#configure-with-pure-git&#34;&gt;Pure Git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;configure-with-github&#34;&gt;Configure with GitHub&lt;/h3&gt;
&lt;p&gt;If you want to configure Git Sync for public cloud GitHub, you can connect using a &lt;strong&gt;Personal Access Token&lt;/strong&gt; or with &lt;strong&gt;GitHub App&lt;/strong&gt;. Whichever you choose, make sure you have the following permissions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Administration&lt;/strong&gt;: Read-only permission
&lt;ul&gt;
&lt;li&gt;This enables validation of branch protection rules against the configured branch when users can push directly to it&lt;/li&gt;
&lt;li&gt;In the future, it might be used to check other repository settings and make the setup process smoother&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contents&lt;/strong&gt;: Read and write permission&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metadata&lt;/strong&gt;: Read-only permission&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pull requests&lt;/strong&gt;: Read and write permission&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Webhooks&lt;/strong&gt;: Read and write permission&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For information on how to set up each method, refer to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/settings/personal-access-tokens/new&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Create a new fine-grained personal access token&lt;/a&gt;. You need a Personal Access Token from an &lt;strong&gt;Admin&lt;/strong&gt; role to set up the repository. GitHub only grants the &lt;strong&gt;Webhooks: Read and write&lt;/strong&gt; permission to repository admins, so tokens created by non-admin users can&amp;rsquo;t manage the webhooks Git Sync relies on for instantaneous updates and pull request previews.&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/set-up-before/#create-a-github-app&#34;&gt;Create a GitHub App&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;connect-with-a-github-personal-access-token&#34;&gt;Connect with a GitHub Personal Access Token&lt;/h4&gt;
&lt;p&gt;Fill in the following fields:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Paste the &lt;strong&gt;Repository URL&lt;/strong&gt; for your GitHub repository into the text box.&lt;/li&gt;
&lt;li&gt;Paste your &lt;strong&gt;Personal Acccess Token&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Select &lt;strong&gt;Configure repository&lt;/strong&gt; to set up your provisioning folder.&lt;/p&gt;
&lt;h4 id=&#34;connect-with-github-app&#34;&gt;Connect with GitHub App&lt;/h4&gt;
&lt;p&gt;If you want to configure Git Sync for GitHub and authenticate with GitHub App:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If you already have an existing GitHub App connected, select &lt;strong&gt;Choose an existing app&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;From the drop-down menu, select the connection you want to use.&lt;/li&gt;
&lt;li&gt;Paste the &lt;strong&gt;Repository URL&lt;/strong&gt; for your GitHub repository into the text box.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you want to connect using a new GitHub App, select &lt;strong&gt;Connect to a new app&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Type in the following fields:
&lt;ul&gt;
&lt;li&gt;The ID of the GitHub App you want to use.&lt;/li&gt;
&lt;li&gt;The GitHub Installation ID.&lt;/li&gt;
&lt;li&gt;The Private Key.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Paste the &lt;strong&gt;Repository URL&lt;/strong&gt; for your GitHub repository into the text box.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Select &lt;strong&gt;Configure repository&lt;/strong&gt; to set up your provisioning folder.&lt;/p&gt;
&lt;h3 id=&#34;configure-with-github-enterprise&#34;&gt;Configure with GitHub Enterprise&lt;/h3&gt;
&lt;p&gt;Similarly, you can connect to GitHub Enterprise Server or GitHub Enterprise Cloud using a &lt;strong&gt;Personal Access Token&lt;/strong&gt; or with &lt;strong&gt;GitHub App&lt;/strong&gt;. Refer to &lt;a href=&#34;#configure-with-github&#34;&gt;Configure with GitHub&lt;/a&gt; for details on the required permissions.&lt;/p&gt;
&lt;h4 id=&#34;connect-with-a-github-personal-access-token-1&#34;&gt;Connect with a GitHub Personal Access Token&lt;/h4&gt;
&lt;p&gt;Fill in the following fields:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Paste the &lt;strong&gt;Repository URL&lt;/strong&gt; for your GitHub repository into the text box.&lt;/li&gt;
&lt;li&gt;Paste your &lt;strong&gt;Personal Acccess Token&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Select &lt;strong&gt;Configure repository&lt;/strong&gt; to set up your provisioning folder.&lt;/p&gt;
&lt;h4 id=&#34;connect-with-github-app-1&#34;&gt;Connect with GitHub App&lt;/h4&gt;
&lt;p&gt;If you want to configure Git Sync for GitHub Enterprise and authenticate with GitHub App:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If you already have an existing GitHub App connected, select &lt;strong&gt;Choose an existing app&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;From the drop-down menu, select the connection you want to use.&lt;/li&gt;
&lt;li&gt;Paste the &lt;strong&gt;Repository URL&lt;/strong&gt; for your GitHub repository into the text box.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you want to connect using a new GitHub App, select &lt;strong&gt;Connect to a new app&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Type in the following fields:
&lt;ul&gt;
&lt;li&gt;The ID of the GitHub App you want to use.&lt;/li&gt;
&lt;li&gt;The GitHub Installation ID.&lt;/li&gt;
&lt;li&gt;The Private Key.&lt;/li&gt;
&lt;li&gt;The URL of your GitHub Enterprise instance.
&lt;ul&gt;
&lt;li&gt;For GitHub Enterprise Cloud, it looks like &lt;code&gt;https://&amp;lt;enterprise-slug&amp;gt;.ghe.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For GitHub Enterprise Server, your custom URL.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Paste the &lt;strong&gt;Repository URL&lt;/strong&gt; for your GitHub repository into the text box.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Select &lt;strong&gt;Configure repository&lt;/strong&gt; to set up your provisioning folder.&lt;/p&gt;
&lt;h3 id=&#34;configure-with-gitlab&#34;&gt;Configure with GitLab&lt;/h3&gt;
&lt;p&gt;If you want to configure Git Sync for GitLab, you need a GitLab Personal Access Token. To create one, &lt;a href=&#34;https://gitlab.com/users/sign_in&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;sign in to GitLab&lt;/a&gt; and create a token with these permissions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: Read and write permission&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User&lt;/strong&gt;: Read only permission&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API&lt;/strong&gt;: Read and write permission&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;re using a token from a &lt;strong&gt;service account&lt;/strong&gt;, you need to add the service account to the GitLab project as a member to avoid authentication issues.&lt;/p&gt;
&lt;p&gt;After creating the token, return to Grafana and fill in the following fields:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Paste the token into the &lt;strong&gt;Project Access Token&lt;/strong&gt; text box.&lt;/li&gt;
&lt;li&gt;Paste the &lt;strong&gt;Repository URL&lt;/strong&gt; for your GitLab repository into the text box.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Select &lt;strong&gt;Configure repository&lt;/strong&gt; to set up your provisioning folder.&lt;/p&gt;
&lt;h3 id=&#34;configure-with-bitbucket&#34;&gt;Configure with Bitbucket&lt;/h3&gt;
&lt;p&gt;If you want to configure Git Sync for Bitbucket, you need a Bitbucket API token with scopes. To create one, &lt;a href=&#34;https://id.atlassian.com/login?application=bitbucket&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;sign in to Bitbucket&lt;/a&gt; and create an API token with these permissions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repositories&lt;/strong&gt;: Read and write permission&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pull requests&lt;/strong&gt;: Read and write permission&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Webhooks&lt;/strong&gt;: Read, write, and delete permission&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Return to Grafana and fill in the following fields:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Paste the token into the &lt;strong&gt;API Token&lt;/strong&gt; text box.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Paste the &lt;strong&gt;Repository URL&lt;/strong&gt; for your Bitbucket repository into the text box.&lt;/p&gt;
&lt;p&gt;Use the Git clone URL for the repository, not the URL that appears in your browser&amp;rsquo;s address bar when you view the repository. To find it, select &lt;strong&gt;Clone&lt;/strong&gt; in Bitbucket and copy the HTTPS URL. The clone URL ends in &lt;code&gt;.git&lt;/code&gt;, and its format depends on your Bitbucket deployment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bitbucket Cloud: &lt;code&gt;https://bitbucket.org/&amp;lt;workspace&amp;gt;/&amp;lt;repository&amp;gt;.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Bitbucket Data Center and Server: &lt;code&gt;https://&amp;lt;bitbucket-host&amp;gt;/scm/&amp;lt;PROJECT&amp;gt;/&amp;lt;repository&amp;gt;.git&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;admonition admonition-tip&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Tip&lt;/p&gt;&lt;p&gt;If Grafana returns an &lt;code&gt;ls-refs&lt;/code&gt; error when it connects to the repository, check that you entered the clone URL and not the browser URL.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Select &lt;strong&gt;Configure repository&lt;/strong&gt; to set up your provisioning folder.&lt;/p&gt;
&lt;h3 id=&#34;configure-with-pure-git&#34;&gt;Configure with Pure Git&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re using another Git provider, you need to use the Pure Git option to configure your connection with a Personal Access Token:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Paste the access token or password of the Git repository you want to sync in &lt;strong&gt;Access Token&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter a &lt;strong&gt;Username&lt;/strong&gt;. Git Sync will use this name to access the Git repository.&lt;/li&gt;
&lt;li&gt;Paste the &lt;strong&gt;Repository URL&lt;/strong&gt; of your Git repository into the text box.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Select &lt;strong&gt;Configure repository&lt;/strong&gt; to set up your provisioning folder.&lt;/p&gt;
&lt;h2 id=&#34;configure-the-provisioning-repository&#34;&gt;Configure the provisioning repository&lt;/h2&gt;
&lt;p&gt;After configuring your connection authentication, continue to enter the details of the repository you want to use for provisioning:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Enter a &lt;strong&gt;Branch&lt;/strong&gt; to use for provisioning. The default value is &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Optionally, you can add a &lt;strong&gt;Path&lt;/strong&gt; to a subdirectory where your dashboards are stored.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Select &lt;strong&gt;Choose what to synchronize&lt;/strong&gt; to have the connection to your repository verified and continue setup.&lt;/p&gt;
&lt;h2 id=&#34;choose-what-to-synchronize&#34;&gt;Choose what to synchronize&lt;/h2&gt;
&lt;p&gt;Next, sync the external resources you specified in the previous step with your Grafana instance. You can store these provisioned resources in Grafana, either at the root of the provisioned folder or in a new folder, without affecting the rest of your instance.&lt;/p&gt;
&lt;p&gt;To set up synchronization:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select whether you want to store synced resources in a &lt;strong&gt;new folder or at root level&lt;/strong&gt; in Grafana. For more information on these options, refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/key-concepts/#sync-targets/&#34;&gt;Sync targets&lt;/a&gt;. The UI provides information about the available resources you can sync.&lt;/li&gt;
&lt;li&gt;Enter a &lt;strong&gt;Display name&lt;/strong&gt; for your repository connection. All the synced resources from this Git Sync connection will appear under the this name in the Grafana UI.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Synchronize with external storage&lt;/strong&gt; to continue.&lt;/li&gt;
&lt;li&gt;You can repeat this process for up to 10 connections.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Optionally, you can export any unmanaged resources into the provisioned folder. See how in &lt;a href=&#34;#synchronize-with-external-storage&#34;&gt;Synchronize with external storage&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Select &lt;strong&gt;Choose additional settings&lt;/strong&gt; to continue setup.&lt;/p&gt;
&lt;h2 id=&#34;synchronize-with-external-storage&#34;&gt;Synchronize with external storage&lt;/h2&gt;
&lt;p&gt;To proceed with the sync:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Review the known limitations.&lt;/li&gt;
&lt;li&gt;You may see the experimental checkbox &lt;strong&gt;Migrate existing resources&lt;/strong&gt;, which allows you to migrate your unmanaged dashboards to the provisioned folder. If you don&amp;rsquo;t, refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/export-resources/&#34;&gt;Export non-provisioned resources from Grafana&lt;/a&gt; to learn how to migrate your existing resources.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Begin synchronization&lt;/strong&gt; to create the Git Sync connection. When the process is completed, you&amp;rsquo;ll see a summary of the synced resources.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Click &lt;strong&gt;Choose additional settings&lt;/strong&gt; for the final configuration steps.&lt;/p&gt;
&lt;h2 id=&#34;choose-additional-settings&#34;&gt;Choose additional settings&lt;/h2&gt;
&lt;p&gt;In this last step, you can configure additional options for Git Sync. When you&amp;rsquo;re done, click &lt;strong&gt;Finish&lt;/strong&gt; to complete the setup.&lt;/p&gt;
&lt;h3 id=&#34;sync-interval&#34;&gt;Sync interval&lt;/h3&gt;
&lt;p&gt;Use the &lt;strong&gt;Sync interval (seconds)&lt;/strong&gt; setting to indicate how often you want your Grafana instance to automatically pull updates from the folder managed with Git Sync. The default value is 300 seconds in Grafana Cloud, and 60 seconds in Grafana OSS/Enterprise.&lt;/p&gt;
&lt;h3 id=&#34;optional-settings&#34;&gt;Optional settings&lt;/h3&gt;
&lt;p&gt;You can also select these optional settings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check &lt;strong&gt;Read only&lt;/strong&gt; to ensure resources can&amp;rsquo;t be modified in Grafana.&lt;/li&gt;
&lt;li&gt;Check &lt;strong&gt;Enable pull request option when saving&lt;/strong&gt; to choose whether to open a pull request when saving changes. If the repository does not allow direct changes to the main branch, a pull request may still be required.&lt;/li&gt;
&lt;li&gt;Check &lt;strong&gt;Enable push to configured branch&lt;/strong&gt; to allow direct commits to the configured branch.&lt;/li&gt;
&lt;li&gt;Check &lt;strong&gt;Generate dashboards previews&lt;/strong&gt; to create preview links for pull requests. This option requires using image rendering and activating public access.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After deciding on these options, you can chose to configure &lt;strong&gt;Webhooks&lt;/strong&gt; or a verified account with the &lt;strong&gt;Commit options&lt;/strong&gt;. Alternatively, if you want your your commits to remain unsigned, click &lt;strong&gt;Save&lt;/strong&gt; to continue.&lt;/p&gt;
&lt;h3 id=&#34;webhook-options&#34;&gt;Webhook options&lt;/h3&gt;
&lt;p&gt;In the &lt;strong&gt;Webhook options&lt;/strong&gt; menu, you can type in an URL to override the auto-detected URL used to register webhooks. Make sure you have the appropriate permissions to set up and manage webhooks.&lt;/p&gt;
&lt;p&gt;You can also check the &lt;strong&gt;Disable webhook integration&lt;/strong&gt;. When checked, Grafana doesn&amp;rsquo;t register or receive webhook events, and polls the repository on an interval instead. Use this when your Grafana instance is not reachable from the public internet.&lt;/p&gt;
&lt;p&gt;Git providers limit the amount of webhooks they allow in their repositories. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/set-up-extend/#webhook-limits&#34;&gt;Webhook limits&lt;/a&gt; for more information and to learn how to proceed if you reach these limits.&lt;/p&gt;
&lt;h3 id=&#34;signed-commit-options&#34;&gt;Signed commit options&lt;/h3&gt;
&lt;p&gt;Starting in Grafana 13.1.0, you can &lt;strong&gt;configure a verified account&lt;/strong&gt; with a signing key, allowing you to enforce your users to sign commits so your Git provider can mark them as &lt;em&gt;Verified&lt;/em&gt;. Git Sync supports GPG, SSH, and S/MIME keys.&lt;/p&gt;
&lt;p&gt;Starting in Grafana 13.2.0, by default all commits use the signed-in Grafana user as the commit author. For more details, refer to &lt;a href=&#34;#authoring-options&#34;&gt;Authoring options&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For the moment, Git Sync doesn&amp;rsquo;t support:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Passphrase-protected keys.&lt;/li&gt;
&lt;li&gt;Verification of individual accounts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Follow the UI wizard to fill in the required fields to set up any of these options, and refer to the sections below for more details.&lt;/p&gt;
&lt;h4 id=&#34;pre-requirements&#34;&gt;Pre-requirements&lt;/h4&gt;
&lt;p&gt;In order to implement signed commits, make sure that you set up a specific verification account in your Git provider. You&amp;rsquo;ll need your account&amp;rsquo;s signing key, name and email to set up verification.&lt;/p&gt;
&lt;p&gt;For more details on how to create your keys for Git authentication, refer to the official documentation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href=&#34;https://docs.github.com/en/authentication/managing-commit-signature-verification&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Managing commit signature verification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitLab: &lt;a href=&#34;https://docs.gitlab.com/user/project/repository/signed_commits/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Signed commits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bitbucket: &lt;a href=&#34;https://confluence.atlassian.com/bitbucketserver/controlling-access-to-code-776639770.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Controlling access to code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;example-sign-your-commits-with-an-ssh-key&#34;&gt;Example: Sign your commits with an SSH key&lt;/h4&gt;
&lt;p&gt;To enforce signed commits using an SSH key follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;Commit options (advanced)&lt;/strong&gt; menu.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Commit signing&lt;/strong&gt;, select &lt;strong&gt;SSH&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Fill in the following fields:
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;private key&lt;/strong&gt; for the account to verify.&lt;/li&gt;
&lt;li&gt;The signer&amp;rsquo;s &lt;strong&gt;name&lt;/strong&gt; to be displayed in your Git provider.&lt;/li&gt;
&lt;li&gt;The signer&amp;rsquo;s &lt;strong&gt;e-mail address&lt;/strong&gt;, which must match the one in the signing key.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After completing the key configuration, any commits your users make to the provisioned folder will appear as &lt;strong&gt;Verified&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&#34;authoring-options&#34;&gt;Authoring options&lt;/h3&gt;
&lt;p&gt;Starting in Grafana 13.2.0, you can &lt;strong&gt;include authoring information&lt;/strong&gt; to your commits.&lt;/p&gt;
&lt;h4 id=&#34;authoring-in-unsigned-commits&#34;&gt;Authoring in unsigned commits&lt;/h4&gt;
&lt;p&gt;If you don&amp;rsquo;t enable commit signing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you add an author override, the &lt;code&gt;author&lt;/code&gt; for every commit will be the configured override.&lt;/li&gt;
&lt;li&gt;If you don&amp;rsquo;t select author override, the signed-in Grafana user name and email will be used as the commit author.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;authoring-in-signed-commits&#34;&gt;Authoring in signed commits&lt;/h4&gt;
&lt;p&gt;If you enable commit signing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you enable the signer as the commit author, Git Sync will use the signer name and email as the author to all commits.&lt;/li&gt;
&lt;li&gt;If you don&amp;rsquo;t enable the signer as the commit author, the signed-in Grafana user name and email will be used as the commit &lt;code&gt;author&lt;/code&gt;, and the &lt;code&gt;committer&lt;/code&gt; will be the configured signer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;check-your-dashboards-in-grafana&#34;&gt;Check your dashboards in Grafana&lt;/h2&gt;
&lt;p&gt;Make sure that your synced dashboards are available at the location that you specified:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Dashboards&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Look for the name of the dashboard in the &lt;strong&gt;Name&lt;/strong&gt; column.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now that your resources are synced, you can customize the name, change the branch, and create a pull request (PR) for it. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/use-git-sync/&#34;&gt;Manage provisioned repositories with Git Sync&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2 id=&#34;update-or-delete-your-synced-resources&#34;&gt;Update or delete your synced resources&lt;/h2&gt;
&lt;p&gt;To update or delete your repository configuration after you&amp;rsquo;ve completed setup:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log in to your Grafana server with an account that has the Grafana Admin flag set.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Administration &amp;gt; General &amp;gt; Provisioning&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Repositories&lt;/strong&gt; tab, and locate the repository you want to modify.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Settings&lt;/strong&gt; to access the &lt;strong&gt;Configure repository&lt;/strong&gt; screen:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;To modify your configuration, update any of the settings and select &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;To delete the repository, click &lt;strong&gt;Delete&lt;/strong&gt;. You can either keep the synced resources or delete them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;You&amp;rsquo;ve successfully set up Git Sync to manage your Grafana dashboards through version control. Your dashboards are now synchronized with a GitHub repository, enabling collaborative development and change tracking.&lt;/p&gt;
&lt;p&gt;To learn more about using Git Sync refer to the following documents:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/set-up-extend/&#34;&gt;Set up instantaneous pulling and dashboard previews in Pull Requests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/use-git-sync/&#34;&gt;Work with provisioned repositories with Git Sync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/provisioned-dashboards/&#34;&gt;Work with provisioned dashboards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/export-resources/&#34;&gt;Add existing resources to your synced folder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/git-sync-deployment-scenarios/&#34;&gt;Git Sync deployment scenarios&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="set-up-git-sync">Set up Git Sync&lt;/h1>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>Git Sync functionalities are constantly evolving. &lt;a href="/help/">Contact Grafana&lt;/a> for support or to report any issues you encounter and help us improve this feature.&lt;/p></description></item><item><title>Add non-provisioned resources from Grafana</title><link>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/export-resources/</link><pubDate>Tue, 18 Aug 2026 10:15:08 +0000</pubDate><guid>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/export-resources/</guid><content><![CDATA[&lt;h1 id=&#34;add-non-provisioned-resources-from-grafana&#34;&gt;Add non-provisioned resources from Grafana&lt;/h1&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Git Sync functionalities are constantly evolving. &lt;a href=&#34;/help/&#34;&gt;Contact Grafana&lt;/a&gt; for support or to report any issues you encounter and help us improve this feature.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;You can add dashboards to Git Sync using any of the following options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#add-a-dashboard-using-import-dashboards&#34;&gt;Add a dashboard using Import dashboards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#copy-an-existing-dashboard-from-the-grafana-ui&#34;&gt;Export an existing dashboard from the Grafana UI as a copy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#add-a-dashboard-with-the-grafana-cli&#34;&gt;Add a dashboard with Grafana CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#add-a-dashboard-via-json-export&#34;&gt;Copy a dashboard as JSON and commit to the provisioned repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;add-a-dashboard-using-import-dashboards&#34;&gt;Add a dashboard using Import dashboards&lt;/h2&gt;
&lt;p&gt;You can import dashboards directly into your Git Sync provisioned folders using the Grafana UI or the HTTP API.&lt;/p&gt;
&lt;p&gt;&lt;img
  class=&#34;lazyload d-inline-block&#34;
  data-src=&#34;/static/img/docs/ascode/gitsync-dashboards-import.png&#34;
  alt=&#34;Import dashboard&#34; width=&#34;1654&#34;
     height=&#34;414&#34;/&gt;&lt;/p&gt;
&lt;p&gt;To access the Import dashboard tool from the Git Sync UI:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;Dashboards tab&lt;/strong&gt; of you connection.&lt;/li&gt;
&lt;li&gt;On the top right corner, click &lt;strong&gt;New&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Import dashboard&lt;/strong&gt; and you&amp;rsquo;ll be redirected to the wizard.&lt;/li&gt;
&lt;li&gt;Upload or paste the dashboard JSON.&lt;/li&gt;
&lt;li&gt;Fill in the relevant fields, including the branch and repository folder, and press &lt;strong&gt;Import&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Open the pull request, follow your regular workflow, and merge. Note that it could take a few minutes until the imported dashboard appears.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Keep in mind the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UIDs are globally unique per org. Two repositories with dashboards sharing a UID will conflict.&lt;/li&gt;
&lt;li&gt;Two dashboards can share a title as long as they live at different paths in the repo. If a file with the same name already exists at the target path, the import is stopped before it overwrites anything.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/visualizations/dashboards/build-dashboards/import-dashboards/&#34;&gt;Import dashboards&lt;/a&gt; in the Data Visualization documentation.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;It may take a few minutes for your changes to reflect on your screen. If they don&amp;rsquo;t, refresh the UI manually.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;copy-an-existing-dashboard-from-the-grafana-ui&#34;&gt;Copy an existing dashboard from the Grafana UI&lt;/h2&gt;
&lt;p&gt;You can also save a copy of dashboard directly from the Grafana UI to your provisioned folder.&lt;/p&gt;
&lt;p&gt;To do so, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Make sure the dashboard is in &lt;strong&gt;Editable&lt;/strong&gt; mode.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt; or &lt;strong&gt;Save as&lt;/strong&gt; from the top-right corner.&lt;/li&gt;
&lt;li&gt;In the menu:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Target folder&lt;/strong&gt;: Select the provisioned folder from your Grafana UI where you want to save the dashboard in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: Type in the name of the branch of the provisioned repository you want to work in, or create a new branch. Committing directly to &lt;code&gt;main&lt;/code&gt; is not supported.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Folder&lt;/strong&gt;: Type in the folder in your sync repository, if any.&lt;/li&gt;
&lt;li&gt;Fill in the rest of the fields accordingly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In your synced GitHub repository, merge the branch with the dashboard you want to sync.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;add-a-dashboard-with-the-grafana-cli&#34;&gt;Add a dashboard with the Grafana CLI&lt;/h2&gt;
&lt;p&gt;You can also export an existing dashboard from the terminal or from agentic coding tools using the CLI &lt;code&gt;gcx&lt;/code&gt;. With &lt;code&gt;gcx&lt;/code&gt; you can download the resources you want to sync from Grafana, and then commit and push those files to your provisioned Git repository. Git Sync will then detect the commit, and synchronize with Grafana.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;For more information refer to the 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/grafana-cli/gcx/&#34;&gt;&lt;code&gt;gcx&lt;/code&gt; documentation&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;To add a dashboard with &lt;code&gt;gcx&lt;/code&gt;, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Set up the &lt;code&gt;gcx&lt;/code&gt; context to point to your instance as documented in &lt;a href=&#34;https://github.com/grafana/gcx/#1-authenticate&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Defining contexts&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pull the resources you want to sync from the instance to your local repository:&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;gcx resources pull dashboards --path &amp;lt;REPO_PATH&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit and push the resources to your Git repository:&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;git add &amp;lt;DASHBOARDS_PATH&amp;gt;
git commit -m &amp;#34;Add dashboards from Grafana&amp;#34;
git push&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&amp;lt;GIT_REPO&amp;gt;&lt;/em&gt;: The path to the repository synced with Git Sync&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&amp;lt;DASHBOARDS_PATH&amp;gt;&lt;/em&gt;: The path where the dashboards you want to export are located. The dashboards path must be under the repository&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete the original unmanaged resources you want to sync from Grafana. This step is required because Git Sync will not adopt a resource while an unmanaged resource with the same UID (&lt;code&gt;metadata.name&lt;/code&gt;) still exists in Grafana.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Trigger a new pull to complete the sync. The resources are recreated as provisioned, with their original UIDs, so existing links keep working.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Deleting resources implies certain operational caveats. Refer to &lt;a href=&#34;#how-to-delete-existing-resources-in-grafana&#34;&gt;How to delete existing resources in Grafana&lt;/a&gt; for more information.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;add-a-dashboard-via-json-export&#34;&gt;Add a dashboard via JSON export&lt;/h2&gt;
&lt;p&gt;To add an existing dashboard to Git Sync via JSON export, you need to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Export the dashboard as JSON.&lt;/li&gt;
&lt;li&gt;Convert it to the Custom Resource Definition (CRD) format required by the Grafana App Platform.&lt;/li&gt;
&lt;li&gt;Commit the converted file to your Git repository.&lt;/li&gt;
&lt;li&gt;Delete the original unmanaged resources you want to sync from Grafana. This step is required because Git Sync will not adopt a resource while an unmanaged resource with the same UID (&lt;code&gt;metadata.name&lt;/code&gt;) still exists in Grafana.&lt;/li&gt;
&lt;li&gt;Trigger a new pull to complete the sync. The resources are recreated as provisioned, with their original UIDs, so existing links keep working.&lt;/li&gt;
&lt;/ol&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Deleting resources implies certain operational caveats. Refer to &lt;a href=&#34;#how-to-delete-existing-resources-in-grafana&#34;&gt;How to delete existing resources in Grafana&lt;/a&gt; for more information.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;required-json-format&#34;&gt;Required JSON format&lt;/h3&gt;
&lt;p&gt;To export a dashboard as a JSON file it must follow this CRD structure:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;{
  &amp;#39;apiVersion&amp;#39;: &amp;#39;dashboard.grafana.app/v1&amp;#39;,
  &amp;#39;kind&amp;#39;: &amp;#39;Dashboard&amp;#39;,
  &amp;#39;metadata&amp;#39;: { &amp;#39;name&amp;#39;: &amp;#39;dcf2lve9akj8xsd&amp;#39; },
  &amp;#39;spec&amp;#39;: { /* Original dashboard JSON goes here */ },
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The structure includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apiVersion&lt;/code&gt;: Specifies the API version. Both classic and &lt;code&gt;v2&lt;/code&gt; JSON models are supported. For more information, refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/visualizations/dashboards/build-dashboards/view-dashboard-json-model/&#34;&gt;Dashboard JSON model&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kind&lt;/code&gt;: Identifies the resource type. For example, dashboard.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;metadata&lt;/code&gt;: Contains the dashboard identifier &lt;code&gt;uid&lt;/code&gt;. You can find the identifier in the dashboard&amp;rsquo;s URL or in the exported JSON.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec&lt;/code&gt;: Wraps your original dashboard JSON.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-to-delete-existing-resources-in-grafana&#34;&gt;How to delete existing resources in Grafana&lt;/h2&gt;
&lt;p&gt;If you add existing resources using &lt;code&gt;gcx&lt;/code&gt; or via JSON import, the resource UID is kept, so you need to manually delete the original resource in Grafana to provision it with Git Sync.&lt;/p&gt;
&lt;p&gt;When you delete a resource, keep in mind the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You cannot restore deleted resources from the UI.&lt;/li&gt;
&lt;li&gt;Dashboard version history does not carry over.&lt;/li&gt;
&lt;li&gt;You need to reapply custom folder permissions. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-grafana/&#34;&gt;Git Sync permissions and access control&lt;/a&gt; for more details.&lt;/li&gt;
&lt;li&gt;Git Sync does not support alerts for the moment.&lt;/li&gt;
&lt;li&gt;Deleting a folder deletes its alert rules. Move them out before deleting the folder.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;work-with-git-managed-dashboards&#34;&gt;Work with Git-managed dashboards&lt;/h2&gt;
&lt;p&gt;After you&amp;rsquo;ve saved a dashboard in Git, it&amp;rsquo;ll be synchronized automatically, and you&amp;rsquo;ll be able to work with it as any other provisioned resource. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/provisioned-dashboards/&#34;&gt;Work with provisioned dashboards&lt;/a&gt; for more information.&lt;/p&gt;
]]></content><description>&lt;h1 id="add-non-provisioned-resources-from-grafana">Add non-provisioned resources from Grafana&lt;/h1>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>Git Sync functionalities are constantly evolving. &lt;a href="/help/">Contact Grafana&lt;/a> for support or to report any issues you encounter and help us improve this feature.&lt;/p></description></item><item><title>Work with provisioned repositories in Git Sync</title><link>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/use-git-sync/</link><pubDate>Tue, 18 Aug 2026 10:15:08 +0000</pubDate><guid>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/use-git-sync/</guid><content><![CDATA[&lt;h1 id=&#34;work-with-provisioned-repositories-in-git-sync&#34;&gt;Work with provisioned repositories in Git Sync&lt;/h1&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Git Sync functionalities are constantly evolving. &lt;a href=&#34;/help/&#34;&gt;Contact Grafana&lt;/a&gt; for support or to report any issues you encounter and help us improve this feature.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;After you sync your resources, Git Sync creates a dashboard that provides a summary of resources, health, pull status, webhook, sync jobs, resources, and files. To access it, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log in to your Grafana server with an account that has the Grafana Admin flag set.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Administration &amp;gt; General &amp;gt; Provisioning&lt;/strong&gt; in the left-side menu to access the Git Sync configuration screen.&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Repositories&lt;/strong&gt; tab, and locate the repository you want to work with. You can view the current status of the sync, run pulls, or update your settings.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/provisioned-dashboards/&#34;&gt;Work with provisioned dashboards&lt;/a&gt; for more information about working with provisioned files.&lt;/p&gt;
&lt;h2 id=&#34;view-the-current-status-of-your-synchronized-repository&#34;&gt;View the current status of your synchronized repository&lt;/h2&gt;
&lt;p&gt;Use the &lt;strong&gt;View&lt;/strong&gt; section to see detailed information about the current status of your sync and &lt;a href=&#34;#troubleshoot-synchronization&#34;&gt;troubleshoot&lt;/a&gt; possible issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;strong&gt;Overview&lt;/strong&gt; tab contains information about the health of your repository&amp;rsquo;s connection with Grafana, configuration options such as webhooks, or information on Git processes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;strong&gt;Resources&lt;/strong&gt; tab lists the provisioned resources of the connection.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;troubleshoot-synchronization&#34;&gt;Troubleshoot synchronization&lt;/h3&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Before you proceed to troubleshoot, understand the 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/usage-limits/&#34;&gt;Usage and performance known limitations&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Monitor the &lt;strong&gt;View&lt;/strong&gt; status page for synchronization issues and status updates. The status page displays the following events:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sync started:&lt;/strong&gt; The synchronization process has begun.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sync completed:&lt;/strong&gt; The synchronization process finished successfully.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sync failed:&lt;/strong&gt; The synchronization process failed. Refer to the error details for troubleshooting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sync issues:&lt;/strong&gt; The synchronization process encountered issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Dashboard sync errors&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository URL:&lt;/strong&gt; If dashboards don&amp;rsquo;t sync, verify that the repository URL is correct and accessible from the Grafana instance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository branch:&lt;/strong&gt; Verify that the configured repository branch exists and is correctly referenced.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conflicts:&lt;/strong&gt; Check for conflicts in the repository that may prevent syncing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Dashboard import errors&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validate the JSON format of the dashboard files before importing.&lt;/li&gt;
&lt;li&gt;If the import fails, check Grafana logs for error messages and troubleshoot accordingly.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;synchronize-changes&#34;&gt;Synchronize changes&lt;/h2&gt;
&lt;p&gt;To sync resources between the provisioned repositories and your Grafana instance, click &lt;strong&gt;Pull&lt;/strong&gt; under the repository you want to sync. The synchronization process runs and completes.&lt;/p&gt;
&lt;p&gt;Grafana overwrites existing dashboards with the same &lt;code&gt;uid&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;update-or-delete-your-settings&#34;&gt;Update or delete your settings&lt;/h2&gt;
&lt;p&gt;To update or delete your repository configuration after you complete setup:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log in to your Grafana server with an account that has the Grafana Admin flag set.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Administration &amp;gt; General &amp;gt; Provisioning&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Repositories&lt;/strong&gt; tab, and locate the repository you want to modify.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Settings&lt;/strong&gt; to access the &lt;strong&gt;Configure repository&lt;/strong&gt; screen:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;To modify your configuration, update any of the settings and select &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;To delete the repository, click &lt;strong&gt;Delete&lt;/strong&gt;. You can either keep the synced resources or delete them.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;It may take a few minutes for your changes to reflect on your screen. If they don&amp;rsquo;t, refresh the UI manually.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;manage-folder-permissions&#34;&gt;Manage folder permissions&lt;/h2&gt;
&lt;p&gt;By default, users keep their roles in folders provisioned with Git Sync.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Grafana Role&lt;/th&gt;
              &lt;th&gt;Folder Permission&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Admin&lt;/td&gt;
              &lt;td&gt;Admin&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Editor&lt;/td&gt;
              &lt;td&gt;Editor&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Viewer&lt;/td&gt;
              &lt;td&gt;Viewer&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-grafana/&#34;&gt;Git Sync permissions&lt;/a&gt; to understand and set up permissions in Git Sync.&lt;/p&gt;
&lt;h3 id=&#34;modify-folder-permissions&#34;&gt;Modify folder permissions&lt;/h3&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;To modify permissions, each provisioned folder must include the &lt;code&gt;_folder.json&lt;/code&gt; metadata file, which gives the folder a stable UID. Without it, the folder&amp;rsquo;s permissions are lost if you move or rename that folder in the Git repository. Refer to &lt;a href=&#34;#the-git-sync-folder-metadata-file&#34;&gt;The Git Sync folder metadata file&lt;/a&gt; for details about this file and why it exists.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Folder permissions attach to the folder&amp;rsquo;s UID (stored in &lt;code&gt;_folder.json&lt;/code&gt;), not to its repository path, so you can only set them after Git Sync has created the folder. To add or modify folder permissions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;From the UI, select &lt;strong&gt;Folder actions &amp;gt; Manage permissions&lt;/strong&gt; on the top right corner.&lt;/li&gt;
&lt;li&gt;Using the API, refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/developer-resources/api-reference/http-api/dashboard_permissions/&#34;&gt;Dashboard Permissions API&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;As code with Terraform, using the folder UID from &lt;code&gt;_folder.json&lt;/code&gt;. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-grafana/#modify-folder-level-permissions&#34;&gt;Modify folder-level permissions&lt;/a&gt; for manual and Terraform examples.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;the-git-sync-folder-metadata-file&#34;&gt;The Git Sync folder metadata file&lt;/h3&gt;
&lt;p&gt;Each provisioned folder in a synced repository contains a &lt;code&gt;_folder.json&lt;/code&gt; metadata file at its root. This file is the folder&amp;rsquo;s manifest: it stores the folder&amp;rsquo;s stable UID and its display name, so both survive changes to the repository layout.&lt;/p&gt;
&lt;p&gt;The file exists because a directory path isn&amp;rsquo;t a stable identity. Without &lt;code&gt;_folder.json&lt;/code&gt;, Grafana derives the folder UID from a hash of the directory path in the repository. If you move or rename that directory in Git, the hash changes and Grafana treats it as a different folder: everything attached to the old UID, such as custom folder permissions, bookmarks, and API references, is lost. With &lt;code&gt;_folder.json&lt;/code&gt;, the UID travels with the directory, so you can reorganize your repository without breaking permissions or references.&lt;/p&gt;
&lt;p&gt;The file also separates the folder&amp;rsquo;s display name from the directory name. The directory keeps a filesystem-friendly name, for example &lt;code&gt;team-platform&lt;/code&gt;, while the &lt;code&gt;spec.title&lt;/code&gt; field holds the name shown in the Grafana UI, for example &lt;code&gt;Team Platform&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Grafana manages this file for you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When you create a provisioned folder from the Grafana UI, Git Sync commits the &lt;code&gt;_folder.json&lt;/code&gt; file together with the folder.&lt;/li&gt;
&lt;li&gt;When you rename a folder in Grafana, Git Sync updates the &lt;code&gt;spec.title&lt;/code&gt; field in the file.&lt;/li&gt;
&lt;li&gt;If a folder is missing the file, for example because you created the directory directly in Git, Grafana falls back to the hash-derived UID and shows a warning in the UI with instructions on how to add the missing metadata.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The file has the following format:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JSON&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-json&#34;&gt;{
  &amp;#34;apiVersion&amp;#34;: &amp;#34;&amp;lt;API_VERSION&amp;gt;&amp;#34;,
  &amp;#34;kind&amp;#34;: &amp;#34;Folder&amp;#34;,
  &amp;#34;metadata&amp;#34;: {
    &amp;#34;name&amp;#34;: &amp;#34;&amp;lt;FOLDER_UID&amp;gt;&amp;#34;
  },
  &amp;#34;spec&amp;#34;: {
    &amp;#34;title&amp;#34;: &amp;#34;&amp;lt;FOLDER_UI_NAME&amp;gt;&amp;#34;
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;API_VERSION&amp;gt;&lt;/code&gt; is the version of the folders API. For example, &lt;code&gt;folder.grafana.app/v1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;FOLDER_UID&amp;gt;&lt;/code&gt; is the stable folder UID that Grafana uses for permissions, bookmarks, and API references. Treat this value as immutable: Grafana rejects folder UID changes, and changing it directly in Git breaks the link between the directory and the existing Grafana folder, with the same consequences as having no metadata file.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;FOLDER_UI_NAME&amp;gt;&lt;/code&gt; is the display name shown in the Grafana UI. This field is optional. If it&amp;rsquo;s not set, Grafana uses the directory name instead.&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="work-with-provisioned-repositories-in-git-sync">Work with provisioned repositories in Git Sync&lt;/h1>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>Git Sync functionalities are constantly evolving. &lt;a href="/help/">Contact Grafana&lt;/a> for support or to report any issues you encounter and help us improve this feature.&lt;/p></description></item><item><title>Work with provisioned dashboards in Git Sync</title><link>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/provisioned-dashboards/</link><pubDate>Tue, 18 Aug 2026 10:15:08 +0000</pubDate><guid>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/provisioned-dashboards/</guid><content><![CDATA[&lt;h1 id=&#34;work-with-provisioned-dashboards-in-git-sync&#34;&gt;Work with provisioned dashboards in Git Sync&lt;/h1&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Git Sync functionalities are constantly evolving. &lt;a href=&#34;/help/&#34;&gt;Contact Grafana&lt;/a&gt; for support or to report any issues you encounter and help us improve this feature.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Using provisioning, you can choose to store your dashboard JSON files in either Git repositories using Git Sync or a local path, and manage them through the Grafana interface. Dashboards and folders synchronized using Git Sync or a local path are referred to as &lt;em&gt;provisioned&lt;/em&gt; resources. &lt;strong&gt;Git Sync is the recommended method for provisioning your dashboards&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;manage-dashboards-provisioned-with-git-sync&#34;&gt;Manage dashboards provisioned with Git Sync&lt;/h2&gt;
&lt;p&gt;Using Git Sync, you can manage your dashboards in the UI and synchronize them with your configured Git repository. If you push a change in the repository, those changes are mirrored in your Grafana instance.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dashboards saved in your repository or local folder configured with Git Sync appear in a provisioned folder in Grafana.&lt;/li&gt;
&lt;li&gt;Any dashboard folders saved with Git Sync have a &lt;strong&gt;Provisioned&lt;/strong&gt; label in the UI.&lt;/li&gt;
&lt;li&gt;To save any changes to provisioned resources, open a pull request or commit directly to an existing branch, such as the &lt;code&gt;main&lt;/code&gt; branch.
&lt;ul&gt;
&lt;li&gt;Use pull requests to review changes to dashboards.&lt;/li&gt;
&lt;li&gt;Preview the changes before merging.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/key-concepts/&#34;&gt;Key concepts&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&#34;create-a-new-dashboard&#34;&gt;Create a new dashboard&lt;/h2&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;It may take a few minutes for your changes to reflect on your screen. If they don&amp;rsquo;t, refresh the UI manually.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;You have the following options to add new dashboards in your Git Sync connection:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create them directly within Git Sync-managed folders in the Grafana UI&lt;/li&gt;
&lt;li&gt;Add them by committing JSON files to your Git repository&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to add an existing dashboard to your provisioned resources, refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/export-resources/&#34;&gt;Export non-provisioned resources from Grafana&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;add-a-new-dashboard-from-the-grafana-ui&#34;&gt;Add a new dashboard from the Grafana UI&lt;/h3&gt;
&lt;p&gt;To add a new dashboard from the Grafana UI:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;On the &lt;strong&gt;Dashboards&lt;/strong&gt; tab, click on &lt;strong&gt;New&lt;/strong&gt; on the top right corner and chose one of these options:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New dashboard&lt;/strong&gt;. When you create a new dashboard in a provisioned folder associated with a Git repository, you follow the same process you use for any new dashboard. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/dashboards/build-dashboards/create-dashboard/&#34;&gt;Create a dashboard&lt;/a&gt; for more information.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Import dashboard&lt;/strong&gt;. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/export-resources/##add-a-dashboard-using-import-dashboards&#34;&gt;Add a dashboard using Import dashboards&lt;/a&gt; for more details.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use template&lt;/strong&gt;. Create a dashboard using a Grafana template.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After you create the dashboard, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Save dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;On the &lt;strong&gt;Provisioned dashboard&lt;/strong&gt; panel, choose the options you want to use:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Title&lt;/strong&gt;: The title of the dashboard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Description of the dashboard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Target folder&lt;/strong&gt;: The folder where you want to store the new dashboard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: Specify the branch name in your Git provider (for example, main).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository folder&lt;/strong&gt;: The folder inside the repository. Leave empty for the repository root.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filename&lt;/strong&gt;: The name of the dashboard file.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comment&lt;/strong&gt;: Add a comment describing your changes for you commit.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Optional: Select the &lt;strong&gt;Changes&lt;/strong&gt; tab to view the differences between the updates you made and the original resource.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt;, and the updated dashboard will load.&lt;/li&gt;
&lt;li&gt;On the prompt, select &lt;strong&gt;Open a pull request in GitHub&lt;/strong&gt; to open a new PR to your repository.&lt;/li&gt;
&lt;li&gt;Follow your usual Git workflow to save and merge the PR to your repository.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;edit-dashboards&#34;&gt;Edit dashboards&lt;/h2&gt;
&lt;p&gt;When you edit a provisioned resource, you&amp;rsquo;re prompted to save or discard those changes. Saving changes requires opening a pull request in your Git repository.&lt;/p&gt;
&lt;p&gt;To save dashboard changes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Edit&lt;/strong&gt; to update a provisioned dashboard.&lt;/li&gt;
&lt;li&gt;Make your desired changes, and click &lt;strong&gt;Save dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;On the &lt;strong&gt;Provisioned dashboard&lt;/strong&gt; panel, choose the options you want to use:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: Specify the branch name in your Git provider (for example, main).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository folder&lt;/strong&gt;: The folder inside the repository. Leave empty for the repository root.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filename&lt;/strong&gt;: The name of the dashboard file.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comment&lt;/strong&gt;: Add a comment describing your changes for your commit.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Optional: Select the &lt;strong&gt;Changes&lt;/strong&gt; tab to view the differences between the updates you made and the original resource.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt;, and the updated dashboard will load.&lt;/li&gt;
&lt;li&gt;On the prompt, select &lt;strong&gt;Open a pull request in GitHub&lt;/strong&gt; to open a new PR to your repository.&lt;/li&gt;
&lt;li&gt;Follow your usual Git workflow to save and merge the PR to your repository.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;remove-dashboards&#34;&gt;Remove dashboards&lt;/h2&gt;
&lt;p&gt;You can remove a provisioned dashboard by deleting the dashboard from the repository. The Grafana UI updates when the changes from the Git repository sync.&lt;/p&gt;
&lt;p&gt;To restore a deleted dashboard, raise a PR directly in your Git repository. Restoring resources from the UI isn&amp;rsquo;t possible at the moment.&lt;/p&gt;
&lt;h2 id=&#34;document-folders-with-a-readme&#34;&gt;Document folders with a README&lt;/h2&gt;
&lt;p&gt;You can document the contents or any other relevant piece of information of your provisioned folder in a &lt;code&gt;README.md&lt;/code&gt; file stored alongside its resources in the repository. Grafana renders the README inline on the folder page, below the list of dashboards, so your team can see what&amp;rsquo;s in the folder, how it&amp;rsquo;s organized, and where to find the right dashboard without leaving Grafana.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When the folder contains a &lt;code&gt;README.md&lt;/code&gt; file, Grafana renders its Markdown content. Relative links and images in the README resolve against the host repository.&lt;/li&gt;
&lt;li&gt;If the folder has no &lt;code&gt;README.md&lt;/code&gt;, or if the folder is empty, you&amp;rsquo;ll be prompted to action with a &lt;strong&gt;Add README&lt;/strong&gt; button.&lt;/li&gt;
&lt;li&gt;You can edit the README any time. Select the edit pencil in the README header to open the file in your Git provider&amp;rsquo;s editor and commit changes through your usual workflow.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;It may take a few minutes for your changes to reflect on your screen. If they don&amp;rsquo;t, refresh the UI manually.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;best-practices&#34;&gt;Best practices&lt;/h2&gt;
&lt;p&gt;Follow these recommendations when working with provisioned dashboards:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use GitHub pull requests for changes&lt;/strong&gt;: Maintain review processes for dashboard modifications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provide clear commit messages&lt;/strong&gt;: Describe your changes to help with tracking and collaboration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Regularly sync your repository&lt;/strong&gt;: Keep Grafana up to date with the latest changes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review the Events tab&lt;/strong&gt;: Monitor sync status to ensure changes are applied correctly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add a folder README&lt;/strong&gt;: Document each folder&amp;rsquo;s contents with a &lt;code&gt;README.md&lt;/code&gt; so your teammates can find the right dashboard quickly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/use-git-sync/&#34;&gt;Work with provisioned repositories&lt;/a&gt; for general guidance about using Git Sync.&lt;/p&gt;
]]></content><description>&lt;h1 id="work-with-provisioned-dashboards-in-git-sync">Work with provisioned dashboards in Git Sync&lt;/h1>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>Git Sync functionalities are constantly evolving. &lt;a href="/help/">Contact Grafana&lt;/a> for support or to report any issues you encounter and help us improve this feature.&lt;/p></description></item><item><title>Git Sync permissions and access control</title><link>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-grafana/</link><pubDate>Tue, 18 Aug 2026 10:15:08 +0000</pubDate><guid>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-grafana/</guid><content><![CDATA[&lt;h1 id=&#34;git-sync-permissions-and-access-control&#34;&gt;Git Sync permissions and access control&lt;/h1&gt;
&lt;p&gt;For Git Sync to work correctly you need to configure permissions at two layers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;At the Grafana level for repository management and resource access, as described in this document.&lt;/li&gt;
&lt;li&gt;At your Git provider level, to protect your repository. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-git/&#34;&gt;Repository protection for Git Sync&lt;/a&gt; for more information.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;grafana-role-based-permissions&#34;&gt;Grafana role-based permissions&lt;/h2&gt;
&lt;p&gt;Git Sync integrates with the Grafana standard role-based permission model, which has three levels:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Organization-level:&lt;/strong&gt; Default permissions of the &lt;code&gt;Admin&lt;/code&gt;, &lt;code&gt;Editor&lt;/code&gt;, or &lt;code&gt;Viewer&lt;/code&gt; role. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/administration/roles-and-permissions/&#34;&gt;Roles and permissions&lt;/a&gt; for more details.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Folder-level:&lt;/strong&gt; They also apply to all dashboards within it. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/dashboards/manage-dashboards/#folder-permissions&#34;&gt;Folder permissions&lt;/a&gt; for more details.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dashboard-level:&lt;/strong&gt; Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/dashboards/manage-dashboards/#manage-dashboard-permissions&#34;&gt;Dashboard permissions&lt;/a&gt; for more details.&lt;/li&gt;
&lt;/ol&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Dashboard-level permissions override folder-level permissions, which override organization-level roles.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;The following applies for Git Sync:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Permissions don&amp;rsquo;t sync&lt;/strong&gt;: Folder and dashboard permissions are managed in Grafana only and don&amp;rsquo;t sync to Git. You must configure permissions separately in each Grafana instance that uses the repository&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dashboard changes&lt;/strong&gt;: When users with appropriate dashboard or folder permissions modify dashboard content, those changes automatically sync to Git, or create pull requests if branch protection is enabled&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Folder structure&lt;/strong&gt;: Creating, renaming, or deleting folders syncs to Git&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;use-org-level-permissions-in-git-sync&#34;&gt;Use org-level permissions in Git Sync&lt;/h2&gt;
&lt;p&gt;If you apply org-level permissions, users can do the following with Git Sync:&lt;/p&gt;
&lt;h3 id=&#34;admin-users&#34;&gt;Admin users&lt;/h3&gt;
&lt;p&gt;If Grafana OSS/Enterprise, you need to have the &lt;code&gt;Admin&lt;/code&gt; role to set up and manage Git Sync repositories and connections. In Grafana Cloud, the equivalent role is &lt;strong&gt;Grafana Cloud Admin&lt;/strong&gt; or &lt;strong&gt;Admin&lt;/strong&gt; at the organization level.&lt;/p&gt;
&lt;p&gt;As an Admin you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configure new Git Sync repositories and connections&lt;/li&gt;
&lt;li&gt;Update repository settings (URL, branch, path, sync interval, webhook configuration)&lt;/li&gt;
&lt;li&gt;Delete repository connections&lt;/li&gt;
&lt;li&gt;Manage authentication credentials and Git provider connections&lt;/li&gt;
&lt;li&gt;Manually trigger sync operations (pull from Git)&lt;/li&gt;
&lt;li&gt;View sync status, logs, and statistics&lt;/li&gt;
&lt;li&gt;Access the Provisioning admin UI at &lt;strong&gt;Administration &amp;gt; General &amp;gt; Provisioning&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;editor-users&#34;&gt;Editor users&lt;/h3&gt;
&lt;p&gt;Users with the &lt;code&gt;Editor&lt;/code&gt; role can work with provisioned dashboards and folders. Their specific capabilities depend on the folder-level and dashboard-level permissions assigned to them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Organization-level capabilities&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;View dashboard preview links in pull requests&lt;/li&gt;
&lt;li&gt;Push their dashboard and folder changes to Git, including opening pull requests, via the jobs API&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Only Admins can trigger a manual sync (pull from Git) and orphan-resource clean-up&lt;/strong&gt;. Editors can push their own changes but can&amp;rsquo;t pull from Git on demand. Refer to &lt;a href=&#34;#job-actions-and-required-permissions&#34;&gt;Job actions and required permissions&lt;/a&gt; for more details.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Resource access&lt;/strong&gt; depends on folder/dashboard permissions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Folder Editor or Admin&lt;/strong&gt;: Create, edit, and delete dashboards within the folder; create subfolders; changes sync to Git&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Folder Viewer&lt;/strong&gt;: View dashboards only within that folder&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dashboard Editor or Admin&lt;/strong&gt;: Edit specific dashboards; changes sync to Git (even without folder edit access)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dashboard Viewer&lt;/strong&gt;: View specific dashboards only&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Editors don&amp;rsquo;t need access to the Provisioning admin UI or repository configuration. Refer to &lt;a href=&#34;#configure-folder-and-dashboard-permissions&#34;&gt;Configure folder and dashboard permissions&lt;/a&gt; and &lt;a href=&#34;#configure-fine-grained-access-control-rbac&#34;&gt;Configure fine-grained access control (RBAC)&lt;/a&gt; for details.&lt;/p&gt;
&lt;h3 id=&#34;viewer-users&#34;&gt;Viewer users&lt;/h3&gt;
&lt;p&gt;Users with the &lt;code&gt;Viewer&lt;/code&gt; role can view provisioned resources. Their access to specific dashboards and folders depends on the permissions assigned to them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Organization-level capabilities&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read Git Sync settings, via the &lt;code&gt;provisioning.settings:read&lt;/code&gt; permission&lt;/li&gt;
&lt;li&gt;View dashboard preview links in pull requests&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Resource access&lt;/strong&gt; depends on folder and dashboard permissions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Folder Viewer&lt;/strong&gt;: View all dashboards and subfolders within that folder&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dashboard Viewer&lt;/strong&gt;: View specific dashboards (even if they don&amp;rsquo;t have folder access)&lt;/li&gt;
&lt;li&gt;Cannot edit dashboards or manage Git Sync repositories&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configure-folder-and-dashboard-permissions&#34;&gt;Configure folder and dashboard permissions&lt;/h2&gt;
&lt;p&gt;Folder-level role permissions determine who can view, edit, or delete provisioned resources.&lt;/p&gt;
&lt;p&gt;These roles grant Grafana permissions (&lt;code&gt;dashboards:read&lt;/code&gt;, &lt;code&gt;dashboards:write&lt;/code&gt;, &lt;code&gt;folders:create&lt;/code&gt;&amp;hellip;) that are checked when users interact with provisioned resources through the Git Sync files endpoint. Dashboards within a provisioned folder inherit the folder&amp;rsquo;s permissions.&lt;/p&gt;
&lt;p&gt;When Git Sync creates a provisioned folder, it assigns these default permissions:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Grafana Role&lt;/th&gt;
              &lt;th&gt;Folder Permission&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Admin&lt;/td&gt;
              &lt;td&gt;Admin&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Editor&lt;/td&gt;
              &lt;td&gt;Editor&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Viewer&lt;/td&gt;
              &lt;td&gt;Viewer&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;strong&gt;Folder-level &lt;code&gt;Viewer&lt;/code&gt; users&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;View dashboards and folders&lt;/li&gt;
&lt;li&gt;Cannot create, edit, or delete resources&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Folder-level &lt;code&gt;Editor&lt;/code&gt; users&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Have all &lt;code&gt;Viewer&lt;/code&gt; permissions&lt;/li&gt;
&lt;li&gt;Create, edit and delete dashboards&lt;/li&gt;
&lt;li&gt;Create subfolders&lt;/li&gt;
&lt;li&gt;When an &lt;code&gt;Editor&lt;/code&gt; saves dashboard changes, Git Sync automatically commits the changes to Git, or creates a pull request if branch protection is enabled&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Folder-level &lt;code&gt;Admin&lt;/code&gt; users&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Have all &lt;code&gt;Editor&lt;/code&gt; permissions&lt;/li&gt;
&lt;li&gt;Update folder settings, rename and delete folders&lt;/li&gt;
&lt;li&gt;Modify folder permissions&lt;/li&gt;
&lt;li&gt;Full control over the folder and all its contents&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;modify-folder-level-permissions&#34;&gt;Modify folder-level permissions&lt;/h3&gt;
&lt;p&gt;Folder permissions in Grafana are attached to a folder&amp;rsquo;s &lt;strong&gt;UID&lt;/strong&gt;, not to its path in the Git repository. Git Sync stores this UID in the folder&amp;rsquo;s &lt;code&gt;_folder.json&lt;/code&gt; metadata file (in the &lt;code&gt;metadata.name&lt;/code&gt; field). For the metadata file schema and why it exists, refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/use-git-sync/#the-git-sync-folder-metadata-file&#34;&gt;The Git Sync folder metadata file&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Because permissions reference the folder UID, keep the following in mind:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Create the folders first.&lt;/strong&gt; A folder must exist in Grafana—and have a &lt;code&gt;_folder.json&lt;/code&gt; file with a stable UID—before you can assign permissions to it. Let Git Sync create and sync the folders, then apply the permissions that reference the resulting UIDs. If you try to set a permission for a folder that hasn&amp;rsquo;t been synced yet, there&amp;rsquo;s no UID to attach it to.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permissions don&amp;rsquo;t sync to Git.&lt;/strong&gt; You set them per Grafana instance. Every instance that syncs the same repository shares the same folder UIDs (from &lt;code&gt;_folder.json&lt;/code&gt;), so you can apply the same permission definitions to each instance.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;To safely modify permissions, each provisioned folder must include a &lt;code&gt;_folder.json&lt;/code&gt; metadata file with the folder&amp;rsquo;s UID. Without this file, the folder&amp;rsquo;s UID is derived from its repository path, so folder permissions can be lost if the folder is moved to a different path in the Git repository.&lt;/p&gt;
&lt;p&gt;For folders created from the Grafana UI, the metadata file is added automatically. If your folder is missing the metadata file, the UI shows a warning with instructions on how to add it. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/use-git-sync/#the-git-sync-folder-metadata-file&#34;&gt;The Git Sync folder metadata file&lt;/a&gt; for details about this file and why it exists.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;You can set folder permissions manually or as code. In both cases, apply them only after Git Sync has created the folders.&lt;/p&gt;
&lt;h4 id=&#34;set-permissions-manually&#34;&gt;Set permissions manually&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Grafana UI&lt;/strong&gt;: Navigate to the folder and select &lt;strong&gt;Folder actions &amp;gt; Manage permissions&lt;/strong&gt;. Add or edit permissions for roles, teams, or users.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP API&lt;/strong&gt;: Use the 
    &lt;a href=&#34;/docs/grafana/v13.2/developer-resources/api-reference/http-api/dashboard_permissions/&#34;&gt;Folder/Dashboard permissions API&lt;/a&gt;. Reference the folder by the UID stored in its &lt;code&gt;_folder.json&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RBAC (Enterprise/Cloud)&lt;/strong&gt;: Use 
    &lt;a href=&#34;/docs/grafana/v13.2/administration/roles-and-permissions/access-control/&#34;&gt;Role-Based Access Control&lt;/a&gt; for fine-grained permission management.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;set-permissions-with-terraform&#34;&gt;Set permissions with Terraform&lt;/h4&gt;
&lt;p&gt;You can manage folder permissions as code with the &lt;a href=&#34;https://registry.terraform.io/providers/grafana/grafana/latest/docs&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Grafana Terraform provider&lt;/a&gt;. Because Git Sync—not Terraform—creates the folders, reference each folder by the UID from its &lt;code&gt;_folder.json&lt;/code&gt; file (the &lt;code&gt;metadata.name&lt;/code&gt; value). Apply the permissions only after Git Sync has synced the folders, so the folder UIDs already exist.&lt;/p&gt;
&lt;p&gt;Use &lt;a href=&#34;https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/folder_permission_item&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;grafana_folder_permission_item&lt;/code&gt;&lt;/a&gt; to manage a single permission entry. This is additive, so it only manages the entries you declare and leaves other permissions untouched:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;terraform&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-terraform&#34;&gt;# The UID comes from the folder&amp;#39;s _folder.json metadata file (&amp;#34;metadata.name&amp;#34;).
locals {
  team_platform_folder_uid = &amp;#34;team-platform-abc123&amp;#34;
}

resource &amp;#34;grafana_folder_permission_item&amp;#34; &amp;#34;team_platform_editor&amp;#34; {
  folder_uid = local.team_platform_folder_uid
  team       = grafana_team.platform.id # an existing team
  permission = &amp;#34;Edit&amp;#34;
}

resource &amp;#34;grafana_folder_permission_item&amp;#34; &amp;#34;team_platform_viewer&amp;#34; {
  folder_uid = local.team_platform_folder_uid
  role       = &amp;#34;Viewer&amp;#34;
  permission = &amp;#34;View&amp;#34;
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Alternatively, use &lt;a href=&#34;https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/folder_permission&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;grafana_folder_permission&lt;/code&gt;&lt;/a&gt; to declare the full set of permissions for a folder in a single resource. This resource is authoritative: any permission that isn&amp;rsquo;t listed is removed when you apply the configuration.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Don&amp;rsquo;t manage these folders with the &lt;code&gt;grafana_folder&lt;/code&gt; resource—they&amp;rsquo;re owned by Git Sync. To avoid hardcoding UIDs, read them from the &lt;code&gt;_folder.json&lt;/code&gt; files in your repository, or look them up with a &lt;a href=&#34;https://registry.terraform.io/providers/grafana/grafana/latest/docs/data-sources/folder&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;grafana_folder&lt;/code&gt; data source&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;configure-fine-grained-access-control-rbac&#34;&gt;Configure fine-grained access control (RBAC)&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re a Grafana Enterprise or Grafana Cloud user with RBAC enabled, Git Sync provides fine-grained permissions that allow more granular control over Git Sync operations. You can create custom roles that combine Git Sync permissions in different ways. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/administration/roles-and-permissions/access-control/&#34;&gt;Role-Based Access Control&lt;/a&gt; documentation for instructions on creating and managing custom roles.&lt;/p&gt;
&lt;h3 id=&#34;how-basic-roles-map-to-rbac-permissions&#34;&gt;How basic roles map to RBAC permissions&lt;/h3&gt;
&lt;p&gt;Understanding which permissions each basic role receives helps you create custom roles or understand exactly what access users have. The tables below show which Git Sync permissions are granted to each role by default.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;The &lt;code&gt;provisioning.settings:read&lt;/code&gt; permission is granted to all roles (Viewer and above) and allows viewing Git Sync system settings, which is necessary for the UI to display properly. This does not grant access to modify settings or manage repositories.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h4 id=&#34;admin-role&#34;&gt;Admin role&lt;/h4&gt;
&lt;p&gt;Users with the &lt;code&gt;Admin&lt;/code&gt; role receive full access to Git Sync infrastructure:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Permission Category&lt;/th&gt;
              &lt;th&gt;Specific Permissions&lt;/th&gt;
              &lt;th&gt;What This Allows&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;strong&gt;Repositories&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.repositories:create&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.repositories:read&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.repositories:write&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.repositories:delete&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Create new repositories&lt;br&gt;View repository configurations&lt;br&gt;Update repository settings (branch, path, interval)&lt;br&gt;Delete repositories&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;strong&gt;Connections&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.connections:create&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.connections:read&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.connections:write&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.connections:delete&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Create Git provider connections&lt;br&gt;View connection details&lt;br&gt;Update connection settings&lt;br&gt;Delete connections&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;strong&gt;Jobs&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.jobs:create&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.jobs:read&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.jobs:write&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.jobs:delete&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Trigger manual syncs&lt;br&gt;View sync jobs&lt;br&gt;Modify sync job settings&lt;br&gt;Cancel/delete sync jobs&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;strong&gt;History &amp;amp; Monitoring&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.historicjobs:read&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.stats:read&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;View sync job history&lt;br&gt;View Git Sync statistics and metrics&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;strong&gt;Settings&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.settings:read&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;View Git Sync system settings&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;editor-role&#34;&gt;Editor role&lt;/h4&gt;
&lt;p&gt;Users with the &lt;code&gt;Editor&lt;/code&gt; role can manage sync operations but not infrastructure configuration:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Permission Category&lt;/th&gt;
              &lt;th&gt;Specific Permissions&lt;/th&gt;
              &lt;th&gt;What This Allows&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;strong&gt;Jobs&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.jobs:create&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.jobs:read&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.jobs:write&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.jobs:delete&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Push changes and open pull requests&lt;br&gt;View sync jobs&lt;br&gt;Modify sync job settings&lt;br&gt;Cancel/delete sync jobs&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;strong&gt;Read-Only Access&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.repositories:read&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.settings:read&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;View repository configurations&lt;br&gt;View Git Sync settings&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;&lt;code&gt;provisioning.jobs:create&lt;/code&gt; allows editors to create jobs to push their changes, subject to the relevant &lt;code&gt;dashboards:*&lt;/code&gt; and &lt;code&gt;folders:*&lt;/code&gt; permissions. However, &lt;strong&gt;it doesn&amp;rsquo;t allow admin-only job actions&lt;/strong&gt; such as a manual &lt;strong&gt;pull&lt;/strong&gt; from Git or orphan-resource cleanup, which require the &lt;code&gt;provisioning.repositories:write&lt;/code&gt; permission. Refer to &lt;a href=&#34;#job-actions-and-required-permissions&#34;&gt;Job actions and required permissions&lt;/a&gt; for more details.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;Editors&lt;/code&gt; can access resources based on the folder/dashboard assignments:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dashboards:create&lt;/code&gt;, &lt;code&gt;dashboards:read&lt;/code&gt;, &lt;code&gt;dashboards:write&lt;/code&gt;, &lt;code&gt;dashboards:delete&lt;/code&gt; - On folders/dashboards where assigned Folder Editor or Dashboard Editor&lt;/li&gt;
&lt;li&gt;&lt;code&gt;folders:create&lt;/code&gt;, &lt;code&gt;folders:read&lt;/code&gt;, &lt;code&gt;folders:write&lt;/code&gt;, &lt;code&gt;folders:delete&lt;/code&gt; - On folders where assigned Folder Editor&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;viewer-role&#34;&gt;Viewer role&lt;/h4&gt;
&lt;p&gt;Users with Viewer role have read-only access to Git Sync:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Permission Category&lt;/th&gt;
              &lt;th&gt;Specific Permissions&lt;/th&gt;
              &lt;th&gt;What This Allows&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;strong&gt;Read-Only Access&lt;/strong&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.repositories:read&lt;/code&gt;&lt;br&gt;&lt;code&gt;provisioning.settings:read&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;View repository configurations&lt;br&gt;View Git Sync settings (required for UI)&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;&lt;code&gt;Viewers&lt;/code&gt; can access resources based on the folder/dashboard assignments:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dashboards:read&lt;/code&gt; - On folders/dashboards where assigned Folder Viewer or Dashboard Viewer&lt;/li&gt;
&lt;li&gt;&lt;code&gt;folders:read&lt;/code&gt; - On folders where assigned Folder Viewer&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;rbac-for-dashboards-and-folders&#34;&gt;RBAC for dashboards and folders&lt;/h3&gt;
&lt;p&gt;Provisioned dashboards and folders use the Grafana standard permission model. To modify provisioned resources, you will need permissions over your dashboard and folder.&lt;/p&gt;
&lt;p&gt;The following applies for Git Sync:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need standard &lt;code&gt;dashboards:*&lt;/code&gt; and &lt;code&gt;folders:*&lt;/code&gt; permissions to work with provisioned resources&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Editors&lt;/code&gt; and &lt;code&gt;Viewers&lt;/code&gt; need &lt;code&gt;provisioning.settings:read&lt;/code&gt; and &lt;code&gt;provisioning.repositories:read&lt;/code&gt; to view Git Sync configuration&lt;/li&gt;
&lt;li&gt;You do &lt;strong&gt;not&lt;/strong&gt; need repository write/delete or connection permissions to edit dashboards&lt;/li&gt;
&lt;li&gt;Dashboard-level permissions override folder-level permissions&lt;/li&gt;
&lt;li&gt;Changes made by users with appropriate permissions automatically sync to Git&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;job-actions-and-required-permissions&#34;&gt;Job actions and required permissions&lt;/h3&gt;
&lt;p&gt;Git Sync operations run as jobs. You need the &lt;code&gt;provisioning.jobs:create&lt;/code&gt; permission to create any job. Moreover, &lt;strong&gt;some job actions are restricted to administrators&lt;/strong&gt; and require the &lt;code&gt;provisioning.repositories:write&lt;/code&gt; permission. This prevents editors from triggering repository-wide operations even though they hold &lt;code&gt;provisioning.jobs:create&lt;/code&gt;.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Job action&lt;/th&gt;
              &lt;th&gt;Required permission&lt;/th&gt;
              &lt;th&gt;Who can run it&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Push changes / open pull request&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.jobs:create&lt;/code&gt; plus the relevant &lt;code&gt;dashboards:*&lt;/code&gt; / &lt;code&gt;folders:*&lt;/code&gt; permissions&lt;/td&gt;
              &lt;td&gt;Editors and Admins, on the resources they can modify&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Migrate resources&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.jobs:create&lt;/code&gt; plus read/write on the affected resource types&lt;/td&gt;
              &lt;td&gt;Editors and Admins with the required resource permissions&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Manual sync (pull from Git)&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.repositories:write&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Admins only&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Release / delete orphaned resources&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.repositories:write&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Admins only&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;repository-subresource-access&#34;&gt;Repository subresource access&lt;/h3&gt;
&lt;p&gt;The repository API exposes several subresources. The following table shows the permission each one is gated on.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;refs&lt;/code&gt; subresource lists the repository&amp;rsquo;s branches and commits, and two distinct flows legitimately need it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Editors pushing changes&lt;/strong&gt;: When an editor saves changes or opens a pull request through the push-job flow, Grafana needs the branch list. This is authorized with &lt;code&gt;provisioning.jobs:create&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Admins configuring a repository&lt;/strong&gt;: When an admin or repository owner sets up or edits a repository and picks a target branch, Grafana updates the &lt;code&gt;Repository&lt;/code&gt; resource info. This is authorized with &lt;code&gt;provisioning.repositories:write&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because the &lt;code&gt;repositories&lt;/code&gt; resource has no Editor tier (&lt;code&gt;repositories:read&lt;/code&gt; is granted to Viewer and above, while &lt;code&gt;write&lt;/code&gt;, &lt;code&gt;create&lt;/code&gt;, and &lt;code&gt;delete&lt;/code&gt; are admin-only), &lt;code&gt;refs&lt;/code&gt; accepts either of these checks, and viewers satisfy neither.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Subresource&lt;/th&gt;
              &lt;th&gt;Purpose&lt;/th&gt;
              &lt;th&gt;Required permission&lt;/th&gt;
              &lt;th&gt;Who can access it&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;files&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Read and write provisioned resource files&lt;/td&gt;
              &lt;td&gt;Authenticated access, then standard &lt;code&gt;dashboards:*&lt;/code&gt; / &lt;code&gt;folders:*&lt;/code&gt; checks&lt;/td&gt;
              &lt;td&gt;All authenticated users&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;refs&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;List repository branches and commits&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.repositories:write&lt;/code&gt; &lt;strong&gt;or&lt;/strong&gt; &lt;code&gt;provisioning.jobs:create&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Admins and Editors&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;resources&lt;/code&gt;, &lt;code&gt;history&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Repository management and inspection views&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;provisioning.repositories:write&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Admins only&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;The management and inspection views (&lt;code&gt;resources&lt;/code&gt;, &lt;code&gt;history&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;) are gated on &lt;code&gt;provisioning.repositories:write&lt;/code&gt; rather than &lt;code&gt;repositories:read&lt;/code&gt;, because there&amp;rsquo;s no admin-only read action on the &lt;code&gt;repositories&lt;/code&gt; resource. As a result, only users who can manage a repository can inspect its management views; Viewers and Editors can&amp;rsquo;t access these views.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;configure-git-repository-protection&#34;&gt;Configure Git repository protection&lt;/h2&gt;
&lt;p&gt;After you&amp;rsquo;ve configured your Grafana permissions, set up the appropriate permissions at your Git provider to write changes. Repository protection settings control write access, branch protection rules, and code review requirements.&lt;/p&gt;
&lt;p&gt;For detailed information about configuring repository write access and branch protection, refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-git/&#34;&gt;Repository protection for Git Sync&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;troubleshoot-permissions&#34;&gt;Troubleshoot permissions&lt;/h2&gt;
&lt;h3 id=&#34;permission-denied-when-saving-a-dashboard&#34;&gt;&amp;ldquo;Permission denied&amp;rdquo; when saving a dashboard&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Cause&lt;/strong&gt;: User lacks &lt;strong&gt;Editor&lt;/strong&gt; or &lt;strong&gt;Admin&lt;/strong&gt; permission on the provisioned folder.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Verify the user&amp;rsquo;s folder-level permissions in Grafana&lt;/li&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Folder settings &amp;gt; Permissions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Grant the user or their team &lt;strong&gt;Editor&lt;/strong&gt; or &lt;strong&gt;Admin&lt;/strong&gt; role&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;git-sync-fails-with-403-forbidden-or-unauthorized&#34;&gt;Git Sync fails with &amp;ldquo;403 Forbidden&amp;rdquo; or &amp;ldquo;Unauthorized&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Cause&lt;/strong&gt;: The Git provider authentication credentials lack the required repository permissions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Verify the authentication credentials (GitHub App, Personal Access Token) have &lt;strong&gt;read and write&lt;/strong&gt; permissions on the repository&lt;/li&gt;
&lt;li&gt;If using a GitHub App or OAuth app, verify it is installed and authorized for the target repository&lt;/li&gt;
&lt;li&gt;Check that the credentials have permission to create pull requests (if branch protection is enabled)&lt;/li&gt;
&lt;li&gt;Verify authentication credentials haven&amp;rsquo;t expired&lt;/li&gt;
&lt;li&gt;For expired or revoked tokens, generate new credentials and update the Git Sync connection configuration&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;dashboard-changes-commit-directly-instead-of-creating-pull-requests&#34;&gt;Dashboard changes commit directly instead of creating pull requests&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Cause&lt;/strong&gt;: Branch protection is not configured at the Git provider.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Enable branch protection rules at your Git provider to enforce pull request workflows or in your Grafana repository settings. Refer to your Git provider&amp;rsquo;s documentation for instructions on configuring branch protection.&lt;/p&gt;
&lt;h3 id=&#34;dashboard-changes-commit-directly-without-review&#34;&gt;Dashboard changes commit directly without review&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Cause&lt;/strong&gt;: Branch protection is not configured at the Git provider.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Enable branch protection on the target branch at your Git provider&lt;/li&gt;
&lt;li&gt;Configure the branch to require pull requests before merging&lt;/li&gt;
&lt;li&gt;Verify the branch name in protection rules matches the branch configured in Grafana&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;pull-requests-not-created-when-expected&#34;&gt;Pull requests not created when expected&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Cause&lt;/strong&gt;: Branch protection is not enabled or the authentication credentials lack pull request creation permission.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Verify branch protection is enabled on the correct branch&lt;/li&gt;
&lt;li&gt;Check that the credentials have permission to create pull requests&lt;/li&gt;
&lt;li&gt;Ensure the branch name in Git Sync settings matches the protected branch exactly&lt;/li&gt;
&lt;/ol&gt;
]]></content><description>&lt;h1 id="git-sync-permissions-and-access-control">Git Sync permissions and access control&lt;/h1>
&lt;p>For Git Sync to work correctly you need to configure permissions at two layers:&lt;/p>
&lt;ul>
&lt;li>At the Grafana level for repository management and resource access, as described in this document.&lt;/li>
&lt;li>At your Git provider level, to protect your repository. Refer to
&lt;a href="/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-git/">Repository protection for Git Sync&lt;/a> for more information.&lt;/li>
&lt;/ul>
&lt;h2 id="grafana-role-based-permissions">Grafana role-based permissions&lt;/h2>
&lt;p>Git Sync integrates with the Grafana standard role-based permission model, which has three levels:&lt;/p></description></item><item><title>Configure Git repository protection</title><link>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-git/</link><pubDate>Tue, 18 Aug 2026 10:15:08 +0000</pubDate><guid>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-git/</guid><content><![CDATA[&lt;h1 id=&#34;configure-git-repository-protection&#34;&gt;Configure Git repository protection&lt;/h1&gt;
&lt;p&gt;For Git Sync to work correctly you need to configure permissions at two layers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;At your Git provider level, to protect your repository, as described in this document.&lt;/li&gt;
&lt;li&gt;At the Grafana level for repository management and resource access. Refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-grafana/&#34;&gt;Git Sync permissions and access control&lt;/a&gt; for more information.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you use Git Sync, your dashboard configurations are stored as code in a Git repository. You can configure Git repository protection to control who can access this source code and who can modify it. Repository protection works as an additional security layer after Grafana internal permissions.&lt;/p&gt;
&lt;h2 id=&#34;required-permissions-at-the-git-provider-level&#34;&gt;Required permissions at the Git provider level&lt;/h2&gt;
&lt;p&gt;Git Sync authentication credentials must have specific permissions at your Git provider:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Required for all configurations&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read access to repository contents&lt;/li&gt;
&lt;li&gt;Read access to branch information&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Required for writing changes&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Write access to create commits&lt;/li&gt;
&lt;li&gt;Permission to create pull requests (when branch protection is enabled)&lt;/li&gt;
&lt;li&gt;Permission to push to feature branches (for creating pull requests)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Optional for instant synchronization&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Permission to create and manage webhooks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refer to the 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/&#34;&gt;Git Sync setup documentation&lt;/a&gt; for detailed instructions on configuring authentication for your Git provider.&lt;/p&gt;
&lt;h2 id=&#34;control-access-to-the-dashboards-source-code&#34;&gt;Control access to the dashboards source code&lt;/h2&gt;
&lt;p&gt;You can access dashboard source code through two paths, each with its own protection mechanism:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Grafana files endpoint&lt;/strong&gt;: Users can view and edit dashboard source code through the Grafana files API endpoint. Use Grafana folder and dashboard permissions to control this access. Refer to &lt;a href=&#34;#manage-access-to-dashboard-source-code-via-the-api&#34;&gt;Manage access to dashboard source code via the API&lt;/a&gt; for more information.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Git repository&lt;/strong&gt;: Users with repository access can view and modify dashboard files directly in Git. You can control repository permissions in your Git provider. Refer to &lt;a href=&#34;#control-access-to-your-git-repository&#34;&gt;Control access to your Git repository &lt;/a&gt; for more information.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Protect both access points to secure your dashboard configurations.&lt;/p&gt;
&lt;h2 id=&#34;manage-access-to-dashboard-source-code-via-the-api&#34;&gt;Manage access to dashboard source code via the API&lt;/h2&gt;
&lt;h3 id=&#34;view-dashboard-source-code&#34;&gt;View dashboard source code&lt;/h3&gt;
&lt;p&gt;You can view dashboard source code through the files endpoint if you have &lt;strong&gt;Viewer&lt;/strong&gt; permission or higher on the dashboard or its parent folder. This allows you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;List files in provisioned folders and branches&lt;/li&gt;
&lt;li&gt;Read dashboard JSON content&lt;/li&gt;
&lt;li&gt;View folder structure and organization&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;edit-dashboard-source-code&#34;&gt;Edit dashboard source code&lt;/h3&gt;
&lt;p&gt;You can modify dashboard source code through the files endpoint if you have &lt;strong&gt;Editor&lt;/strong&gt; or &lt;strong&gt;Admin&lt;/strong&gt; permission on the dashboard or its parent folder. This allows you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create new dashboard files&lt;/li&gt;
&lt;li&gt;Update existing dashboard content&lt;/li&gt;
&lt;li&gt;Delete dashboards&lt;/li&gt;
&lt;li&gt;Modify folder structure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you save changes through this endpoint, Git Sync commits those changes to the Git repository (or creates pull requests if branch protection is enabled), subject to Git repository permissions.&lt;/p&gt;
&lt;p&gt;For detailed information about configuring folder and dashboard permissions in Grafana, refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-grafana/&#34;&gt;Git Sync permissions and access control&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;control-access-to-your-git-repository&#34;&gt;Control access to your Git repository&lt;/h2&gt;
&lt;p&gt;Access control at the Git provider level determines who can view and modify your dashboard source code. Configure repository access based on your security and compliance requirements.&lt;/p&gt;
&lt;h3 id=&#34;read-access-repository-visibility&#34;&gt;Read access (repository visibility)&lt;/h3&gt;
&lt;p&gt;Read access controls who can view the dashboard source code stored in your repository. This includes dashboard JSON files, folder structure, and any other files in the repository.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Public repositories&lt;/strong&gt;: Anyone can view the repository contents, including dashboard configurations and any data or queries they contain. Only use public repositories if your dashboards contain no sensitive information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Private repositories&lt;/strong&gt;: Only authorized users can view repository contents. This protects dashboard configurations, queries, and any embedded credentials or sensitive data from public access.&lt;/p&gt;
&lt;p&gt;For Git Sync to function, the authentication credentials configured in Grafana must have read access to pull dashboard changes from Git to Grafana.&lt;/p&gt;
&lt;h3 id=&#34;write-access-push-permissions&#34;&gt;Write access (push permissions)&lt;/h3&gt;
&lt;p&gt;Write access controls who can push changes to your repository. This determines who can modify dashboard source code, either directly or through pull requests.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Direct write access&lt;/strong&gt;: Users with write permission can push commits directly to branches. For Git Sync to push dashboard changes from Grafana to Git, the authentication credentials must have write access to the repository.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Protected branches&lt;/strong&gt;: Branch protection rules can restrict direct writes and require changes to go through pull requests with review and approval, even for users with write access.&lt;/p&gt;
&lt;p&gt;Refer to the 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/git-sync-setup/&#34;&gt;Git Sync setup documentation&lt;/a&gt; for detailed instructions on configuring authentication for your Git provider.&lt;/p&gt;
&lt;h2 id=&#34;control-how-changes-are-written-in-git-sync&#34;&gt;Control how changes are written in Git Sync&lt;/h2&gt;
&lt;p&gt;Git Sync supports different modes for writing dashboard changes to your repository, from allowing direct commits to requiring formal review processes.&lt;/p&gt;
&lt;h3 id=&#34;read-only-mode&#34;&gt;Read-only mode&lt;/h3&gt;
&lt;p&gt;Configure the repository as read-only in Grafana to prevent any writes to Git from the Grafana UI. Dashboards sync from Git to Grafana, but users cannot save changes back to Git.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use when&lt;/strong&gt;: Git is the single source of truth and all changes must be made through direct Git commits or CI/CD processes.&lt;/p&gt;
&lt;h3 id=&#34;direct-commit-mode&#34;&gt;Direct commit mode&lt;/h3&gt;
&lt;p&gt;When the repository allows writes and branch protection is not enabled, Git Sync commits dashboard changes directly to the configured branch without review.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use when&lt;/strong&gt;: Rapid iteration is needed and changes don&amp;rsquo;t require formal review, such as in development environments.&lt;/p&gt;
&lt;h3 id=&#34;pull-request-mode&#34;&gt;Pull request mode&lt;/h3&gt;
&lt;p&gt;When branch protection is enabled at your Git provider, Git Sync creates pull requests instead of committing directly. Changes require review and approval before merging to the main branch.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use when&lt;/strong&gt;: Changes require review and approval, such as in production environments or when multiple teams collaborate on dashboards.&lt;/p&gt;
&lt;h2 id=&#34;protect-your-branch&#34;&gt;Protect your branch&lt;/h2&gt;
&lt;p&gt;Branch protection rules at your Git provider enforce how changes are made to specific branches. When enabled on the branch that Git Sync targets, these rules require Git Sync to create pull requests instead of pushing commits directly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Common use cases for branch protection&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Production environments requiring change approval&lt;/li&gt;
&lt;li&gt;Compliance requirements for audit trails and review&lt;/li&gt;
&lt;li&gt;Multi-team environments where changes need visibility&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Branch protection can enforce various controls such as requiring pull requests before merging, setting reviewer approval requirements, running automated validation checks, preventing force pushes, and restricting who can push directly to protected branches.&lt;/p&gt;
&lt;p&gt;Refer to your Git provider&amp;rsquo;s documentation for specific instructions on configuring branch protection rules.&lt;/p&gt;
&lt;h2 id=&#34;code-review-assignments&#34;&gt;Code review assignments&lt;/h2&gt;
&lt;p&gt;Many Git providers support &lt;code&gt;CODEOWNERS&lt;/code&gt; files that automatically assign reviewers to pull requests based on which files are changed. When Git Sync creates a pull request, the Git provider can use the &lt;code&gt;CODEOWNERS&lt;/code&gt; file to assign the appropriate team or users for review.&lt;/p&gt;
&lt;p&gt;This ensures dashboard changes are reviewed by the teams responsible for those dashboards, based on folder path or file patterns.&lt;/p&gt;
&lt;p&gt;Refer to your Git provider&amp;rsquo;s documentation for instructions on configuring &lt;code&gt;CODEOWNERS&lt;/code&gt; files.&lt;/p&gt;
&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h2&gt;
&lt;p&gt;For permissions troubleshooting refer to 
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-grafana/#troubleshoot-permissions&#34;&gt;Troubleshoot permissions&lt;/a&gt; in the Git Sync permissions documentation.&lt;/p&gt;
]]></content><description>&lt;h1 id="configure-git-repository-protection">Configure Git repository protection&lt;/h1>
&lt;p>For Git Sync to work correctly you need to configure permissions at two layers:&lt;/p>
&lt;ul>
&lt;li>At your Git provider level, to protect your repository, as described in this document.&lt;/li>
&lt;li>At the Grafana level for repository management and resource access. Refer to
&lt;a href="/docs/grafana/v13.2/as-code/observability-as-code/git-sync/permissions-grafana/">Git Sync permissions and access control&lt;/a> for more information.&lt;/li>
&lt;/ul>
&lt;p>When you use Git Sync, your dashboard configurations are stored as code in a Git repository. You can configure Git repository protection to control who can access this source code and who can modify it. Repository protection works as an additional security layer after Grafana internal permissions.&lt;/p></description></item><item><title>Git Sync deployment scenarios</title><link>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/scenarios/</link><pubDate>Tue, 18 Aug 2026 10:15:08 +0000</pubDate><guid>https://grafana.com/docs/grafana/v13.2/as-code/observability-as-code/git-sync/scenarios/</guid><content><![CDATA[&lt;h1 id=&#34;git-sync-deployment-scenarios&#34;&gt;Git Sync deployment scenarios&lt;/h1&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Git Sync functionalities are constantly evolving. &lt;a href=&#34;/help/&#34;&gt;Contact Grafana&lt;/a&gt; for support or to report any issues you encounter and help us improve this feature.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;This guide shows practical deployment scenarios for Grafana’s Git Sync. Learn how to configure bidirectional synchronization between Grafana and Git repositories for teams, environments, and regions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/git-sync-deployment-scenarios/single-instance/&#34;&gt;Single instance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/git-sync-deployment-scenarios/dev-prod/&#34;&gt;Git Sync for development and production environments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/git-sync-deployment-scenarios/multi-region/&#34;&gt;Git Sync with regional replication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/git-sync-deployment-scenarios/testing-sandboxes/&#34;&gt;Testing sandboxes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/git-sync-deployment-scenarios/high-availability/&#34;&gt;High availability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/git-sync-deployment-scenarios/multi-team/&#34;&gt;Git Sync in a shared Grafana instance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;learn-more&#34;&gt;Learn more&lt;/h2&gt;
&lt;p&gt;Refer to the following documents to learn more:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/intro-git-sync/&#34;&gt;Git Sync introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/git-sync/key-concepts/&#34;&gt;Git Sync key concepts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/provision-resources/git-sync-setup/&#34;&gt;Git Sync setup guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/administration/provisioning/&#34;&gt;Dashboard provisioning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/grafana/v13.2/as-code/observability-as-code/&#34;&gt;Observability as Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="git-sync-deployment-scenarios">Git Sync deployment scenarios&lt;/h1>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>Git Sync functionalities are constantly evolving. &lt;a href="/help/">Contact Grafana&lt;/a> for support or to report any issues you encounter and help us improve this feature.&lt;/p></description></item></channel></rss>