GitコミットをNotionに記録してみてる
Gitのコミットフックを使って、コミット内容をNotionに記録してみています。
Gitコミットを自動的にNotionに記録するcommit hookを書いてみた。https://t.co/jb2U68PbMB
— azu (@azu_re) December 28, 2022
しばらく遊んでみる pic.twitter.com/rnlKJgVMtk
実際に使ってるコミットフックは、次のリポジトリにあります。
Git 2.9+からcore.hooksPath
というglobalなGit Hookを設定できます。
このglobal hookを使い、どのリポジトリでもpre-commitやpost-commitなどのコミットフックのスクリプトを実行できます。
Notionにコミットログを送るGitフックの作り方
Notionに書き込み用のデータベースを作成し、次のカラムを作りました。
- Repo
- Hash
- Message
.env
ファイルに次のようにNotionデータベースとAPIトークンを定義します。
GIL_NOTION_GIL_DATABASE_ID='xxx'
GIL_NOTION_GIL_API_TOKEN='xxx'
そして、post-commit
に次のようなスクリプトを書きます。
# License: MIT ©️ azu
# https://efcl.info/2023/01/25/gil-notion-git-log/
# .env にNotionの情報を入れる必要があります
# 中で.envを読み込んでいます。
declare scriptDir
declare DOT_ENV
# GIL: Git CommitをNotionに記録する仕組み
declare GIT_COMMIT_LOG
declare GIT_COMMIT_MSG
declare GIT_COMMIT_HASH
declare GIT_REPO_HTTP_URL
declare GIL_NOTION_GIL_DATABASE_ID
declare GIL_NOTION_GIL_API_TOKEN
GIT_COMMIT_LOG=$(git log -n 1 HEAD --format="format:%h %s")
GIT_COMMIT_HASH=$(echo "${GIT_COMMIT_LOG}" | cut -d' ' -f1)
GIT_COMMIT_MSG=$(echo "${GIT_COMMIT_LOG}" | cut -d' ' -f2-)
# skip [Git Cancel] commit
if [[ "${GIT_COMMIT_MSG}" =~ ^\[Git\ Cancel\] ]]; then
exit 0;
fi
currentDirName=$(basename $(pwd))
parentDirName=$(basename $(dirname $(pwd)))
GIT_REPO_HTTP_URL=$( (git config --get remote.origin.url || echo "https://github.com/${parentDirName}/${currentDirName}") | sed -e 's/.git$//' -e 's/^ssh:\/\/git@/https:\/\//' -e 's/^[email protected]:/https:\/\/github.com\//' )
scriptDir=$(cd $(dirname ${BASH_SOURCE:-$0}) || exit; pwd)
DOT_ENV="${scriptDir}/../.env"
export $(grep -v '^#' "${DOT_ENV}" | xargs)
NOTION_PAYLOAD=$(cat <<EOF
{
"parent": { "database_id": "${GIL_NOTION_GIL_DATABASE_ID}" },
"properties": {
"Message": {
"title": [
{
"text": {
"content": "${GIT_COMMIT_MSG}"
}
}
]
},
"Hash": {
"rich_text": [{
"text": {
"content": "${GIT_COMMIT_HASH}"
}
}]
},
"Repo": {
"url": "${GIT_REPO_HTTP_URL}"
}
}
}
EOF
)
curl -s -X POST https://api.notion.com/v1/pages \
-H "Authorization: Bearer ${GIL_NOTION_GIL_API_TOKEN}" \
-H "Content-Type: application/json" \
-H "Notion-Version: 2022-02-22" \
--data "${NOTION_PAYLOAD}" > /dev/null & exit 0;
作った理由
- https://ctzn.network/dev-vlogをみてて、コミットと動画の時間が紐づいてて面白かった。
- リポジトリ横断で、コミットと時間軸だけで一覧できると面白そうと思って作ってみた
- postcommitでコミットメッセージとリポジトリを取得して、それをNotionに記録するという感じ
コミットログだけしか送ってないですが、NotionのAPIが画像とか対応したらスクショとかも送ったりすると面白そうだなーとか考えています。 (Rewindみたいな。lolcommits: selfies for software developersというのもあった)
Convential Commitとかバージョンのコミットなんか規則性があるので、それをリポジトリ横断でみたりすると面白い感じはします。
リリースのコミットだけみると面白い pic.twitter.com/TE7lSkfcjY
— azu (@azu_re) January 8, 2023
実際に使ってるコミットフックはgit-hooks/post-notion-gil.sh at master · azu/git-hooks · GitHubにあります。 もうちょっと色々やっていて、じぶんのNotionはDailyのページがあるので、それぞれのコミットが自動的にそこに紐づくのようになっています。 日次のページにコミットが紐づくので、その日に何をしたかがわかりやすくなったのは結構よかったです(以前はその日にやったタスクが並んでるけど、タスクにわざわざ切らないコミットは多いため)。
GILでGitコミットとデイリーのNotionページに紐づくようになった。
— azu (@azu_re) January 17, 2023
これで、その日に何をコミットしてたかが自動で紐づく pic.twitter.com/QAZf92n8IX
単純にリレーションするだけだと紐づくだけで見えにくいですが、“セクションとして表示”を使うとリレーションの表示方法が変更できます。
Notion セクションとして表示ってやるとrelationの情報がかなりわかりやすくできるんだなー
— azu (@azu_re) January 25, 2023
便利だ pic.twitter.com/WsUxhdV3gO
特に利点はないですが、コミットメッセージちゃんと書こうとかちょっと思ったりはしました。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。