# How Versioned Templates Work for Different Framework Versions in GitHub's Gitignore Repository

> Discover how versioned templates in the github gitignore repository manage framework versions using evergreen files and legacy release folders for seamless integration.

- Repository: [GitHub/gitignore](https://github.com/github/gitignore)
- Tags: internals
- Published: 2026-02-24

---

**The gitignore repository stores current framework versions as "evergreen" files at the repository root, while legacy releases live in the `community/` folder with version numbers embedded in their filenames.**

The `github/gitignore` repository maintains `.gitignore` templates for hundreds of frameworks and programming languages. Understanding how **versioned templates** handle different framework releases ensures you select the correct ignore rules for your specific project version, whether you're using the latest release or maintaining legacy code.

## Understanding the Versioned Template Structure

The repository organizes templates into two distinct categories based on framework maturity and version history.

### Evergreen Templates at the Repository Root

Files located at the repository root represent the currently supported version of a framework. These "evergreen" templates contain no version numbers in their filenames. For example, `Umbraco.gitignore` at the root contains ignore rules for the latest supported Umbraco CMS release.

According to the repository's [`README.md`](https://github.com/github/gitignore/blob/main/README.md) (lines 92-106), these root files serve as the default selection for tools like GitHub's "Add .gitignore" interface, ensuring users automatically receive up-to-date ignore patterns.

### Legacy Versions in the Community Folder

Older framework releases reside in the `community/` directory with version-specific filenames. This naming convention embeds the version number directly into the file, making it immediately identifiable. For instance, `community/DotNet/Umbraco-8.5.3.gitignore` contains ignore rules specifically for Umbraco version 8.5.3.

This structure allows maintainers to preserve backward-compatible templates while keeping the root directory uncluttered with historical versions.

## How Framework Versioning Works in Practice

When a framework releases a new major version that requires different ignore patterns, maintainers execute a specific workflow to update the repository.

Consider the Umbraco CMS example. When version 9.x released with different build artifacts than version 8.x, the maintainer:

1. Moved the existing root template to the community folder with a version tag
2. Updated the root `Umbraco.gitignore` with new patterns for version 9.x

This ensures that `curl` requests to the root file always return the latest rules, while specific versions remain accessible.

### Fetching the Latest Template

To retrieve the current evergreen version for a project:

```bash
curl -L https://raw.githubusercontent.com/github/gitignore/main/Umbraco.gitignore > .gitignore

```

This command downloads the root `Umbraco.gitignore` file, which contains ignore rules for the latest supported framework version.

### Fetching a Specific Legacy Version

For projects using older framework releases, target the community folder with the version-specific filename:

```bash
curl -L https://raw.githubusercontent.com/github/gitignore/main/community/DotNet/Umbraco-8.5.3.gitignore \
    > .gitignore

```

This retrieves the exact ignore patterns for Umbraco 8.5.3, ensuring compatibility with that specific release's build artifacts and directory structure.

## Maintainer Workflow for Updating Versioned Templates

When contributing version updates to the repository, maintainers follow a specific git workflow to preserve history while updating the evergreen file.

### Archiving the Current Version

First, move the existing root template to the community folder with an appropriate version tag:

```bash
git mv Umbraco.gitignore community/DotNet/Umbraco-9.2.0.gitignore

```

This preserves the current rules as a historical artifact while maintaining git history through the rename operation.

### Updating the Evergreen Template

Next, create or update the root file with patterns for the new framework release:

```bash

# Edit Umbraco.gitignore with new ignore rules for version 10.x

nano Umbraco.gitignore

```

After editing, commit both changes together:

```bash
git add Umbraco.gitignore community/DotNet/Umbraco-9.2.0.gitignore
git commit -m "Versioned Umbraco templates: add 10.x as evergreen, archive 9.2.0"
git push

```

This atomic commit ensures the repository always has a valid state: the new evergreen template is available immediately, and the old version is preserved in the community folder.

## Summary

- **Evergreen templates** live at the repository root without version numbers, providing the latest ignore rules for current framework releases.
- **Legacy templates** reside in the `community/` folder with version numbers embedded in filenames (e.g., `Umbraco-8.5.3.gitignore`), preserving backward compatibility.
- **Automatic tooling** like GitHub's interface pulls from root files, ensuring users receive up-to-date patterns by default.
- **Maintainer workflow** involves moving the current root file to `community/` with a version tag, then updating the root with new framework patterns.

## Frequently Asked Questions

### What is the difference between root and community templates?

Root templates are "evergreen" files representing the currently supported version of a framework, while community templates contain version-specific filenames for legacy releases. Root files have no version numbers (e.g., `Python.gitignore`), whereas community files include version identifiers (e.g., `community/Python/Python-2.gitignore`).

### How do I find a specific version of a gitignore template?

Navigate to the `community/` folder in the repository and look for files with version numbers in their names. For example, if you need Umbraco 8.5.3 specifically, you would use `community/DotNet/Umbraco-8.5.3.gitignore` rather than the root `Umbraco.gitignore` file.

### Can I contribute a new versioned template?

Yes. When a new major framework version requires different ignore patterns, move the existing root template to the appropriate `community/` subdirectory with a version tag (e.g., `git mv Framework.gitignore community/Framework-1.0.gitignore`), then update the root file with the new version's patterns. Submit both changes in a single pull request.

### Why doesn't every framework have versioned templates?

Not all frameworks require version-specific ignore rules. The repository only creates versioned templates when a framework's build artifacts, directory structures, or generated files change significantly between major releases. If the ignore patterns remain consistent across versions, a single evergreen template at the root suffices.