使い方
どういうことかというと、git pull -i
を打てば、shellと対話しながらpullできるというシロモノです。
こんな感じ。
$ git pull -i
Please input remote (default: origin) upstream
Please input branch (default: master) master
# file diff
.gitignore | 1 +
app/assets/javascripts/hoge.coffee | 7 +
app/controllers/hoge_controller.rb | 2 +-
3 files changed, 9 insertions(+), 1 deletions(-)
Are you sure you want to run? (y/N)
リモートリポジトリとローカルブランチを入力すると試しにdiffし、yesを入力すればpullを、noを入力すればpullがキャンセルされます。
やり方
githubから該当リポジトリをcloneします。
ファイル自体をコピペして置くだけでも大丈夫です。
git clone git@github.com:shibukk/git-extensions.git
.bashrc
や.zshrc
に下記を記述します。
設置したshellのパスにするのと、shellの再起動を必ずしてください。
.zshrc
function git() {
sh ~/git-extensions/pull_interactive.sh $@
}
あとはgit pull
するときに-i
をつけるだけで対話的にpullしてくれます。
説明など
gitコマンド全体をラップしてshellに渡します。
.zshrc
function git() {
sh ~/git-extensions/pull_interactive.sh $@
}
getopts
だとpullの後にオプションが続く場合に取得できなかったので、$*
をループして取得しています。
~/git-extensions/pull_interactive.sh
# -iオプションがあるかどうか確認する
i_option_flg=0
for opt in $*
do
case $opt in
'-i' )
i_option_flg=1
;;
esac
done
git diff --stat
を利用して、git pull
を擬似的にdry-runします。
~/git-extensions/pull_interactive.sh
# dry-runをする
command git fetch $remote
command git diff --stat-width=500 $branch..$remote/$branch
yes/noの確認メッセージはこちらのサイトを参考にしました。分かりやすい解説ありがとうございました。