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’命令将焦点移到了该应用程序,然后只需要按下空格键就可以了,但是。。。

广告
将在 10 秒后关闭
bannerAds