モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

gitで取ってきたファイルのタイムスタンプをcommit日付に直す

git clone等で取得したファイルのタイムスタンプは、commitされた日時ではなく、そのgitコマンドを発行した日時になってしまいます。

なんかオプション指定でもすれば、commitした日時にできるのかな?と思ったのですが、簡単にはできないみたいで、gitのwikiにタイムスタンプを変更するperlスクリプトが書かれていました。


Setting the timestamps of the files to the commit timestamp of the commit which last touched them
https://git.wiki.kernel.org/index.php/ExampleScripts#Setting_the_timestamps_of_the_files_to_the_commit_timestamp_of_the_commit_which_last_touched_them


で、これと同様のことをshellスクリプトで行うものが下記サイトにありました。


コミット日付をタイムスタンプに復元したい
http://www.shigemk2.com/entry/git.timestamp


今まわりの人にMobaXTermを勧めていることもあって、MobaXTerm上でこれを使えるようにしたかったのですが、MobaXTermで使われているbusyboxだとdateの挙動の違いで動かなかったため、一部を修正して使えるようにしてみました。


git-set-file-times for busybox
https://github.com/stealthinu/git-set-file-times4busybox

for FILE in `git ls-files`; do
  TIME=`git log --pretty=format:%ci -n1 ${FILE} | sed -e "s/\([+-][0-9]\{2\}\)00$/\1:00/"`
  echo -e "${TIME}\t${FILE}"
  touch -t "${TIME}" ${FILE}
done


busyboxのdateコマンドでは「+0900」という書式でのTZ指定はエラーになってしまうため「+09:00」という形に置き換えるようになっています。