どうもこんにちは、Megです。
今回はgitにおいてなるべくadd&commit&push&mergeを簡単にする方法について解説したいと思います。
add&commit&push&mergeを簡単にしようと思ったきっかけ
自分はAtCoderのコードをGitHubで管理しているのですが、ローカルとリモートリポジトリを紐つけるのがめんどくさいと思ったのがきっかけです。
通常のGitHub管理の流れなら、
- 編集したファイルを確認し、ステージングにaddする。
- ステージングにaddされたのを
git status
で確認した後、git commit -m
でコミットメッセージをつけてコミットする。 - そしてコミットしたものを
git push orgin "ブランチ名"
でpushする。 - pushされたブランチを確認し、Web上でmergeする。
このように編集内容をリモートリポジトリと同期するだけで4工程あります。
大勢で一つのプロジェクトを進めている場合はこの工程は素晴らしいストラテジーなのですが、今回の自分のようにGitHubをコードの倉庫として運用したい人にはかなり面倒に感じられます。
ですので、上記4工程をシェルスクリプトを用いてなるべく完結にしていきます!
こちらのサイトをかなり参考にさせていただきました。
.zshrcにコードを追加
下記に記述してあるコードをホームディレクトリ配下にある、~/.zshrcにそのままコピペしましょう!
注意!こちらはコマンドプロンプトやターミナルがzshの人専用です。bash等を用いている人は適宜コードの修正が必要です。(←bashの人は自分が参考にさせて頂いたこちらのサイトを参考にしてください。)
.zshrcに記入。
# git add, commit, pushまで一度に行う
gish() {
# 全てステージにのせる
git add -A;
# コミット対象のファイルを確認
git status;
echo "Commit with this content. OK? (y/N)"
if read -q; then
echo ;
echo "Input Commit Message: ";
read msg;
git commit -m "$msg";
CULLENT_BRANCH=`git rev-parse --abbrev-ref HEAD`;
git push origin ${CULLENT_BRANCH};
else
echo ;
echo "Quit.";
fi
}
このコードはgit add
,git status
を自動化しており、コミットするかどうかをy/N(yes/no)で質問されます。
Yesなら、コミットメッセージを入力しEnterを押すだけで作業中のブランチがpushされます。
Noなら、コミットは取り消されます。(addしたものはもとには戻りません。)
これなら、作業刷る際にあえてブランチは切らず、mainブランチで作業することで(個人でGitHubをコードの倉庫にしたいだけだから耐え)、gish
からコミット名を打ち込むだけでリモートリポジトリと同期ができます。
簡略コード
「yes/noの質問もコミットメッセージも煩わしい!!」という人は以下のコードを~/.zshrc
にコピペしてください。
gish() {
# 全てステージにのせる
git add -A;
# コミット対象のファイルを確認
git status;
# コミットメッセージ"auto-commit"でコミット
git commit -m "auto-commit";
CULLENT_BRANCH=`git rev-parse --abbrev-ref HEAD`;
git push origin ${CULLENT_BRANCH};
}
注意!これはgish
を叩いただけでpushされてしまうので、自分のようにGitHubをコードの倉庫として使うリポジトリでのみ使用しましょう。
上記のコードなら皆で共同開発しているようなリポジトリでも使えるので、汎用性は高いです。
参考にしたサイト
bash, zshでyes/no判定をするワンライナー – Qiita
bash,dash,zshのreadコマンドと行ごとの読み込み処理(while read)
【Git 作業効率化 Tips】〜git addしてcommitしてpushするのが面倒な全ての人に捧ぐ〜 – Qiita