Agent-almanac configure-git-repository
install
source · Clone the upstream repo
git clone https://github.com/pjt222/agent-almanac
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/caveman-ultra/skills/configure-git-repository" ~/.claude/skills/pjt222-agent-almanac-configure-git-repository-7d1cc6 && rm -rf "$T"
manifest:
i18n/caveman-ultra/skills/configure-git-repository/SKILL.mdsource content
Configure Git Repository
Set up Git repo w/ appropriate config for project type.
Use When
- Init version control for new project
- Add
for specific language/framework.gitignore - Set up branch protection + conventions
- Configure commit hooks
In
- Required: Project dir
- Required: Project type (R pkg, Node.js, Python, general)
- Optional: Remote repo URL
- Optional: Branch strategy (trunk-based, Git Flow)
- Optional: Commit msg convention
Do
Step 1: Initialize Repo
cd /path/to/project git init git branch -M main
→
.git/ dir created. Default branch = main.
If err:
git init fails → ensure Git installed (git --version). Dir already has .git/ → repo already init'd → skip step.
Step 2: Create .gitignore
R Package:
# R artifacts .Rhistory .RData .Rproj.user/ *.Rproj # Environment (sensitive) .Renviron # renv library (machine-specific) renv/library/ renv/staging/ renv/cache/ # Build artifacts *.tar.gz src/*.o src/*.so src/*.dll # Documentation build docs/ inst/doc/ # IDE .vscode/ .idea/ # OS .DS_Store Thumbs.db
Node.js/TypeScript:
node_modules/ dist/ build/ .next/ .env .env.local .env.*.local *.log npm-debug.log* .DS_Store Thumbs.db .vscode/ .idea/ coverage/
Python:
__pycache__/ *.py[cod] *.egg-info/ dist/ build/ .eggs/ .venv/ venv/ .env *.log .mypy_cache/ .pytest_cache/ htmlcov/ .coverage .DS_Store .idea/ .vscode/
→
.gitignore created w/ entries for project type. Sensitive files (.Renviron, .env) + generated artifacts excluded.
If err: Unsure which entries → use
gitignore.io or GitHub's .gitignore templates as starting point, customize.
Step 3: Create Initial Commit
git add .gitignore git add . # Review what's being added first with git status git commit -m "Initial project setup"
→ First commit w/
.gitignore + initial project files. git log shows one commit.
If err: "Nothing to commit" → ensure files staged w/
git add. Author identity err → set git config user.name + git config user.email.
Step 4: Connect Remote
# Add remote git remote add origin git@github.com:username/repo.git # Push git push -u origin main
→ Remote
origin config'd. git remote -v shows fetch + push URLs. Initial commit pushed.
If err: Push fails "Permission denied (publickey)" → configure SSH keys (see
setup-wsl-dev-environment). Remote already exists → update w/ git remote set-url origin <url>.
Step 5: Set Up Branch Conventions
Trunk-based (rec'd for small teams):
: prod-ready codemain- Feature branches:
feature/description - Bug fixes:
fix/description
# Create feature branch git checkout -b feature/add-authentication # After work is done, merge or create PR git checkout main git merge feature/add-authentication
→ Branch naming convention established + doc'd. Team knows which prefix to use for each work type.
If err: Branches already named inconsistent → rename w/
git branch -m old-name new-name + update any open PRs.
Step 6: Configure Commit Conventions
Conventional Commits format:
type(scope): description feat: add user authentication fix: correct calculation in weighted_mean docs: update README installation section test: add edge case tests for parser refactor: extract helper function chore: update dependencies
→ Commit msg convention doc'd + agreed. Future commits follow
type: description format.
If err: Team not following → enforce w/ commit-msg hook validating format (see Step 7).
Step 7: Set Up Pre-Commit Hooks (Optional)
Create
.githooks/pre-commit:
#!/bin/bash # Run linter before commit # For R packages if [ -f "DESCRIPTION" ]; then Rscript -e "lintr::lint_package()" || exit 1 fi # For Node.js if [ -f "package.json" ]; then npm run lint || exit 1 fi
chmod +x .githooks/pre-commit git config core.hooksPath .githooks
→ Pre-commit hook runs auto on each
git commit. Lint errs block commit until fixed.
If err: Hook doesn't run → valid.
core.hooksPath set (git config core.hooksPath) + hook file executable (chmod +x).
Step 8: Create README
# Minimal README echo "# Project Name" > README.md echo "" >> README.md echo "Brief description of the project." >> README.md git add README.md git commit -m "Add README"
→
README.md committed. Project has minimal but informative landing page on GitHub.
If err:
README.md already exists → update vs. overwrite. R projects → use usethis::use_readme_md() for template w/ badges.
Check
-
excludes sensitive + generated files.gitignore - No sensitive data (tokens, passwords) in tracked files
- Remote repo connected + accessible
- Branch naming conventions doc'd
- Initial commit clean
Traps
- Commit before .gitignore: Add
first. Files already tracked unaffected by later.gitignore
entries..gitignore - Sensitive data in history: Secrets committed → remain in history even after deletion. Use
or BFG to clean.git filter-repo - Large binary files: Don't commit large binaries. Use Git LFS for files > 1MB.
- Line endings: Set
on Windows/WSL → prevent CRLF/LF issues.core.autocrlf=input
→
- staging + committing workflowcommit-changes
- branch creation + conventionsmanage-git-branches
- Git setup as part of R pkg creationcreate-r-package
- Git install + SSH keyssetup-wsl-dev-environment
- creating releases from repocreate-github-release
- check for committed secretssecurity-audit-codebase