git状态→git对比工具→git添加
为了熟悉git,我选择不使用GUI工具,而是使用命令行进行操作。
然而,当需要确认文件的差异时,git status→git difftool→git add的流程变得有些麻烦,
所以我编写了一个简化流程的shell脚本,适用于Mac。
#!/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’命令将焦点移到了该应用程序,然后只需要按下空格键就可以了,但是。。。