| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #!/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"
|