自分の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まで一発でできます。
追記
ちょっとコードを直しました、引数をつけない時も"|"がついてしまうのを修正しました