gitに慣れるべくGUIツールは使わずにコマンドラインでやってました。
ただ、gitでファイルの差分を確認するとき
git status
→git diftool
→git add
の流れはもうめんどくさいので、少しらくになるシェルスクリプトを作成しました。
mac向けです。
hoge.sh
#!/bin/bash
# gitの差分確認用
commitId="^HEAD"
if [ $# -eq 1 ]; then
commitId=$1
fi
if [ $# -eq 2 ]; then
commitId="${1} ${2}"
fi
echo "git difftool ${commitId} 選択されたファイル -Y & を実行します"
while : ;do
i=1
echo stageにある
status=$(git status --porcelain | grep "M ")
dir=$(pwd)
for file in ${status}
do
if [ -f ${dir}/${file} ]; then
files[$i]=${file}
echo -e "[\033[0;34m$i\033[0m]\033[0;32m${files[$i]}\033[0m"
add_flag[$i]=
diff_flag[$i]=1
let i++
fi
done
echo stageにない
status=$(git status --porcelain | grep " M ")
dir=$(pwd)
for file in ${status}
do
if [ -f ${dir}/${file} ]; then
files[$i]=${file}
echo -e "[\033[0;34m$i\033[0m]\033[0;31m${files[$i]}\033[0m"
add_flag[$i]=1
diff_flag[$i]=1
let i++
fi
done
echo "新規作成ファイル(addだけします)"
status=$(git status --porcelain | grep "?? ")
dir=$(pwd)
for file in ${status}
do
if [ -f ${dir}/${file} ]; then
files[$i]=${file}
echo -e "[\033[0;34m$i\033[0m]\033[0;31m${files[$i]}\033[0m"
add_flag[$i]=1
diff_flag[$i]=
let i++
fi
done
read -p "ファイルの番号選択:" num;
if [ $num ]; then
if [ ${diff_flag[$num]} ]; then
git difftool $commitId ${files[$num]} -Y &
osascript -e 'tell application "FileMerge" to activate'
fi
if [ ${add_flag[$num]} ]; then
read -p "addする?(y/n):" flag ;
if [ $flag = y ]; then
git add ${files[$num]}
fi
fi
else
exit
fi
done
このファイルをパスの通っているディレクトリに置いて、ターミナルからgitで管理しているフォルダの中に入ってhoge.sh
で動きます。
で、僕の環境ではdifftoolが動くと必ずFileMergeのポップアップが出てきてしまいます。
このポップアップもスクリプトでなんとかしたいんですができていません。
osascript -e 'tell application "FileMerge" to activate'
でフォーカスを移すことはできました。後はspaceを押すだけなのですが。。