821 lines
18 KiB
Markdown
821 lines
18 KiB
Markdown
---
|
|
name: git-repository
|
|
description: Repository management strategies including branch strategies (Git Flow, GitHub Flow, trunk-based), monorepo patterns, submodules, and repository organization. Use when user needs guidance on repository structure or branching strategies.
|
|
---
|
|
|
|
# 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:**
|
|
|
|
```bash
|
|
# 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:**
|
|
|
|
```bash
|
|
# 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:**
|
|
|
|
```bash
|
|
# 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:**
|
|
|
|
```bash
|
|
# 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:**
|
|
|
|
```bash
|
|
# 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:**
|
|
|
|
```bash
|
|
# 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:**
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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)
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
#!/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
|
|
|
|
```yaml
|
|
# .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
|
|
|
|
```yaml
|
|
# 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
|
|
|
|
```bash
|
|
# .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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
1. **Choose Appropriate Strategy:** Match branching model to team size and deployment frequency
|
|
2. **Document Workflows:** Keep team documentation current
|
|
3. **Automate Maintenance:** Regular repository health checks
|
|
4. **Use Branch Protection:** Enforce code review and CI
|
|
5. **Clear Ownership:** Define code owners for all areas
|
|
6. **Regular Cleanup:** Remove stale branches and merged features
|
|
7. **Monitor Repository Size:** Use LFS for large files
|
|
8. **Template Repositories:** Standardize new project structure
|
|
9. **Access Control:** Implement principle of least privilege
|
|
10. **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
|