DotNetMateTool 0.1.12
dotnet tool install --global DotNetMateTool --version 0.1.12
dotnet new tool-manifest
dotnet tool install --local DotNetMateTool --version 0.1.12
#tool dotnet:?package=DotNetMateTool&version=0.1.12
nuke :add-package DotNetMateTool --version 0.1.12
DotNetMate
A .NET developer CLI tool for keeping your workspace clean and organized.
Installation
dotnet tool install -g DotNetMateTool
Requires .NET 10 runtime.
Commands
mate clean
Recursively scans and removes build artifacts, temporary directories, and generated files. Displays cleanup statistics with total size reclaimed.
Directories removed:
| Pattern | Description |
|---|---|
bin/ |
Build output |
obj/ |
Intermediate build files |
.vs/ |
Visual Studio local settings |
.tmp/ |
Temporary directories |
TestResults/ |
Test result output |
*Installer-cache/ |
Installer cache directories |
.nuke/temp/ |
NUKE build system temp files |
Files removed:
| Pattern | Description |
|---|---|
*.binlog |
MSBuild binary logs |
*_wpftmp.csproj |
WPF temporary project files |
After deletion, empty directories left behind are automatically cleaned up.
mate clean # clean current directory
mate clean --folder C:\repos # clean specific directory
mate removeEmpty
Recursively removes empty directories. Directories containing only system/metadata files are treated as empty and removed along with those files.
System files considered as empty content:
desktop.ini, .DS_Store, Thumbs.db, metadata.opf, cover.jpg
.git directories are always protected and never deleted.
mate removeEmpty # current directory
mate removeEmpty --folder C:\repos # specific directory
mate gitlog
Aggregates git commit logs across multiple repositories into a single report. Useful for timesheets and activity reports.
mate gitlog --from 2025-01-01 # scan current directory
mate gitlog --root C:\repos --from 2025-01-01 # scan specific root
mate gitlog --from 2025-01-01 --exclude repo1,repo2 # exclude repos
mate gitlog --from 2025-01-01 --json # export to JSON
mate gitlog --from 2025-01-01 --csv # export to CSV
mate gitlog --from 2025-01-01 --with previous.json # merge with existing data
mate resharper clean
Cleans ReSharper/Rider SolutionCaches directories under %LOCALAPPDATA%\JetBrains.
mate resharper clean
mate resharper config
Sorts entries in ReSharper .DotSettings files alphabetically by XAML key.
mate resharper config --sort MySettings.DotSettings
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.
# Changelog
All notable changes to DotNetMate will be documented in this file.
## [0.1.12] - 2026-05-28
Fixed:
- Update-available notification no longer appears in the middle of command output (was: the notification could tear the `--- SUMMARY ---` line and other Serilog output because the async log sink had not yet flushed when the message was written)
## [0.1.11] - 2026-05-28
Added:
- `mate clean --include-worktrees` (`-w`) flag to clean bin/obj inside linked git worktrees
Changed:
- `mate clean` now skips linked git worktrees by default and logs them once (was: silently cleaned them). Ephemeral worktrees under `.claude/worktrees/` (Claude Code agent isolation) are still cleaned automatically.
- `mate clean` statistics now include `Elapsed` time (ms / seconds / minutes depending on duration)
Fixed:
- `mate gitlog` crashing with `InvalidOperationException` when no commits from current user found - now logs a warning and exits gracefully
- `mate gitlog` leaking `LibGit2Sharp` repositories - `.git` files staying locked on Windows. Repositories are now properly disposed after each invocation
- `mate gitlog` progress percentage staying above 100% on repeated invocations - progress counter now resets at the start of each run
- `mate gitlog --exclude` silently ignoring repos when names had surrounding whitespace (`--exclude "a, b"` - `b` no longer excluded). Comma-separated values are now trimmed
- `mate gitlog` crashing on repositories without any remote configured - `Url` and `OriginRemote` are now null-safe
- `mate removeEmpty` accepting non-existent directories without a clear error - now validates the path like `mate clean` does
- NUKE `CommitChangelog` target reads the stamped version from the csproj instead of re-querying GitVersion after the tag is created, so the post-release commit message matches the actually released version (was: `Release 0.1.11: stamp CHANGELOG and Version` while shipping `0.1.10`)
## [0.1.10] - 2026-03-28
Fixed:
- `mate gitlog -t` showing overlapping time ranges per branch - now splits timeline into exclusive segments with correct duration
## [0.1.8] - 2026-03-26
Performance:
- `mate clean` directory deletion significantly faster for large projects - uses native OS recursive delete as fast path, falls back to per-file enumeration only when locked files are encountered
- `mate clean` folder size calculation no longer uses thread pool - reverts to sequential enumeration, eliminating scheduling overhead for typical workloads
Fixed:
- Published package banner showing `1.0.0` instead of actual version - assembly now compiled with version from GitVersion/csproj
- Banner displaying version with commit hash suffix (e.g. `0.1.8+Branch.main.Sha.abc...` instead of `0.1.8`)
- Update check never finding new versions - NuGet API requires lowercase package ID
- `mate resharper clean` crashing on locked cache files - now uses SafeDelete
- `gitlog` date filter logic inverted when `--from` is null (no runtime impact currently but incorrect semantics)
- `.mate.json` with invalid `gitLog.defaultAfter` date silently ignored - now logs warning and requires `--from` flag
## [0.1.7] - 2026-03-24
Added:
- Background update check: on each run, checks NuGet for a newer version and prints a notification after command output
Fixed:
- `mate clean` no longer reports errors for locked files - logs a warning instead of throwing (fixes DOTNETMATE-2, DOTNETMATE-3)
- Banner displaying wrong version (1.0.0) instead of installed version
- `gitlog` timezone normalization and duration calculation
## [0.1.6] - 2026-03-20
Added:
- Hierarchical `.mate.json` configuration file - directory traversal lookup (closest file wins, `~/.mate.json` as global fallback)
- Configurable defaults for `clean` (exclude patterns, custom directories), `gitLog` (default `--from`, `--tempo`), and `resharper` (DotSettings paths)
- `mate completions powershell|bash|zsh` command for shell completion scripts
- `mate clean` supports exclude patterns and custom directories via `.mate.json`
## [0.1.5] - 2026-03-16
Added:
- `--tempo` (`-t`) option in `gitlog` command - aggregates commits per day/branch with time range and estimated work time for Tempo/JIRA logging
- Recover commits from deleted/merged branches by walking merge commit second parents
- Extract original branch name from merge commit messages (e.g. "Merge branch 'feature/PM3-1305' into develop")
Fixed:
- `--tempo` sort order: oldest day first
- `--tempo` time calculation: use local time instead of UTC to avoid normalization across mixed offsets
- `--tempo` output alignment: consistent column formatting
- Branch attribution: feature branches now exclude base branch commits
- Branch attribution: prefer feature branch name over generic (main/master/develop) in duplicate resolution
- Filter out `origin/HEAD` symbolic ref from branch listing
## [0.1.4] - 2026-03-12
Fixed:
- `mate clean` performance: parallel folder size calculation
- `mate gitlog` handles repositories without main/master branch gracefully
- Improved console output formatting (structured logging)
## [0.1.3] - 2026-03-12
Fixed:
- Removed `sentry-test` CLI command (not intended for release)
## [0.1.2] - 2026-03-12
Fixed:
- Sentry error tracking configuration
## [0.1.1] - 2026-03-11
Fixed:
- Internal configuration fixes
## [0.1.0] - 2026-03-09
Added:
- `mate clean` - remove bin/obj/.vs/.tmp/TestResults directories
- `mate removeEmpty` - remove empty directories
- `mate gitlog` - aggregate git logs across repositories
- `mate resharper clean` - clean JetBrains SolutionCaches
- `mate resharper config --sort` - sort .DotSettings files by XAML key
- Sentry error tracking