【Git】ファイル更新日時をコミット日時にする

#!/bin/bash

git ls-files | while IFS= read -r FILE; do
  TIME=$(git log --pretty=format:%ci -n1 -- "$FILE")
  
  # `git log` の出力が空でないか確認
  if [ -z "$TIME" ]; then
    echo "Skipping: No commit timestamp for $FILE" >&2
    continue
  fi

  echo -e "$TIME\t$FILE"

  # Mac と Linux の `date` コマンドの違いに対応
  if date -d "$TIME" +"%y%m%d%H%M.%S" >/dev/null 2>&1; then
    STAMP=$(date -d "$TIME" +"%y%m%d%H%M.%S")
  else
    STAMP=$(date -j -f "%Y-%m-%d %H:%M:%S %z" "$TIME" +"%y%m%d%H%M.%S" 2>/dev/null)
  fi

  # `date` コマンドの変換が成功したか確認
  if [ -z "$STAMP" ]; then
    echo "Skipping: Failed to parse date for $FILE" >&2
    continue
  fi

  touch -t "$STAMP" -- "$FILE"
done