Repository navigation
v0.1.1
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-runshows 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-miband--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) andsoft(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-templatewith{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-lfsstores large files with Git LFS using local-only rules, then cleans up. Choose the cut-off with--lfs-threshold-mib(0sends every file through LFS).--lfs-commit-rulescommits per-extension rules so clones receive the real files.--lfs-batch-miband--lfs-threadsupload 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-threadsand--post-buffer-mibhelp 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. --remoteand--branchchoose where to push;--no-pushonly commits.- Save your options in
commitrocket.tomlor[tool.commitrocket]inpyproject.toml.
Automation and diagnostics
--report out.jsonwrites 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 doctorchecks 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--configor on the command line. - File names with characters like
[or*are treated literally and can no longer pull other files into a batch. --remoteand--branchvalues 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-fileor--reportinside 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-fromorexclude-fromin a repository'scommitrocket.toml, you will now see a warning and they will be ignored. Pass the file explicitly with--config commitrocket.tomlto use them. --reponow defaults to the current folder.--no-pushcannot be combined with--use-lfs, because the large files would stay local while a later plaingit pushwould 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
- @coldsofttech made their first contribution in #1
- @dependabot[bot] made their first contribution in #3
Full Changelog: https://github.com/coldsofttech/CommitRocket/commits/v0.1.1