{"id":19295344,"url":"https://github.com/vict0rsch/gitmopy","last_synced_at":"2025-06-30T02:04:36.006Z","repository":{"id":175412574,"uuid":"653689048","full_name":"vict0rsch/gitmopy","owner":"vict0rsch","description":"A Python CLI to easily and continuously make pretty commits, following the https://gitmoji.dev specification","archived":false,"fork":false,"pushed_at":"2025-02-22T17:57:13.000Z","size":2152,"stargazers_count":8,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-16T21:18:50.768Z","etag":null,"topics":["cli","emoji","git","gitmoji","gitpython","python","typer"],"latest_commit_sha":null,"homepage":"https://gitmopy.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vict0rsch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-14T14:26:34.000Z","updated_at":"2025-02-22T17:57:16.000Z","dependencies_parsed_at":"2023-11-14T16:44:16.093Z","dependency_job_id":"ad9f0514-74e5-4f7d-9df1-08b0c201322c","html_url":"https://github.com/vict0rsch/gitmopy","commit_stats":{"total_commits":173,"total_committers":1,"mean_commits":173.0,"dds":0.0,"last_synced_commit":"1cfadc1244c21965706c6597f1e2a335632bd741"},"previous_names":["vict0rsch/gitmopy"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vict0rsch/gitmopy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vict0rsch%2Fgitmopy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vict0rsch%2Fgitmopy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vict0rsch%2Fgitmopy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vict0rsch%2Fgitmopy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vict0rsch","download_url":"https://codeload.github.com/vict0rsch/gitmopy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vict0rsch%2Fgitmopy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260648029,"owners_count":23041723,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","emoji","git","gitmoji","gitpython","python","typer"],"created_at":"2024-11-09T22:42:10.941Z","updated_at":"2025-06-30T02:04:35.980Z","avatar_url":"https://github.com/vict0rsch.png","language":"Python","readme":"# `gitmopy`\n\nAn interactive Python implementation of the Gitmoji convention: [gitmoji.dev/](https://gitmoji.dev/)\n\n```text\nuv tool run gitmopy\n# or\nuvx gitmopy\n```\n\n`uv`? Yes, in most cases you don't want to use `gitmopy`as a library but rather as a standalone CLI and you should therefore use [`uv`](https://docs.astral.sh/uv/getting-started/installation/) rather than `pip` to install it. `pip install gitmopy` will work too if that's really what you want.\n\n![demo-gitmopy](https://raw.githubusercontent.com/vict0rsch/gitmopy/main/assets/demo-gitmopy.gif)\n\n## How to use\n\n-   I typically use `$ gitmopy commit --add --keep-alive`\n-   Navigate through options with ⬆️ and ⬇️\n-   **Select** files with **`space`**\n-   **Validate** selection with **`enter`**\n-   Press **`tab`** to **auto-complete**\n    -   Press `tab` on an empty line to see history\n-   **Restart commit** with **`crtl+c`**\n    -   In the committing routine, press `ctrl+c` to go back to the previous step (for instance if you made a mistake in the commit title)\n-   Push (and set upstream if need be)\n-   Commit again 🔄\n\nYou 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.\n\nUse your own emojis by editing the \"custom emojis\" file listed by `gitmopy info`!\n\n[**See all available emojis**](https://gitmopy.readthedocs.io/en/latest/emoji_sets.html)\n\n## Suggested shortcuts\n\n```bash\nalias gpy=\"gitmopy\"\nalias gpys=\"gitmopy start\"\nalias gpyc=\"gitmopy commit\"\nalias gpya=\"gitmopy commit --add\"\nalias gpyk=\"gitmopy commit --add --keep-alive\"\n```\n\n![gpyk depo](https://raw.githubusercontent.com/vict0rsch/gitmopy/main/assets/gpyk.png)\n\n## Examples\n\n```bash\n# Typical daily use-case\n# ----------------------\n\n# continuously commit, interactively select files to stage\n$ gitmopy commit --add --keep-alive\n\n# same using an alias, + push after every commit (could be dangerous)\n$ gpyk --push\n\n# use your default commit settings (configured via `gitmopy config`)\n$ gitmopy start\n\n\n# Specific usage\n# --------------\n\n# commit currently staged files. Will fail if no file is staged.\n$ gitmopy commit\n\n# Enable interactive file selection if no file is currently staged. Ignored if\n# there are staged files.\n$ gitmopy commit --add\n\n# Commit continuously: don't leave the CLI after the first commit but restart\n# the commit procedure.\n$ gitmopy commit --keep-alive\n\n# Push to remote repositories after commit.\n# Interactively select remotes to push to if there are more than 1.\n$ gitmopy commit --push\n\n# Push to specific remotes\n$ gitmopy commit --push --remote origin --remote upstream\n\n# Make and display a commit message without staging/committing/pushing\n$ gitmopy commit --dry\n\n# configure gitmopy\n$ gitmopy config\n\n# print version, data paths and current configuration\n$ gitmopy info\n\n# print helps\n$ gitmopy --help\n$ gitmopy commit --help\n```\n\n⚠️ 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.\n\n## User guide\n\n```text\n$ gitmopy info\n\ngitmopy info:\n  version      : 0.6.0\n  app path     : /Users/victor/.gitmopy\n  history      : /Users/victor/.gitmopy/history.json\n  config       : /Users/victor/.gitmopy/config.yaml\n  custom emojis: /Users/victor/.gitmopy/custom_gitmojis.yaml\n\nCurrent configuration:\n  skip_scope          : False\n  skip_message        : False\n  capitalize_title    : True\n  enable_history      : True\n  emoji_set           : gitmoji\n  default_commit_flags: ['add', 'keep_alive', 'sign', 'simple']\n  default_commit_args : {'remote': 'origin', 'repo': '.'}\n```\n\nUpdate configuration with\n\n```text\n$ gitmopy config\n\n❓ Configure gitmopy locally. Use 'space' to (de-)select, 'enter' to validate.\n❯ ○ Skip commit scope\n  ○ Skip commit message\n  ◉ Capitalize commit title\n  ◉ Remember commit history for auto-complete and emoji sorting\n\nConfig will be saved in /Users/victor/.gitmopy/config.yaml.\n\n✓ Configure gitmopy locally.\n❓ Emoji set to use for commits\n❯ gitmoji\n  ai-devmojis\n\n❓ Default commit binary flags used in `gitmopy start`\n❯ ◉ add\n  ○ dry\n  ◉ keep_alive\n  ○ push\n  ◉ sign\n  ◉ simple\n\n❓ repo (Path to the git repository): .\n\n❓ remote (Comma-separated list of remotes to push to): origin\n```\n\nGet help with\n\n```text\n$ gitmopy --help\n\n Usage: gitmopy [OPTIONS] COMMAND [ARGS]...\n\n╭─ Options ───────────────────────────────────────────────────────────────────────╮\n│ --install-completion          Install completion for the current shell.         │\n│ --show-completion             Show completion for the current shell, to copy it │\n│                               or customize the installation.                    │\n│ --help                        Show this message and exit.                       │\n╰─────────────────────────────────────────────────────────────────────────────────╯\n╭─ Commands ──────────────────────────────────────────────────────────────────────╮\n│ commit   Commit staged files. Use --add to interactively select files to stage  │\n│          if none is already staged                                              │\n│ config   Configure gitmopy                                                      │\n│ info     Print gitmopy info                                                     │\n│ start    Runs the commit command with the default arguments you have set in the │\n│          configuration file. If no such arguments are set, you will be prompted │\n│          to set them interactively.                                             │\n╰─────────────────────────────────────────────────────────────────────────────────╯\n\n\n$ gitmopy commit --help\n\n Usage: gitmopy commit [OPTIONS]\n\n Commit staged files. Use --add to interactively select files to stage if none is\n already staged\n\n╭─ Options ───────────────────────────────────────────────────────────────────────╮\n│ --repo                             TEXT  Path to the git repository             │\n│                                          [default: .]                           │\n│ --add           --no-add                 Whether or not to interactively select │\n│                                          files to stage if none is already      │\n│                                          staged                                 │\n│                                          [default: no-add]                      │\n│ --push          --no-push                Whether to `git push` after commit. If │\n│                                          multiple remotes exist, you will be    │\n│                                          asked to interactively choose the ones │\n│                                          to push to. Use --remote to skip       │\n│                                          interactive selection. Disabled by     │\n│                                          default.                               │\n│                                          [default: no-push]                     │\n│ --dry           --no-dry                 Whether or not to actually commit.     │\n│                                          [default: no-dry]                      │\n│ --remote                           TEXT  Remote to push to after commit. Use to │\n│                                          skip interactive remote selection when │\n│                                          several exist. Use several '--remote   │\n│                                          {remote name}' to push to multiple     │\n│                                          remotes                                │\n│ --keep-alive    --no-keep-alive          Whether or not to keep the app alive   │\n│                                          after commit, to be ready for another  │\n│                                          one.                                   │\n│                                          [default: no-keep-alive]               │\n│ --simple        --no-simple              Whether or not to use a simple commit  │\n│                                          which merges conventional commits and  │\n│                                          gitmoji.                               │\n│                                          [default: no-simple]                   │\n│ --sign          --no-sign                Whether or not to sign the commit with │\n│                                          GPG. Equivalent to `git commit -S`.    │\n│                                          [default: no-sign]                     │\n│ --help                                   Show this message and exit.            │\n╰─────────────────────────────────────────────────────────────────────────────────╯\n```\n\n## Default commit settings\n\nYou can configure default settings for the `gitmopy start` command which will run `gitmopy commit` with your preferred arguments. To set these up:\n\n1. Run `gitmopy config`\n2. Navigate to \"Default commit binary flags used in `gitmopy start`\"\n3. Select the flags you want enabled by default (e.g., `add`, `keep-alive`, `push`, etc.)\n4. Navigate to \"Default commit arguments used in `gitmopy start`\"\n5. Configure:\n    - `repo`: Path to your git repository (default: \".\")\n    - `remote`: Comma-separated list of remotes to push to (default: \"origin\")\n\nThen simply run `gitmopy start` to use your default settings!\n\nFor example, if you always want to:\n\n-   Work in the current directory\n-   Be able to select files to stage\n-   Keep committing until you're done\n-   Sign your commits\n-   Push to origin\n\nConfigure these settings once with `gitmopy config` and just run `gitmopy start` instead of `gitmopy commit --add --keep-alive --push --remote origin --sign`!\n\n## To Do\n\n-   Features\n    -   _If requested:_\n        -   Install hook\n        -   `git commit` flags (like `-S`)\n        -   max history length (if loading the json becomes slow)\n-   Tests\n    -   [typer.tiangolo.com/tutorial/testing/](https://typer.tiangolo.com/tutorial/testing/)\n    -   👋 **Help wanted**\n-   Docs\n    -   Not critical\n\n## Resources\n\n`gitmopy` is inspired by [`gitmoji-cli`](https://github.com/carloscuesta/gitmoji-cli).\n\nIt is built thanks to:\n\n-   [`typer`](https://github.com/tiangolo/typer)\n-   [`InquirePy`](https://github.com/kazhala/InquirerPy)\n-   [`GitPython`](https://github.com/gitpython-developers/GitPython)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvict0rsch%2Fgitmopy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvict0rsch%2Fgitmopy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvict0rsch%2Fgitmopy/lists"}