Spaces:
Sleeping
Sleeping
| #!/usr/bin/env pwsh | |
| # Git extension: initialize-repo.ps1 | |
| # Initialize a Git repository with an initial commit. | |
| # Customizable — replace this script to add .gitignore templates, | |
| # default branch config, git-flow, LFS, signing, etc. | |
| $ErrorActionPreference = 'Stop' | |
| # Find project root | |
| function Find-ProjectRoot { | |
| param([string]$StartDir) | |
| $current = Resolve-Path $StartDir | |
| while ($true) { | |
| foreach ($marker in @('.specify', '.git')) { | |
| if (Test-Path (Join-Path $current $marker)) { | |
| return $current | |
| } | |
| } | |
| $parent = Split-Path $current -Parent | |
| if ($parent -eq $current) { return $null } | |
| $current = $parent | |
| } | |
| } | |
| $repoRoot = Find-ProjectRoot -StartDir $PSScriptRoot | |
| if (-not $repoRoot) { $repoRoot = Get-Location } | |
| Set-Location $repoRoot | |
| # Read commit message from extension config, fall back to default | |
| $commitMsg = "[Spec Kit] Initial commit" | |
| $configFile = Join-Path $repoRoot ".specify/extensions/git/git-config.yml" | |
| if (Test-Path $configFile) { | |
| foreach ($line in Get-Content $configFile) { | |
| if ($line -match '^init_commit_message:\s*(.+)$') { | |
| $val = $matches[1].Trim() -replace '^["'']' -replace '["'']$' | |
| if ($val) { $commitMsg = $val } | |
| break | |
| } | |
| } | |
| } | |
| # Check if git is available | |
| if (-not (Get-Command git -ErrorAction SilentlyContinue)) { | |
| Write-Warning "[specify] Warning: Git not found; skipped repository initialization" | |
| exit 0 | |
| } | |
| # Check if already a git repo | |
| try { | |
| git rev-parse --is-inside-work-tree 2>$null | Out-Null | |
| if ($LASTEXITCODE -eq 0) { | |
| Write-Warning "[specify] Git repository already initialized; skipping" | |
| exit 0 | |
| } | |
| } catch { } | |
| # Initialize | |
| try { | |
| $out = git init -q 2>&1 | Out-String | |
| if ($LASTEXITCODE -ne 0) { throw "git init failed: $out" } | |
| $out = git add . 2>&1 | Out-String | |
| if ($LASTEXITCODE -ne 0) { throw "git add failed: $out" } | |
| $out = git commit --allow-empty -q -m $commitMsg 2>&1 | Out-String | |
| if ($LASTEXITCODE -ne 0) { throw "git commit failed: $out" } | |
| } catch { | |
| Write-Warning "[specify] Error: $_" | |
| exit 1 | |
| } | |
| Write-Host "✓ Git repository initialized" | |