GithubHelp home page GithubHelp logo

tom-doerr / chatgpt_commit_message_hook Goto Github PK

View Code? Open in Web Editor NEW
70.0 2.0 7.0 37 KB

Enhance your git workflow using AI-generated commit messages from ChatGPT. Seamless integration for a well-documented commit log.

License: MIT License

Python 85.95% Makefile 8.06% Dockerfile 3.90% Shell 2.10%
chatgpt git git-hooks openai

chatgpt_commit_message_hook's Introduction

๐Ÿค– ChatGPT Commit Message Hook ๐Ÿช

Let ChatGPT write your commit messages.

Repository's starts Issues License
Latest commit GitHub repository size

ChatGPT will provide a suggestion for the commit message.

ChatGPT Commit Message Hook

What is it?

This is a hook for git that generates commit messages. It uses OpenAI's ChatGPT to generate commit messages.

How do I install it?

Setup

  1. Install packages (pip install -r requirements.txt).
  2. Create a file at $XDG_CONFIG_HOME/openaiapirc with your API keys.
  3. [optional] Add proxy server settings to the config file. Http proxy is supported only.
  4. [optional] The maximum number of changed lines in a commit. If the number of changed lines is greater than this value, the hook will send the result of git diff --cached --stat, otherwise it will send git diff --cached. The default value is 80.

For example:

[openai]
secret_key = MY_SECRET_KEY
proxy= HTTP_PROXY
max_changed_lines=80
  1. Install the hook:
git clone https://github.com/jsfs2019/chatgpt_commit_message_hook
cd chatgpt_commit_message_hook
sudo make install

This will set up the hook for all new repositories. To add the hook to an existing repository, run git init.

How does it work?

The hook gets the current commit message, runs ChatGPT to generate a new commit message, and then replaces the current commit message with the generated message.

chatgpt_commit_message_hook's People

Contributors

cheako avatar jsfs2019 avatar tom-doerr avatar xiantang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

chatgpt_commit_message_hook's Issues

Does not like not setting proxy.

The config file was just 3 lines, not 4 like the example.

cheako@mx1:~/src/gitlab/hazel-rs$ git commit -a
Traceback (most recent call last):
  File "/usr/bin/prepare-commit-msg", line 161, in <module>
    api_key, proxy, max_changed_lines = initialize_openai_api()
                                        ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/bin/prepare-commit-msg", line 149, in initialize_openai_api
    proxy = config["openai"]["proxy"].strip('"').strip("'")
            ~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/local/lib/python3.11/configparser.py", line 1273, in __getitem__
    raise KeyError(key)
KeyError: 'proxy'

ValueError: SHA could not be resolved

I do not know why I'm getting this.

cheako@mx1:~/src/gitlab/hazel-rs$ git commit -a
Traceback (most recent call last):
  File "/usr/bin/prepare-commit-msg", line 162, in <module>
    changes_dict = count_staged_changes()
                   ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/bin/prepare-commit-msg", line 36, in count_staged_changes
    staged_diff = index.diff("HEAD", create_patch=True, R=True)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/index/base.py", line 1386, in diff
    other = self.repo.rev_parse(other)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/repo/fun.py", line 378, in rev_parse
    obj = cast(Commit_ish, name_to_object(repo, rev))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/repo/fun.py", line 187, in name_to_object
    return Object.new_from_sha(repo, hex_to_bin(hexsha))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/objects/base.py", line 94, in new_from_sha
    oinfo = repo.odb.info(sha1)
            ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/db.py", line 40, in info
    hexsha, typename, size = self._git.get_object_header(bin_to_hex(binsha))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/cmd.py", line 1383, in get_object_header
    return self.__get_object_header(cmd, ref)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/cmd.py", line 1370, in __get_object_header
    return self._parse_object_header(cmd.stdout.readline())
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/cmd.py", line 1329, in _parse_object_header
    raise ValueError("SHA could not be resolved, git returned: %r" % (header_line.strip()))
ValueError: SHA could not be resolved, git returned: b''
cheako@mx1:~/src/gitlab/hazel-rs$ git commit
Traceback (most recent call last):
  File "/usr/bin/prepare-commit-msg", line 162, in <module>
    changes_dict = count_staged_changes()
                   ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/bin/prepare-commit-msg", line 36, in count_staged_changes
    staged_diff = index.diff("HEAD", create_patch=True, R=True)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/index/base.py", line 1386, in diff
    other = self.repo.rev_parse(other)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/repo/fun.py", line 378, in rev_parse
    obj = cast(Commit_ish, name_to_object(repo, rev))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/repo/fun.py", line 187, in name_to_object
    return Object.new_from_sha(repo, hex_to_bin(hexsha))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/objects/base.py", line 94, in new_from_sha
    oinfo = repo.odb.info(sha1)
            ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/db.py", line 40, in info
    hexsha, typename, size = self._git.get_object_header(bin_to_hex(binsha))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/cmd.py", line 1383, in get_object_header
    return self.__get_object_header(cmd, ref)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/cmd.py", line 1370, in __get_object_header
    return self._parse_object_header(cmd.stdout.readline())
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/cmd.py", line 1329, in _parse_object_header
    raise ValueError("SHA could not be resolved, git returned: %r" % (header_line.strip()))
ValueError: SHA could not be resolved, git returned: b''

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.