Git history rewriting tools - sanitise, flatten submodules, and remap references
Project description
git-rewrite
Git history rewriting tools - sanitise, flatten submodules, and remap references.
Installation
uv sync
Usage
Scan for Sensitive Words
Scan a repository for dirty words without making any changes:
uv run git-rewrite scan -r /path/to/repo -c config.json
Options:
-r, --repo- Path to the git repository-c, --config- Path to JSON config file-v, --verbose- Show verbose output
Sanitise Repository
Rewrite history to remove sensitive words:
uv run git-rewrite sanitise -r /path/to/repo -o /path/to/output -c config.json
Options:
-r, --repo- Path to source repository-o, --output- Path for output repository-c, --config- Path to JSON config file-d, --default- Default replacement word (default: REDACTED)-m, --commit-map- Path to write commit mapping file-s, --submodule-map- Path to submodule commit mapping file--delete- Delete output directory if exists--sample-config- Print sample config and exit-v, --verbose- Show verbose output
Sample Configuration
{
"words": ["secretword", "internalname", "sensitiveid"],
"word_mapping": {
"secretword": "publicword",
"internalname": "externalname"
},
"email_mapping": {
"john smith": "jsmith@example.com",
"jane doe": "jdoe@example.com"
},
"exclude_files": [
"package-lock.json",
"yarn.lock"
]
}
Flatten Submodules
Flatten submodules into the main repository:
# Scan for submodules only
uv run git-rewrite flatten -r /path/to/repo --scan-only
# Flatten submodules
uv run git-rewrite flatten -r /path/to/repo -o /path/to/output
Options:
-r, --repo- Path to source repository-o, --output- Path for output repository-m, --commit-map- Path to write commit mapping file--scan-only- Only scan and list submodules--delete- Delete output directory if exists-v, --verbose- Show verbose output
Remap Submodule References
Update submodule commit references in a repository:
uv run git-rewrite remap -r /path/to/repo -o /path/to/output -m mapping.txt
Options:
-r, --repo- Path to source repository-o, --output- Path for output repository-m, --commit-map- Path to commit mapping file--submodule-path- Specific submodule path to remap--url-rewrite OLD NEW- Rewrite URL in .gitmodules (can repeat)--delete- Delete output directory if exists-v, --verbose- Show verbose output
Workflow Example
A typical workflow for cleaning up and flattening a repository:
# 1. Scan for sensitive words
uv run git-rewrite scan -r ./myrepo -c dirty-words.json
# 2. Sanitise the repository
uv run git-rewrite sanitise -r ./myrepo -o ./myrepo-clean -c dirty-words.json \
-m commit-map.txt
# 3. Flatten submodules in the cleaned repo
uv run git-rewrite flatten -r ./myrepo-clean -o ./myrepo-flat -m submodule-map.txt
# 4. Update consumer repositories to use new submodule commits
uv run git-rewrite remap -r ./consumer-repo -o ./consumer-updated \
-m submodule-map.txt --submodule-path libs/mylib
Development
# Set up development environment
make dev
# Run linting and type checking
make check
# Auto-format code
make format
# Build wheel and docs
make build
Publishing
Publishing requires cal-publish-python configuration. See the cal-publish-python documentation for setup.
# Build first
make build
# Publish wheel to PyPI and docs to GitLab Pages
make publish
Requirements
- Python 3.14+
- Git
Licence
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file git_rewrite-0.8.0-py3-none-any.whl.
File metadata
- Download URL: git_rewrite-0.8.0-py3-none-any.whl
- Upload date:
- Size: 55.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a94dae49266063735d031aef6dda9c56a77fb24a07cd97951ae059002de8ffff
|
|
| MD5 |
1f2aa5ff67e1067a9926f09018b55608
|
|
| BLAKE2b-256 |
d17df2a8751fdfce6a46fbce64f0ffb5e300f933725109ab8e5662dc2893ee4f
|