0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

git status→git diftool→git add

Posted at

gitに慣れるべくGUIツールは使わずにコマンドラインでやってました。
ただ、gitでファイルの差分を確認するとき
git statusgit diftoolgit 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を押すだけなのですが。。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?