git-repository

Git Repository Management Skill

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "git-repository" with this command: npx skills add geoffjay/claude-plugins/geoffjay-claude-plugins-git-repository

Git Repository Management Skill

This skill provides comprehensive guidance on repository management strategies, branching models, repository organization patterns, and scaling git for large teams and codebases.

When to Use

Activate this skill when:

  • Setting up new repository structure

  • Choosing branching strategy

  • Managing monorepo vs polyrepo

  • Organizing multi-project repositories

  • Implementing submodule or subtree strategies

  • Scaling git for large teams

  • Migrating repository structures

  • Establishing team workflows

Branching Strategies

Git Flow

Branch Structure:

  • main (or master ) - Production releases only

  • develop

  • Integration branch for next release

  • feature/*

  • Feature development branches

  • release/*

  • Release preparation branches

  • hotfix/*

  • Emergency production fixes

Workflow:

Feature Development

git checkout develop git checkout -b feature/user-authentication

Work on feature...

git commit -m "feat: add JWT authentication" git checkout develop git merge --no-ff feature/user-authentication git branch -d feature/user-authentication

Release Preparation

git checkout develop git checkout -b release/v1.2.0

Bump version, update changelog, final testing...

git commit -m "chore: prepare release v1.2.0"

Deploy Release

git checkout main git merge --no-ff release/v1.2.0 git tag -a v1.2.0 -m "Release version 1.2.0" git checkout develop git merge --no-ff release/v1.2.0 git branch -d release/v1.2.0 git push origin main develop --tags

Hotfix

git checkout main git checkout -b hotfix/security-patch git commit -m "fix: patch security vulnerability" git checkout main git merge --no-ff hotfix/security-patch git tag -a v1.2.1 -m "Hotfix v1.2.1" git checkout develop git merge --no-ff hotfix/security-patch git branch -d hotfix/security-patch git push origin main develop --tags

Best For:

  • Scheduled releases

  • Multiple production versions

  • Large teams with QA process

  • Products with maintenance windows

  • Enterprise software

Drawbacks:

  • Complex workflow

  • Long-lived branches

  • Potential merge conflicts

  • Delayed integration

GitHub Flow

Branch Structure:

  • main

  • Production-ready code (always deployable)

  • feature/*

  • All feature and fix branches

Workflow:

Create Feature Branch

git checkout main git pull origin main git checkout -b feature/add-api-logging

Develop Feature

git commit -m "feat: add structured logging middleware" git push -u origin feature/add-api-logging

Open Pull Request on GitHub

Review, discuss, CI passes

Merge and Deploy

Merge PR on GitHub

Automatic deployment from main

Cleanup

git checkout main git pull origin main git branch -d feature/add-api-logging

Best For:

  • Continuous deployment

  • Small to medium teams

  • Web applications

  • Rapid iteration

  • Cloud-native applications

Drawbacks:

  • Requires robust CI/CD

  • No release staging

  • Less structured than Git Flow

Trunk-Based Development

Branch Structure:

  • main (or trunk ) - Single source of truth

  • Short-lived feature branches (< 2 days, optional)

  • Feature flags for incomplete work

Workflow:

Direct Commit to Main (Small Changes)

git checkout main git pull origin main

Make small change...

git commit -m "fix: correct validation logic" git push origin main

Short-Lived Branch (Larger Changes)

git checkout -b optimize-query

Work for < 1 day

git commit -m "perf: optimize database query" git push -u origin optimize-query

Immediate PR, quick review, merge same day

Feature Flags for Incomplete Features

git checkout main git commit -m "feat: add payment gateway (behind feature flag)"

Feature disabled in production until complete

git push origin main

Best For:

  • High-velocity teams

  • Continuous integration

  • Automated testing

  • Feature flag infrastructure

  • DevOps culture

Drawbacks:

  • Requires discipline

  • Needs comprehensive tests

  • Feature flag management

  • Higher deployment frequency

Release Branch Strategy

Branch Structure:

  • main

  • Current development

  • release/v*

  • Long-lived release branches

  • feature/*

  • Feature branches

Workflow:

Create Release Branch

git checkout -b release/v1.0 main git push -u origin release/v1.0

Continue Development on Main

git checkout main

Work on v2.0 features...

Backport Fixes to Release

git checkout release/v1.0 git cherry-pick abc123 # Fix from main git push origin release/v1.0 git tag -a v1.0.5 -m "Patch release v1.0.5" git push origin v1.0.5

Multiple Release Maintenance

git checkout release/v0.9 git cherry-pick def456 git tag -a v0.9.8 -m "Security patch v0.9.8"

Best For:

  • Multiple product versions

  • Long-term support releases

  • Enterprise customers

  • Regulated industries

Drawbacks:

  • Maintenance overhead

  • Complex cherry-picking

  • Diverging codebases

Feature Branch Workflow

Branch Structure:

  • main

  • Stable production code

  • feature/*

  • Feature branches from main

  • bugfix/*

  • Bug fix branches

Workflow:

Feature Development

git checkout main git checkout -b feature/payment-integration

Long-Running Feature (Sync with Main)

git fetch origin git rebase origin/main

Or merge

git merge origin/main

Complete Feature

git push origin feature/payment-integration

Create pull request

After review and approval, merge to main

Best For:

  • Medium-sized teams

  • Code review processes

  • Parallel feature development

  • Quality gates before merge

Repository Organization

Monorepo

Structure:

monorepo/ ├── .git/ ├── services/ │ ├── api/ │ ├── web/ │ └── worker/ ├── packages/ │ ├── shared-utils/ │ ├── ui-components/ │ └── api-client/ ├── tools/ │ ├── build-tools/ │ └── scripts/ └── docs/

Advantages:

  • Single source of truth

  • Shared code visibility

  • Atomic cross-project changes

  • Unified versioning

  • Simplified dependency management

  • Consistent tooling

Disadvantages:

  • Large repository size

  • Slower clone/fetch

  • Complex CI/CD

  • Access control challenges

  • Tooling requirements

Implementation:

Initialize Monorepo

git init mkdir -p services/api services/web packages/shared-utils

Workspace Setup (Node.js example)

cat > package.json << EOF { "name": "monorepo", "private": true, "workspaces": [ "services/", "packages/" ] } EOF

Sparse Checkout (Partial Clone)

git clone --filter=blob:none --no-checkout <url> cd repo git sparse-checkout init --cone git sparse-checkout set services/api packages/shared-utils git checkout main

Build Only Changed Packages

git diff --name-only HEAD~1 | grep "^services/api" && cd services/api && npm run build

Tools:

  • Bazel - Build system for large monorepos

  • Nx - Monorepo build system (Node.js)

  • Lerna - JavaScript monorepo management

  • Turborepo - High-performance build system

  • Git-subtree - Merge external repositories

Polyrepo

Structure:

organization/ ├── api-service/ (separate repo) ├── web-app/ (separate repo) ├── mobile-app/ (separate repo) ├── shared-utils/ (separate repo) └── documentation/ (separate repo)

Advantages:

  • Clear ownership boundaries

  • Independent versioning

  • Smaller repository size

  • Granular access control

  • Flexible CI/CD

  • Team autonomy

Disadvantages:

  • Dependency version conflicts

  • Cross-repo changes are complex

  • Duplicated tooling/config

  • Harder to refactor across repos

Implementation:

Template Repository

git clone git@github.com:org/template-service.git new-service cd new-service rm -rf .git git init git remote add origin git@github.com:org/new-service.git

Shared Configuration

Use git submodules or packages

git submodule add git@github.com:org/shared-config.git config

Monorepo vs Polyrepo Decision Matrix

Factor Monorepo Polyrepo

Team Size Large teams Small, autonomous teams

Code Sharing High code reuse Limited sharing

Deployment Coordinated releases Independent deployments

Access Control Coarse-grained Fine-grained

Repository Size Very large Small to medium

CI/CD Complexity High Low to medium

Tooling Requirements Specialized tools Standard git tools

Refactoring Easy cross-project Complex cross-repo

Submodule Management

Basic Submodules

Add Submodule

git submodule add https://github.com/org/shared-lib.git libs/shared

Clone with Submodules

git clone --recurse-submodules <url>

Initialize After Clone

git submodule init git submodule update

Update Submodule

cd libs/shared git pull origin main cd ../.. git add libs/shared git commit -m "chore: update shared library"

Update All Submodules

git submodule update --remote --merge

Remove Submodule

git submodule deinit libs/shared git rm libs/shared rm -rf .git/modules/libs/shared

Submodule Strategies

Pinned Version Strategy:

Submodule points to specific commit

Manual updates with testing

git submodule update --remote libs/shared

Test changes...

git add libs/shared git commit -m "chore: update shared-lib to v1.2.3"

Auto-Update Strategy:

CI automatically updates submodules

.github/workflows/update-submodules.yml

name: Update Submodules on: schedule: - cron: '0 0 * * 0' # Weekly jobs: update: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: true - run: git submodule update --remote - run: git commit -am "chore: update submodules" - run: git push

Nested Submodules

Add Nested Submodule

cd libs/framework git submodule add https://github.com/org/utils.git utils

Update Recursively

git submodule update --init --recursive

Run Command in All Submodules

git submodule foreach 'git checkout main' git submodule foreach 'git pull' git submodule foreach --recursive 'echo $name: $(git rev-parse HEAD)'

Subtree Management

Git Subtree vs Submodule

Subtree Advantages:

  • Simpler for contributors

  • No separate clone steps

  • Part of main repository history

  • No broken references

Subtree Disadvantages:

  • More complex to update

  • Pollutes main history

  • Larger repository

Subtree Operations

Add Subtree

git subtree add --prefix=libs/shared https://github.com/org/shared.git main --squash

Update Subtree

git subtree pull --prefix=libs/shared https://github.com/org/shared.git main --squash

Push Changes Back to Subtree

git subtree push --prefix=libs/shared https://github.com/org/shared.git feature-branch

Split Subtree (Extract to New Repo)

git subtree split --prefix=libs/shared -b shared-lib-branch git push git@github.com:org/new-shared-lib.git shared-lib-branch:main

Subtree Workflow

Setup Remote for Easier Management

git remote add shared-lib https://github.com/org/shared.git

Add Subtree with Remote

git subtree add --prefix=libs/shared shared-lib main --squash

Pull Updates

git fetch shared-lib git subtree pull --prefix=libs/shared shared-lib main --squash

Contribute Back

git subtree push --prefix=libs/shared shared-lib feature-branch

Repository Templates

GitHub Template Repository

Create Template Structure

mkdir -p .github/workflows cat > .github/workflows/ci.yml << EOF name: CI on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: make test EOF

Template Files

touch .gitignore README.md LICENSE CONTRIBUTING.md mkdir -p docs src tests

Mark as Template on GitHub Settings

Use template to create new repositories

Cookiecutter Template

Install Cookiecutter

pip install cookiecutter

Create from Template

cookiecutter https://github.com/org/project-template.git

Template Structure

project-template/ ├── cookiecutter.json └── {{cookiecutter.project_name}}/ ├── .git/ ├── src/ ├── tests/ └── README.md

Large Repository Management

Partial Clone

Blobless Clone (No file contents initially)

git clone --filter=blob:none <url>

Treeless Clone (Even more minimal)

git clone --filter=tree:0 <url>

Shallow Clone (Limited History)

git clone --depth 1 <url>

Shallow Clone with Single Branch

git clone --depth 1 --single-branch --branch main <url>

Sparse Checkout

Enable Sparse Checkout

git sparse-checkout init --cone

Specify Directories

git sparse-checkout set src/api src/shared

Add More Directories

git sparse-checkout add docs

List Current Sparse Checkout

git sparse-checkout list

Disable Sparse Checkout

git sparse-checkout disable

Git LFS (Large File Storage)

Install Git LFS

git lfs install

Track Large Files

git lfs track ".psd" git lfs track ".zip" git lfs track "data/**"

Track Files in .gitattributes

cat .gitattributes

*.psd filter=lfs diff=lfs merge=lfs -text

Clone with LFS

git clone <url> cd repo git lfs pull

Migrate Existing Files to LFS

git lfs migrate import --include="*.zip"

Repository Splitting

Extract Subdirectory to New Repo

Using git filter-repo (recommended)

git filter-repo --path services/api --path-rename services/api:

Result: New repo with only services/api content and history

Using git subtree

git subtree split --prefix=services/api -b api-service mkdir ../api-service cd ../api-service git init git pull ../original-repo api-service

Merge Multiple Repos

Add Remote

git remote add project-b ../project-b

Fetch History

git fetch project-b

Merge with Unrelated Histories

git merge --allow-unrelated-histories project-b/main

Move Files to Subdirectory

mkdir project-b git mv * project-b/ git commit -m "chore: organize project-b into subdirectory"

Repository Maintenance

Regular Maintenance Tasks

Optimize Repository

git gc --aggressive

Prune Unreachable Objects

git prune --expire now

Verify Integrity

git fsck --full

Repack Repository

git repack -a -d --depth=250 --window=250

Update Server Info (for dumb HTTP)

git update-server-info

Automation Script

#!/bin/bash

repo-maintenance.sh

echo "Starting repository maintenance..."

Fetch all branches

git fetch --all --prune

Clean up stale branches

git branch -vv | grep ': gone]' | awk '{print $1}' | xargs -r git branch -D

Garbage collection

git gc --auto

Verify integrity

git fsck --full --strict

echo "Maintenance complete!"

Scheduled Maintenance

.github/workflows/maintenance.yml

name: Repository Maintenance on: schedule: - cron: '0 2 * * 0' # Weekly at 2 AM Sunday jobs: maintain: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Run Maintenance run: | git gc --aggressive git prune --expire now git fsck --full

Access Control and Permissions

Branch Protection Rules

Example Configuration

protected_branches: main: required_pull_request_reviews: required_approving_review_count: 2 dismiss_stale_reviews: true require_code_owner_reviews: true required_status_checks: strict: true contexts: - continuous-integration - security-scan enforce_admins: true restrictions: users: [] teams: [core-team]

CODEOWNERS File

.github/CODEOWNERS

Global owners

  •                @org/core-team
    

Service owners

/services/api/ @org/backend-team /services/web/ @org/frontend-team /services/mobile/ @org/mobile-team

Specific files

/docs/ @org/documentation-team /.github/ @org/devops-team /security/ @org/security-team @org/lead-architect

Require multiple reviews

/packages/shared/ @org/core-team @org/architecture-team

Migration Strategies

SVN to Git

Create Authors File

svn log --quiet | grep "^r" | awk '{print $3}' | sort -u > authors.txt

Edit authors.txt:

john = John Doe <john@example.com>

Convert Repository

git svn clone <svn-url> --authors-file=authors.txt --stdlayout repo

Convert Tags and Branches

cd repo git for-each-ref --format="%(refname:short)" refs/remotes/tags |
cut -d / -f 3 | xargs -I {} git tag {} refs/remotes/tags/{}

Push to Git

git remote add origin <git-url> git push -u origin --all git push origin --tags

Mercurial to Git

Using hg-git

hg bookmark -r default main hg push git+ssh://git@github.com/org/repo.git

Using fast-export

git clone https://github.com/frej/fast-export.git mkdir git-repo && cd git-repo git init ../fast-export/hg-fast-export.sh -r ../hg-repo git checkout HEAD

Best Practices

  • Choose Appropriate Strategy: Match branching model to team size and deployment frequency

  • Document Workflows: Keep team documentation current

  • Automate Maintenance: Regular repository health checks

  • Use Branch Protection: Enforce code review and CI

  • Clear Ownership: Define code owners for all areas

  • Regular Cleanup: Remove stale branches and merged features

  • Monitor Repository Size: Use LFS for large files

  • Template Repositories: Standardize new project structure

  • Access Control: Implement principle of least privilege

  • Migration Planning: Test migrations thoroughly before production

Resources

Additional repository management resources are available in the assets/ directory:

  • templates/

  • Repository structure templates

  • scripts/

  • Automation and maintenance scripts

  • workflows/

  • CI/CD workflow examples

See references/ directory for:

  • Branching strategy comparison guides

  • Monorepo tool documentation

  • Enterprise git patterns

  • Repository scaling strategies

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

documentation-update

No summary provided by upstream source.

Repository SourceNeeds Review
General

git-troubleshooting

No summary provided by upstream source.

Repository SourceNeeds Review
General

git-advanced

No summary provided by upstream source.

Repository SourceNeeds Review