itochin2の日記(仮)

主に備忘録。Perl、MySQL、Unity、開発管理などについて情報を残していきたい。

gitのタイムスタンプをコミット時の時刻にするfor Mac

ブランチをリモートからfetchして、開発サーバーにrsyncしてるけど、
fetchした時間だと全部syncされて都合が悪い。

subversionにあった”ファイルの更新日付を「最後にコミットした日時に設定」”機能は
gitにないのかなーと思って調べたところ、gitにはないけどスクリプトでやればいい事が判明。

参考ブログ

[gitのタイムスタンプをコミット時の時刻にする]
http://d.hatena.ne.jp/iww/20121011/pretty

あるじゃん、ラッキー!って思ってコピペしたら動かないし・・・
dateの書式違うって言われるし・・・。
色々調べて、スクリプトを修正した。

mac版のスクリプト

#!/bin/bash

for FILE in $(git ls-files); do
	TIME=$(git log --pretty=format:%ci -n1 $FILE)
	#echo -e $TIME"\t"$FILE

	STAMP=`date -jnu -f "%Y-%m-%d %H:%M:%S %z" "$TIME" "+%Y%m%d%H%M.%S"`
	#echo $STAMP

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


勉強になった事

/bin/dash

/dashってbashのスペルミスじゃねーの? ホントに動いたの?
って思ったけど、Debianのシェルだった。
うっかりtwitterで文句言ったらまた恥を晒すところだった・・・

echo -e

echoコマンドで\nとか\t使う場合は、「-e」オプションをつける。

コピペよくない

よく確認もせずコピペして自滅した。
最初から英語のドキュメントを読めばこんなことには・・・。


とりあえずgitにも上げてみた。
https://github.com/ayumu83s/latest_commit_time