#!/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