> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omni.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Safely rename a git-connected shared model

> Rename a git-connected shared model's display name without breaking its git sync folder or losing synced files.

export const categoryIcons = {
  'administration': 'lock',
  'api': 'terminal',
  'connections': 'database',
  'dashboards': 'table-columns',
  'embed': 'code',
  'errors': 'exclamation',
  'migration': 'angles-right',
  'modeling': 'wrench',
  'patterns': 'plus',
  'schedules & alerts': 'envelope',
  'visualizations': 'chart-column',
  'workbooks': 'book'
};

export const GuideSidebar = ({category, relatedLinks, updatedDate}) => {
  const [progress, setProgress] = React.useState(0);
  React.useEffect(() => {
    const sidebar = document.querySelector('.guide-sidebar');
    if (!sidebar) return;
    let container = sidebar.parentElement;
    while (container && !container.querySelector('.guide-header')) {
      container = container.parentElement;
    }
    if (container && !container.classList.contains('guide-page-layout')) {
      container.classList.add('guide-page-layout');
    }
  }, []);
  React.useEffect(() => {
    const handleScroll = () => {
      const scrollTop = window.scrollY;
      const docHeight = document.documentElement.scrollHeight - window.innerHeight;
      const scrollPercent = docHeight > 0 ? scrollTop / docHeight * 100 : 0;
      setProgress(Math.min(100, Math.max(0, scrollPercent)));
    };
    window.addEventListener('scroll', handleScroll, {
      passive: true
    });
    handleScroll();
    return () => window.removeEventListener('scroll', handleScroll);
  }, []);
  const icon = category ? categoryIcons[category.toLowerCase()] || 'book' : 'book';
  return <aside className="guide-sidebar">
      <div className="guide-sidebar-content">
        <a href="/guides" className="guide-sidebar-back">
          <Icon icon="arrow-left" iconType="solid" size={14} />
          <span>All guides</span>
        </a>

        <div className="guide-sidebar-section">
          <div className="guide-sidebar-label">Progress</div>
          <div className="guide-sidebar-progress">
            <div className="guide-mascot">
              <svg viewBox="0 0 688 690" width="48" height="48">
                <defs>
                  <clipPath id="progressClip">
                    <rect x="0" y={0} width="688" height={progress * 6.9} />
                  </clipPath>
                </defs>

                {}
                <path d="M343.67 1.5C542.684 1.5 685.84 149.351 685.84 344.84C685.84 540.328 542.685 688.18 343.67 688.18C144.655 688.18 1.5 540.318 1.5 344.84C1.50007 149.361 144.655 1.50005 343.67 1.5Z" fill="#FCFCF7" stroke="#FF5FA2" strokeWidth="3" />

                {}
                <path d="M343.67 0C143.81 0 0 148.55 0 344.84C0 541.13 143.81 689.68 343.67 689.68C543.53 689.68 687.34 541.14 687.34 344.84C687.34 148.54 543.53 0 343.67 0Z" fill="#FF5FA2" clipPath="url(#progressClip)" />

                {}
                <path d="M337.89 319.29C337.89 336.75 322.49 350.14 302.81 349.83C286.18 349.57 273.89 337.29 274.37 321.45C274.88 304.82 290.91 290.88 309.98 290.44C325.69 290.09 337.88 302.69 337.88 319.29H337.89Z" fill="#4D122C" />
                <path d="M566.17 319.29C566.17 336.75 550.77 350.14 531.09 349.83C514.46 349.57 502.17 337.29 502.65 321.45C503.16 304.82 519.19 290.88 538.26 290.44C553.97 290.09 566.16 302.69 566.16 319.29H566.17Z" fill="#4D122C" />
                <path d="M367.74 342.07C360.22 346.32 359.4 354.9 370.62 366.4C381.85 377.9 399.76 389.56 420.81 389.18C441.88 389.1 460.67 377.72 472.47 363.53C473.83 361.93 478.84 356.88 478.51 351.07C478.32 348.35 476.17 341.19 467.83 341.38C463.46 341.44 461.21 343.68 456.69 347.36C445.2 356.14 432.7 361.21 420.56 361.27C408.43 361.43 395.68 356.17 385.39 347.22C380.32 342.81 375.25 337.82 367.74 342.07Z" fill="#4D122C" />
              </svg>
            </div>
            <span className="guide-sidebar-progress-text">{Math.round(progress)}%</span>
          </div>
        </div>

        {category && <div className="guide-sidebar-section">
            <div className="guide-sidebar-label">Category</div>
            <div className="guide-sidebar-category">
              <Icon icon={icon} iconType="solid" size={14} />
              <span>{category}</span>
            </div>
          </div>}

        {updatedDate && <div className="guide-sidebar-section">
            <div className="guide-sidebar-label">Last updated</div>
            <div className="guide-sidebar-date">{updatedDate}</div>
          </div>}

        {relatedLinks && relatedLinks.length > 0 && <div className="guide-sidebar-section">
            <div className="guide-sidebar-label">Related</div>
            <ul className="guide-sidebar-links">
              {relatedLinks.map((link, index) => <li key={index}>
                  <a href={link.href}>{link.title}</a>
                </li>)}
            </ul>
          </div>}
      </div>
    </aside>;
};

export const GuideTitle = ({title}) => {
  return <div className="guide-header">
      <h1 className="guide-title">{title}</h1>
    </div>;
};

<GuideSidebar
  categoryIcons={categoryIcons}
  category="modeling"
  updatedDate="July 2026"
  relatedLinks={[
{ title: "Git integration settings", href: "/integrations/git/settings" },
{ title: "Git integration troubleshooting", href: "/integrations/git/troubleshooting" },
{ title: "Model management", href: "/modeling/develop/model-management" },
{ title: "Rename Model API", href: "/api/models/rename-model" }
]}
/>

<GuideTitle title="Safely rename a git-connected shared model" />

This guide explains how to rename a git-connected shared model's display name without disrupting its git sync folder or losing previously synced files. Renaming a model's display name is safe for saved dashboards and workbooks, but it can silently break git sync if the model's **Model path** setting was never set explicitly.

## Requirements

To follow the steps in this guide, you'll need:

* A shared model with [git integration](/integrations/git/index) enabled
* Admin access to the model's [Git settings](/integrations/git/settings)

## How model path resolution works

Every git-connected model has a **Model path** setting (**Model > Git settings**) that determines the folder in your repository where Omni reads and writes the model's files. This setting has two distinct states:

* **Explicit Model path set**: the sync folder is pinned to that value. Renaming the model's display name has no effect on the sync folder.
* **Model path unset (the default state)**: Omni doesn't use a fixed folder. Instead, it derives the sync folder from the model's *current display name* at sync time (default pattern: `omni/<current-display-name>`). This is re-evaluated live, not a value captured once when the model was created.

<Warning>
  If Model path is unset and you rename the model's display name, the next git sync looks for (and writes to) a *new* folder derived from the new name, while your previously synced files remain in the *old* folder derived from the old name. Omni sees an empty or missing folder at the new path, and the model can appear to lose all of its content.
</Warning>

## What is and isn't affected by renaming

* The model's ID never changes on rename. Saved dashboards and workbooks reference the model by ID, and fields are referenced by view name, not display name, so neither depends on the display name.
* Once Model path is pinned, renaming the display name doesn't break existing saved content.
* Field IDs and view names are unaffected by a model display-name rename.

## Steps

<Steps titleSize="h3">
  <Step title="Check whether Model path is already set">
    In the model IDE, go to **Model > Git settings** and check the **Model path** field. If it already contains an explicit path, you can rename the model's display name directly and skip the remaining steps.
  </Step>

  <Step title="Set an explicit Model path">
    If Model path is empty, set it to the model's current folder in your repository, using a leading slash (e.g. `/omni/<current-model-name>`).
  </Step>

  <Step title="Confirm the setting saved">
    Reload the Git settings panel and verify the Model path value persisted and matches your repository's actual folder structure.
  </Step>

  <Step title="Rename the model's display name">
    Use the model rename UI, or the [Rename Model API](/api/models/rename-model), to update the display name.
  </Step>

  <Step title="Verify the git sync">
    Trigger a sync and confirm the model's files still resolve from the pinned folder, with no unexpected file additions or deletions.
  </Step>
</Steps>

<Tip>
  Test this full sequence on a non-production, git-connected model before applying it to a production model with meaningful content.
</Tip>

## Related constraints when renaming a git-connected model

* The new name must be unique among active models with the same model kind and base model.
* The name must match the git-compatible pattern (word characters, hyphens, and forward slashes only).
* The new name can't conflict with an existing git ref path (for example, renaming to `team` when `team/project` already exists).
* You can't rename a branch model that has an open pull request — doing so would desync Omni from the git remote.

## Next steps

* Review [Git integration troubleshooting](/integrations/git/troubleshooting) if files appear missing after a rename.
* See [Model management](/modeling/develop/model-management) for broader model lifecycle guidance.
