package session import ( "bytes" "os" "path/filepath" ) // EnsureGitExclude trägt .nub/ in .git/info/exclude ein, nicht in die // .gitignore (4.5) — die gehört dem Repo, nicht dem Tool. Kein Git-Repo: // no-op. func EnsureGitExclude(repoRoot string) error { gitDir := filepath.Join(repoRoot, ".git") info, err := os.Stat(gitDir) if err != nil || !info.IsDir() { return nil } excludePath := filepath.Join(gitDir, "info", "exclude") data, _ := os.ReadFile(excludePath) if bytes.Contains(data, []byte(".nub/")) { return nil } if err := os.MkdirAll(filepath.Dir(excludePath), 0o755); err != nil { return err } f, err := os.OpenFile(excludePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o644) if err != nil { return err } defer f.Close() if len(data) > 0 && data[len(data)-1] != '\n' { if _, err := f.WriteString("\n"); err != nil { return err } } _, err = f.WriteString(".nub/\n") return err }