docs / reference / flags-output
v0.6.0 linux · mac · windows
updated 0001-01-01 v0.6.0

Flags & Output

Global flags, per-command flags, output modes, and dry-run behaviour

Global flags

These flags are available on every command.

FlagDescription
-f, --file <path>Path to the configuration file (overrides all other lookup methods)
-d, --debugVerbose output: logs every git command executed and the config file path
-q, --quietSuppress all output except the final summary line
--jsonEmit a single JSON envelope to stdout instead of text output; takes precedence over --quiet
--noopDry-run: print what would be done without executing any git command
-m, --ignore-missingSilently skip projects whose local_path does not exist; without this flag a warning is printed

Command flags

The following flags are available on all parallel commands (status, statusfull, pull, fetch, branch, exec):

FlagDescription
-j, --jobs <n>Maximum number of repositories to process concurrently (default: 4)
-t, --timeout <seconds>Per-operation timeout in seconds; 0 means no timeout (default: 0)
--tag <tags>Filter projects by tag — comma-separated list with OR logic (e.g. --tag work,js)
--errors-lastPrint a grouped error section after the summary instead of inline

Output modes

Text (default)

Each project prints its git output inline as it completes. A progress bar is shown on stderr while processing (TTY only, suppressed in --quiet and --json modes). At the end a summary line is printed:

─────────────────────────────────────────
OK: 5   Errors: 1   Skipped: 2   Duration: 3.4s

Quiet (--quiet)

All per-project output is suppressed; only the final summary line is printed.

JSON (--json)

A single JSON envelope is written to stdout after all projects have been processed:

{
  "command": "status",
  "timestamp": "2025-05-15T10:30:00Z",
  "projects": [
    {
      "name": "frontend",
      "local_path": "/home/user/projects/frontend",
      "status": "ok"
    },
    {
      "name": "legacy",
      "local_path": "/home/user/projects/legacy",
      "status": "skipped",
      "reason": "pull_policy: never"
    },
    {
      "name": "broken",
      "local_path": "/home/user/broken",
      "status": "error",
      "error": "exit status 128"
    }
  ],
  "summary": {
    "total": 3,
    "ok": 1,
    "errors": 1,
    "skipped": 1,
    "duration_ms": 1240
  },
  "warnings": []
}

status values: ok, error, skipped. The branch command adds a branch field to each project entry. No ANSI codes appear in JSON output.

Dry-run (--noop)

No git command is executed. Each project prints a [DRY-RUN] line describing what would happen. Exit code is always 0.

$ gip --noop pull
[DRY-RUN] frontend → git pull  (in ~/projects/frontend)
[DRY-RUN] legacy   → SKIPPED  (pull_policy: never)
Commands →