A python command-line for gitmoji
Project description
gitmopy
An interactive Python implementation of the Gitmoji convention: gitmoji.dev/
uv tool run gitmopy
# or
uvx gitmopy
uv? Yes, in most cases you don't want to use gitmopyas a library but rather as a standalone CLI and you should therefore use uv rather than pip to install it. pip install gitmopy will work too if that's really what you want.
How to use
- I typically use
$ gitmopy commit --add --keep-alive - Navigate through options with ⬆️ and ⬇️
- Select files with
space - Validate selection with
enter - Press
tabto auto-complete- Press
tabon an empty line to see history
- Press
- Restart commit with
crtl+c- In the committing routine, press
ctrl+cto go back to the previous step (for instance if you made a mistake in the commit title)
- In the committing routine, press
- Push (and set upstream if need be)
- Commit again 🔄
You can also select another set of default emojis tailored towards AI/ML development by running gitmopy config then pressing Enter and choosing ai-devmojis as the config option.
Use your own emojis by editing the "custom emojis" file listed by gitmopy info!
Suggested shortcuts
alias gpy="gitmopy"
alias gpys="gitmopy start"
alias gpyc="gitmopy commit"
alias gpya="gitmopy commit --add"
alias gpyk="gitmopy commit --add --keep-alive"
Examples
# Typical daily use-case
# ----------------------
# continuously commit, interactively select files to stage
$ gitmopy commit --add --keep-alive
# same using an alias, + push after every commit (could be dangerous)
$ gpyk --push
# use your default commit settings (configured via `gitmopy config`)
$ gitmopy start
# Specific usage
# --------------
# commit currently staged files. Will fail if no file is staged.
$ gitmopy commit
# Enable interactive file selection if no file is currently staged. Ignored if
# there are staged files.
$ gitmopy commit --add
# Commit continuously: don't leave the CLI after the first commit but restart
# the commit procedure.
$ gitmopy commit --keep-alive
# Push to remote repositories after commit.
# Interactively select remotes to push to if there are more than 1.
$ gitmopy commit --push
# Push to specific remotes
$ gitmopy commit --push --remote origin --remote upstream
# Make and display a commit message without staging/committing/pushing
$ gitmopy commit --dry
# configure gitmopy
$ gitmopy config
# print version, data paths and current configuration
$ gitmopy info
# print helps
$ gitmopy --help
$ gitmopy commit --help
⚠️ The sync feature is still experimental. It will pull then push but in the case of several remotes and the branch not existing on one of them, I recommend you deal with it with git manually.
User guide
$ gitmopy info
gitmopy info:
version : 0.6.0
app path : /Users/victor/.gitmopy
history : /Users/victor/.gitmopy/history.json
config : /Users/victor/.gitmopy/config.yaml
custom emojis: /Users/victor/.gitmopy/custom_gitmojis.yaml
Current configuration:
skip_scope : False
skip_message : False
capitalize_title : True
enable_history : True
emoji_set : gitmoji
default_commit_flags: ['add', 'keep_alive', 'sign', 'simple']
default_commit_args : {'remote': 'origin', 'repo': '.'}
Update configuration with
$ gitmopy config
❓ Configure gitmopy locally. Use 'space' to (de-)select, 'enter' to validate.
❯ ○ Skip commit scope
○ Skip commit message
◉ Capitalize commit title
◉ Remember commit history for auto-complete and emoji sorting
Config will be saved in /Users/victor/.gitmopy/config.yaml.
✓ Configure gitmopy locally.
❓ Emoji set to use for commits
❯ gitmoji
ai-devmojis
❓ Default commit binary flags used in `gitmopy start`
❯ ◉ add
○ dry
◉ keep_alive
○ push
◉ sign
◉ simple
❓ repo (Path to the git repository): .
❓ remote (Comma-separated list of remotes to push to): origin
Get help with
$ gitmopy --help
Usage: gitmopy [OPTIONS] COMMAND [ARGS]...
╭─ Options ───────────────────────────────────────────────────────────────────────╮
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to copy it │
│ or customize the installation. │
│ --help Show this message and exit. │
╰─────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ──────────────────────────────────────────────────────────────────────╮
│ commit Commit staged files. Use --add to interactively select files to stage │
│ if none is already staged │
│ config Configure gitmopy │
│ info Print gitmopy info │
│ start Runs the commit command with the default arguments you have set in the │
│ configuration file. If no such arguments are set, you will be prompted │
│ to set them interactively. │
╰─────────────────────────────────────────────────────────────────────────────────╯
$ gitmopy commit --help
Usage: gitmopy commit [OPTIONS]
Commit staged files. Use --add to interactively select files to stage if none is
already staged
╭─ Options ───────────────────────────────────────────────────────────────────────╮
│ --repo TEXT Path to the git repository │
│ [default: .] │
│ --add --no-add Whether or not to interactively select │
│ files to stage if none is already │
│ staged │
│ [default: no-add] │
│ --push --no-push Whether to `git push` after commit. If │
│ multiple remotes exist, you will be │
│ asked to interactively choose the ones │
│ to push to. Use --remote to skip │
│ interactive selection. Disabled by │
│ default. │
│ [default: no-push] │
│ --dry --no-dry Whether or not to actually commit. │
│ [default: no-dry] │
│ --remote TEXT Remote to push to after commit. Use to │
│ skip interactive remote selection when │
│ several exist. Use several '--remote │
│ {remote name}' to push to multiple │
│ remotes │
│ --keep-alive --no-keep-alive Whether or not to keep the app alive │
│ after commit, to be ready for another │
│ one. │
│ [default: no-keep-alive] │
│ --simple --no-simple Whether or not to use a simple commit │
│ which merges conventional commits and │
│ gitmoji. │
│ [default: no-simple] │
│ --sign --no-sign Whether or not to sign the commit with │
│ GPG. Equivalent to `git commit -S`. │
│ [default: no-sign] │
│ --help Show this message and exit. │
╰─────────────────────────────────────────────────────────────────────────────────╯
Default commit settings
You can configure default settings for the gitmopy start command which will run gitmopy commit with your preferred arguments. To set these up:
- Run
gitmopy config - Navigate to "Default commit binary flags used in
gitmopy start" - Select the flags you want enabled by default (e.g.,
add,keep-alive,push, etc.) - Navigate to "Default commit arguments used in
gitmopy start" - Configure:
repo: Path to your git repository (default: ".")remote: Comma-separated list of remotes to push to (default: "origin")
Then simply run gitmopy start to use your default settings!
For example, if you always want to:
- Work in the current directory
- Be able to select files to stage
- Keep committing until you're done
- Sign your commits
- Push to origin
Configure these settings once with gitmopy config and just run gitmopy start instead of gitmopy commit --add --keep-alive --push --remote origin --sign!
To Do
- Features
- If requested:
- Install hook
git commitflags (like-S)- max history length (if loading the json becomes slow)
- If requested:
- Tests
- typer.tiangolo.com/tutorial/testing/
- 👋 Help wanted
- Docs
- Not critical
Resources
gitmopy is inspired by gitmoji-cli.
It is built thanks to:
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 Distribution
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 gitmopy-0.6.0.tar.gz.
File metadata
- Download URL: gitmopy-0.6.0.tar.gz
- Upload date:
- Size: 917.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e9773d8be3207eb55928ee22dd195310beaadc6cd377a7c7645c135244a4a1f
|
|
| MD5 |
6a4fbf05e19ed6e24ea000ef811f2f63
|
|
| BLAKE2b-256 |
214eab3e1c3cd56e598dc4cce663468d0cefdc440f375655b08057de900909d7
|
File details
Details for the file gitmopy-0.6.0-py3-none-any.whl.
File metadata
- Download URL: gitmopy-0.6.0-py3-none-any.whl
- Upload date:
- Size: 25.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81b47027d69e3a05845c144a28ebdc2c95125f38b693608cdfe353a121b7a84e
|
|
| MD5 |
a6f626cd2356c9904c7c1ddb3eba0f4f
|
|
| BLAKE2b-256 |
2531cf4593e0cfb10395ee81c3d1d76145f133fc66f1aab6cdca555d99b707aa
|