概要
つぶやきと記録を行う為にコミット後、XとQiitaを開くようにしたい。
つまりはコミット後に自動でXとQittaを開くように行う。
流れ
1.作業後、コミットを行う。
2.コミット時にプログラムを走らせる。
3.ブラウザでXとQiitaが開く。
実装までの流れ
※SauceTreeや開発環境などの設定については省略します。
※詰まったところは記載しています。
環境
・OS:Windows10 22H2
・SauceTree:Version 3.4.23.0
・Git:Version 2.45.2
1.確認
Git確認
・作業リポジトリの「ターミナル」を開き下記コマンド実施。
git status
・「On branch ...」などと表示が出れば成功。
・「fatal: not a git repository」はGit管理されていないので別途対応が必要。
Gitバージョン
・「ツール」→「オプション」→「Git」→「Gitバージョン」
・GitバージョンがシステムGitになっていることを確認する。
・内臓Gitになっていたら、「System」を押下する。
フォルダ
・作業フォルダから「.git」→「hooks」のフォルダが存在することを確認する。
・隠しフォルダになっている可能性があるため、
エクスプローラーの「表示」→「隠しファイル」にチェックを入れる。
・「.git」の階層にあるフォルダは通常のフォルダ、ファイルになっている状態で大丈夫。
2.ファイル生成
パターン1 (単純)
・「hooks」フォルダ内に「post-commit」ファイルを生成する。
※拡張子はつけない
※UTF-8(BOMなし)ファイルで生成する
※改行コードはLF
@echo off
start https://x.com/compose/post
start https://qiita.com/drafts/new
exit
パターン2 (関節)
・「hooks」フォルダ内に「post-commit」ファイルとpost-commit.bat」ファイルを生成する。
※UTF-8(BOMなし)ファイルで生成する
※改行コードはLF
exec "(作業フォルダフルパス)/.git/hooks/post-commit.bat"
@echo off
start https://x.com/compose/post
start https://qiita.com/drafts/new
exit
パターン3 (コマンド)
・一番確実にできる
・SauceTreeの作業リポジトリから「ターミナル」
cd .git/hooks
del post-commit.bat
echo @echo off > post-commit.bat
echo start "" "https://x.com/compose/post" >> post-commit.bat
echo start "" "https://qiita.com/drafts/new" >> post-commit.bat
echo exit >> post-commit.bat
del post-commit
exec "(作業フォルダフルパス)/.git/hooks/post-commit.bat"
3.動作テスト
パターン1 (通常)
・コミットして、ブラウザが開いたら成功。
・失敗の場合は文字コードがBOMになっている可能性があり。
※Git はこの BOM を含むスクリプトファイルを実行できない。
パターン2 (コマンド)
・親ディレクトリ(作業フォルダ)に戻ってコミット処理を行う。
cd ../..
git add .
git commit -m "Hook test commit"
エラーメモ
コマンドでファイル作成後、作業フォルダに戻らず行うと下のようなエラーが出る。
fatal: this operation must be run in a work tree
間接的にファイルを実行しないと下記エラーになった。
Git はシェルスクリプトだと思って呼んでいるが、Windows には sh がないので実行できない。
error: cannot spawn .git/hooks/post-commit: No such file or directory
感想
・初めて行うことだったので苦戦まみれだった。
・文字コード辺りがうまくできなかったので、自分はコマンドですべて解決しました。
・多分、コマンド使わずにできる方もいるだろうから自分の行った順番でパターン化してみました。
・カスタム操作でバッチファイルを設定して手動のみ実施してもよいかもしれないです。