Skip to content

v0.1.1

Choose a tag to compare

@coldsofttech coldsofttech released this 24 Oct 13:54
· 1 commit to main since this release
aaf7ff5

CommitRocket v0.1.1

CommitRocket splits a large pile of changes into size-limited batches, commits each batch, and pushes as it goes, with live progress. It is built for first uploads of big folders, slow or unreliable connections, and repositories with large files.

This is the first public release. It includes everything from 0.1.0 (the initial package, never published separately) and 0.1.1.

Install

pip install commitrocket

Requires Python 3.11+ and Git. Git LFS is only needed for --use-lfs, and CommitRocket can install it for you.

commitrocket --repo path/to/repo --message "Add assets"
commitrocket doctor      # check your setup first

Highlights

  • Batched commits and pushes, so a failure costs one batch, not everything.
  • Git LFS for large files, set up and removed again automatically, without committing any LFS config.
  • Safe to interrupt: run the same command again and it resumes where it stopped.
  • --dry-run shows every planned batch and commit message before anything changes.
  • Hardened against untrusted repositories, with a security review done before release.

Features

Batching and progress

  • Size-based batches with --limit-mib and --max-mib; files over the maximum are skipped and listed at the end.
  • Three ways to pick files: deterministic (default, packs tightly), sequential (strict order) and soft (may pass the limit).
  • Live progress with elapsed time and an ETA based on your real upload speed.
  • Commit messages as <message> #N, or your own --message-template with {n}, {batch}, {files}, {size}, {first} and {date}.

Large files and Git LFS

  • Files over 100 MiB are detected before anything is committed, with a clear hint to use --use-lfs.
  • --use-lfs stores large files with Git LFS using local-only rules, then cleans up. Choose the cut-off with --lfs-threshold-mib (0 sends every file through LFS).
  • --lfs-commit-rules commits per-extension rules so clones receive the real files.
  • --lfs-batch-mib and --lfs-threads upload several LFS files at once.
  • LFS files are checked to be pointers before upload, and the LFS hooks are kept if a run fails with unpushed LFS commits.

Reliability

  • Failed pushes are retried with growing waits (--retries, default 3); host rejections such as file-size limits are never retried.
  • Every push is verified against the remote.
  • Interrupted or failed runs (including Ctrl+C) resume automatically, including files left staged mid-batch.
  • Leftover commits that contain files over 100 MiB are detected at startup, with the exact command to clean them up.
  • --compression-threads and --post-buffer-mib help with slow or failing large pushes; both are repository-local and restored afterwards.

Control

  • Choose files with .gitignore-style patterns: --include, --exclude, --include-from, --exclude-from, plus an automatic .commitrocketignore.
  • --remote and --branch choose where to push; --no-push only commits.
  • Save your options in commitrocket.toml or [tool.commitrocket] in pyproject.toml.

Automation and diagnostics

  • --report out.json writes a machine-readable summary of every run, including failed and dry runs.
  • --notify (desktop notification on Windows, macOS and Linux) and --notify-webhook (Slack, Discord, Teams, ntfy or your own endpoint) tell you when a long run ends.
  • commitrocket doctor checks Git, git-lfs, your config, the log folder, the remote and the repository.
  • Every run writes its own log file in the system's standard log folder (--level, --log-file).

Security

  • A config file found inside a repository can no longer turn on force, set the remote or branch, write reports or logs, send a webhook, or read pattern files. Those settings work only from a file you pass with --config or on the command line.
  • File names with characters like [ or * are treated literally and can no longer pull other files into a batch.
  • --remote and --branch values that look like Git options are rejected.
  • Credentials inside remote URLs are hidden in logs, errors, reports and notifications, and log and report files are readable only by you.
  • File names with line breaks are refused when creating LFS rules.
  • Square brackets in file names and Git messages no longer break or hide output.

Please report vulnerabilities privately, as described in SECURITY.md.

Fixes

  • Batches with thousands of files no longer fail on Windows with "The filename or extension is too long".
  • A --log-file or --report inside the repository is no longer committed, which previously made a run commit its own log forever.

Project

  • Issue and pull request templates, a security policy, a code of conduct and contributing guidelines.
  • Dependabot keeps dependencies, GitHub Actions and pre-commit hooks up to date.
  • CI runs lint and tests on Ubuntu (Python 3.11 to 3.15), Windows and macOS; releases publish to PyPI from version tags.

Notes for upgrading

  • If you keep remote, branch, force, report, log-file, notify-webhook, include-from or exclude-from in a repository's commitrocket.toml, you will now see a warning and they will be ignored. Pass the file explicitly with --config commitrocket.toml to use them.
  • --repo now defaults to the current folder.
  • --no-push cannot be combined with --use-lfs, because the large files would stay local while a later plain git push would publish pointers without their data.

Full documentation: README · Changelog: CHANGELOG.md

What's Changed

  • Add commitrocket package with batching, LFS, resume and CI by @coldsofttech in #1
  • Add community files, security hardening and Windows batch fix (0.1.1) by @coldsofttech in #2
  • chore(ci): bump the github-actions group with 3 updates by @dependabot[bot] in #3

New Contributors

Full Changelog: https://github.com/coldsofttech/CommitRocket/commits/v0.1.1