- Parallelized
gut status: Status checks now run in parallel across repositories for significantly faster results --lfsflag forgut status: Shows detailed LFS file download counts (e.g.3/5) per repository; without the flag, the LFS column still appears but only shows whether LFS is in use, skipping the slower per-file query
gut pullLFS performance: Git LFS pull now only runs when there are actual changes detected during normal pull, avoiding unnecessary LFS operationsgut pulldirty repo LFS fix: When a repo is dirty,pullnow attempts to fix the LFS index and reports whether it was fixed
- Git LFS info in
gut status: The status table now always shows an LFS column indicating the LFS state of each repository (#224)
- LFS files falsely appearing as changed: Updated the git index for LFS files so that unmodified LFS-tracked files no longer show up as dirty in
gut status
gut labelcommands for managing GitHub labels in bulk across repositories (#218):gut label list-- lists all labels in a table with color swatchesgut label create-- creates a label across matching reposgut label delete-- deletes a label across matching reposgut label rename-- renames a label (and optionally updates color/description) across matching repos
gut rename team <SLUG> <NEW_NAME>command: Renames a GitHub organisation team with a confirmation prompt (#215)gut show repository <REPO_NAME>command: Displays all teams and collaborators for a repository with permission levels and affiliation (org/direct/outside) (#216)gut show teams --treeflag: Renders teams as a hierarchical tree showing parent/child relationships (#214)gut show teamparent/child info: Now displays parent team and child teams in the header (#214)- Git LFS support in
gut cloneandgut pull: Automatically detects LFS usage via.gitattributesand pulls LFS objects, with status shown in the summary table (#221) --jsonflag forgut topic list: Output topic results as JSON (#220)
gut topic getrenamed togut topic list: Results now displayed in a formatted table instead of plain text (#220)--organisationnow optional inadd repos,add users,create discussion,create team,invite users,remove users,set team permission,show access, andshow members-- falls back to the default owner from configuration (#217)show accessandshow repo:--organisationflag renamed to--ownerto reflect support for both organisations and personal accounts (#217)- Unified 404 error handling with helpful guidance across team/org commands (#217)
- Dependency updates
- Corrected success message grammar from "There is no error!" to "There were no errors!" across multiple commands
gut show teamscommand: Lists all teams in an organisation with slug, name, and descriptiongut show team <slug>command: Shows detailed information about a specific team including:- Team members with their roles (member/maintainer)
- Repositories accessible by the team with permission levels (admin/maintain/write/triage/read)
- Color-coded output for roles and permissions
gut show accesscommand: Shows user access levels across repositories in a compact table format (#207)- Single line per repo with columns for each user's access level
--long(-l) flag for detailed per-user tables- Color-coded permission levels
gut show memberscommand: Renamed fromshow users, shows organisation members with permissions and 2FA status (#207)- Static Linux musl builds: Added configuration for fully static Linux binaries (#210)
show usersrenamed toshow members: Better reflects that it shows organisation membership (#207)
clonecommand: Now filters out repos that don't belong to the current owner (#206)show userscommand: Fixed broken command that required unnecessaryuser:emailpermission (#207)- Local path error handling: Improved error messages for path-related issues (#47)
gut healthcommand: Comprehensive health check for repositories and system configuration- NFD/NFC normalization detection: Finds filenames stored in decomposed Unicode form that have precomposed equivalents, which cause conflicts on macOS
- Case-duplicate detection: Finds files differing only in letter case (e.g.,
File.txtvsfile.txt) that cause issues on case-insensitive filesystems - Large file detection: Identifies files exceeding threshold (default 50 MB) that should be tracked by Git LFS, with separate handling for files matching
.gitignore - Long path detection: Warns about filenames and paths exceeding length limits for Windows compatibility
- System configuration checks: Git version (min 1.7.10),
core.precomposeUnicode(macOS),core.autocrlf(Unix), Git LFS installation - Per-owner summaries with repo counts and issue breakdowns
- Actionable recommendations for fixing each issue type
- Configurable thresholds:
--large-file-mb,--filename-length-bytes,--path-length-bytes - Single owner (
-o) or all owners (-a) mode
statuscommand: Now properly handles NFD-encoded filenames in git status output
- Personal account support: gut now works with both GitHub organizations and personal user accounts as owners (#200)
show reposimprovements (#201):--jsonflag for structured JSON output--default-branchflag to show default branch column (requires extra API calls)- Clean table format showing repository name and clone status by default
- Spinner for all GitHub API queries: All commands that query GitHub now show "Querying GitHub for {owner} repositories..." spinner
- Terminology: "organisation" → "owner" throughout CLI flags, help text, and output to reflect support for both orgs and users
--organisationflag renamed to--owner(with--organisationkept as alias)set default organisation→set default owner--all-orgs→--all-owners
statuscommand: Failed repos now shown in main table with dashes instead of separate error section- Consolidated spinner code: Spinners moved into shared query functions, reducing duplication
set secretcommand: Fixed panic when running the commandstatuscommand: Now handles per-repo errors gracefully instead of failing entirely
- Progress bars for network commands:
clone,fetch,pull,push,commit,template apply - Spinner shown while querying GitHub API ("Querying GitHub for matching repositories...")
--fetchoption forgut statusto fetch before checking status
commit&push: No longer query GitHub API unless--topicfilter is used — uses local directories instead (much faster)fetch: Now parallelized, making it significantly faster- Logging: Changed default log level from Debug to Warn (use
RUST_LOG=debugfor verbose output) - Help text: Permission values and list syntax now shown on first line (visible with
-h)- e.g.,
Permission (pull | push | admin | maintain | triage) - e.g.,
Usernames to add (eg: -u user1 -u user2)
- e.g.,
- Added
parse_permissionvalidator toset permissioncommand (was missing validation) - Fixed various cargo clippy warnings
--use-httpsflag removed fromcommitandpushcommands (was unused since these commands only operate on local repos)
--all-orgs(-a) flag for multi-organization support with summary reports--version(-v) flag to display version informationtemplate refreshcommand to update placeholder substitutions in existing repos- Parallelization of many commands using rayon for improved performance
- Fixed
template apply --continuefailing if patch failed to apply (#193) - Fixed malformed patch format by ensuring correct newline handling (#195)
- Fixed default root path (now correctly
~/gut) - Repos with only new files now considered clean (can be pulled)
See git history for changes prior to 0.3.0.