LoginSignup
7
8

More than 5 years have passed since last update.

どうでもいいリポジトリのどうでもいいcommitのためのコミットメッセージ自動生成スクリプト

Last updated at Posted at 2016-07-17

自分のdotfilesとか、プライベートの誰も見ないようなリポジトリとか、そのうちrebaseするからとりあえず区切りをつけたいだとか、そんな時にたぶん役に立つスクリプトです

git_commit_automatically_loop() {
  local action message
  while read line; do
    action=$(echo $line | awk '{print $1}' | sed "s/://")
    case $action in
      "new" ) added_changes="[add] $(echo $line | awk '{print $3}')" ;;
      "deleted" ) added_changes="[remove] $(echo $line | awk '{print $2}')" ;;
      "renamed" ) added_changes="[rename] $(echo $line | awk '{print $2 $3 $4}')" ;;
      "modified" ) added_changes="[improve] $(echo $line | awk '{print $2}')" ;;
    esac
    message="$message $added_changes"
  done
  echo $message
}

git_commit_automatically() {
  commit_message=$( git status \
    | sed '1,/Changes to be committed/ d' \
    | sed '1,/^$/ d' \
    | sed '/^$/,$ d' \
    | git_commit_automatically_loop
  )
  [ $# = 0 ] || str=" | $*"
  git commit -m "${commit_message}${str}"
}

以上のをコピペで.zshrcとか.bashrcとかに貼って貰えば動くと思います

仕組みは簡単で、git statusから読み取った情報をadd,remove,renameそしてimproveに分けて、ついでに引数として与えられたものを付け足してコミットメッセージにするだけです。
要するに、hoge.shを編集して、fuga.shを削除した時に

$ git_commit_automatically bugg fix 🐛 

とすると、
[improve] hoge.sh [remove] fuga.sh | bugg fix 🐛
というようなコミットメッセージのコミットができます。何の情報もありませんね。
なんか[improve]とか[add]とかあるんでそれっぽく見えますけど、最低限未満の情報しか伝わってこないので、本当にどうでもいいコミットにだけしか使えません。

関数名が長いので、適当にaliasしてください。
僕は

~/.zshrc
alias gac="git add -A && git_commit_automatically"

としています、こうすることでgacと入力するだけでaddからcommitまで一発でできます。

追記

ちょっとコードを直しました、引数をつけない時も"|"がついてしまうのを修正しました

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8