Claude
Skills
Sign in
Back

Version Controlling Global Configuration

Included with Lifetime
$97 forever

Use when user asks about version controlling ~/.claude directory or syncing Claude Code settings across machines. Provides git setup instructions and .gitignore patterns to track only portable settings while excluding logs, session data, and machine-specific plugin metadata. Invoke before initializing git in ~/.claude to prevent committing non-portable data.

AI Agents

What this skill does


# Version Controlling Claude Code Global Configuration

Use this skill when users want to version control their `~/.claude` directory to sync settings across machines.

## Critical Understanding

The `~/.claude` directory contains both portable settings and machine-specific data. **Not everything should be version controlled.**

### Safe to Version Control

- `CLAUDE.md` - Global instructions
- `settings.json` - User preferences (only contains enabled plugin names)
- Documentation files you create (README, PLUGINS.md)

### NEVER Version Control

- `plugins/installed_plugins.json` - Contains absolute paths and timestamps
- `plugins/known_marketplaces.json` - Contains absolute paths and timestamps
- `plugins/config.json` - Machine-specific configuration
- `plugins/marketplaces/` and `plugins/repos/` - Downloaded plugin data
- `debug/`, `file-history/`, `history.jsonl` - Logs and session data (may contain sensitive info)
- `projects/`, `session-env/`, `shell-snapshots/`, `todos/` - Session-specific cache
- `statsig/` - Analytics cache

## Why Plugin Metadata Shouldn't Be Versioned

The plugin metadata files contain:
1. **Absolute paths** specific to each machine (e.g., `/Users/username/...`)
2. **Timestamps** that cause unnecessary merge conflicts
3. **Git commit SHAs** from local repositories

These files are **automatically regenerated** by Claude Code when plugins are installed. You don't need to preserve them.

## Standard .gitignore Template

```gitignore
# Session data and logs
debug/
file-history/
history.jsonl
session-env/
shell-snapshots/
todos/

# Project-specific cache
projects/

# Analytics and telemetry
statsig/

# Plugin metadata (machine-specific paths and timestamps)
plugins/installed_plugins.json
plugins/known_marketplaces.json
plugins/config.json
plugins/marketplaces/
plugins/repos/

# Any log files
*.log

# Temporary files
*.tmp
*.swp
*~

# OS-specific files
.DS_Store
Thumbs.db
```

## Recommended Workflow

### Initial Setup

1. Examine the `~/.claude` directory to understand what's there
2. Create `.gitignore` with the template above
3. Create `PLUGINS.md` to document which plugins to install:

```markdown
# Installed Plugins

## Marketplaces
- **marketplace-name**: `https://github.com/user/repo`

## Plugins
From `marketplace-name`:
- `plugin-name` - Brief description

## Installation on New Machine
1. Clone/install marketplaces listed above
2. Use Claude Code to install plugins
3. Copy `settings.json` and `CLAUDE.md` from this repo
```

4. Create `README.md` explaining what the repo contains and setup process
5. Initialize git: `git init`
6. Verify with `git status` - should only show safe files
7. Commit the initial setup

### Cross-Machine Sync

On a new machine:
1. Clone the config repo to `~/.claude`
2. Manually install marketplaces and plugins per `PLUGINS.md`
3. Claude Code will regenerate all machine-specific metadata automatically

## Validation Steps

After creating `.gitignore`:
1. Run `git status` to see what will be tracked
2. Verify NO plugin metadata files appear
3. Verify NO log or session files appear
4. Should only see: `.gitignore`, `CLAUDE.md`, `settings.json`, and any docs you created

If plugin metadata appears in `git status`, the `.gitignore` is incorrect.

## Common Mistakes to Avoid

- **Don't** version control the entire `plugins/` directory
- **Don't** try to preserve absolute paths across machines
- **Don't** commit `history.jsonl` (contains conversation history, potentially sensitive)
- **Don't** assume plugin metadata needs to be preserved

## When to Use This Skill

Trigger this skill when users:
- Ask about version controlling `~/.claude`
- Want to sync Claude settings across machines
- Ask what's safe to commit from their Claude directory
- Question whether plugin files should be in git

Related in AI Agents