Repository navigation
Releases: coldsofttech/CommitRocket
Release list
v0.1.2
CommitRocket 0.1.2
This release fixes a problem that could leave your large files unusable after
using Git LFS, and it includes the fixes and security improvements from 0.1.1.
Upgrading from 0.1.0 is recommended.
Highlights
Large files now stay usable after --use-lfs
Previously, --use-lfs stored the LFS settings only for the duration of the run.
If you later pulled, reset, switched branches or cloned the repository, your
videos and other big files could turn into tiny text placeholders, and apps
reported them as corrupt or having an invalid extension.
Now --use-lfs saves the LFS rules in the repository (in .gitattributes, one
rule per file type such as *.mp4), so every checkout and clone gets the real files.
- This is the default. Nothing extra is needed.
- All files of a covered type go through LFS from then on, including small and
future ones. - To get the old behaviour, use
--no-lfs-commit-rules. Checkouts and clones
will then contain placeholders instead of the real files. --lfs-commit-rulesis still accepted and does nothing extra.- Make sure
.gitattributeshas no uncommitted changes before you run.
Already affected? If your files are already placeholders, add the rules for
your file types to .gitattributes (for example
*.mp4 filter=lfs diff=lfs merge=lfs -text), then run
git lfs install --local and git lfs pull to restore the real files.
Fixed (0.1.1)
- Runs with thousands of files no longer fail on Windows with
"The filename or extension is too long".
Security (0.1.1)
- A settings file found inside a repository can no longer turn on
--force,
change the remote or branch, write reports or logs, or read pattern files.
Use--configto set these. - File names containing characters like
[or*are matched literally, so
they no longer pull other files into a batch. --remoteand--branchvalues that look like Git options are rejected.- Passwords in remote URLs are hidden in logs, errors and reports. Log and
report files are readable only by you. - File names containing line breaks are refused when creating LFS rules.
- Square brackets in file names and Git messages no longer break or hide output.
Other changes
- Releases are published to PyPI using trusted publishing instead of a stored
token. - The PyPI page now shows keywords, categories and project links.
- Added 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.
Upgrading
pip install --upgrade commitrocket
What's Changed
- Commit LFS rules by default with --use-lfs (0.1.2) by @coldsofttech in #4
Full Changelog: v0.1.1...v0.1.2
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