git ファイルタイムスタンプ通りにコミットする方法

方法
(1) 古い順に1個ずつコミットして、日時を更新
  1. 自動スクリプトで全部自動的に古い順にコミットを繰り返します
    コミット数が少ない場合は、1分で終わります。
    コメント欄に日時をいれれば簡単に書き換えできます
    スクリプトから日付が参照できる形ならなんでもOK
    (1) フォルダを全スキャンし、ファイルリストを作成します
    (2) 不要なものを除外します
    (3) 日付でリストをソートします
    (4) リストをループさせて、gid add , commitを繰り返します
         次のリストと日付が同じ場合、commitは次でするので出力しません。
         日付をコメントとして登録します
    (5) ファイルに書き出します
    (6) 問題がないか確認します。追加する行があれば追加します
    (7) 空のリポジトリを用意します
    (8) スクリプトを実行し、空のリポジトリに登録します
  2. ログを全部書き出します
    git log --all
  3. filter-branch 用の スクリプトファイルを用意します
    logファイルから、設定を抽出書き出します。
  4. 日時書き換え自動スクリプトで日時を自動的に書き換えます
    chmod +x path/to/script
    git filter-branch --env-filter 'source path/to/script'

手動で書き換える場合は、
git filter-branch --env-filter '
 if [ $GIT_COMMIT = "番号" ]; then
 export GIT_AUTHOR_DATE="変えたい日付"
 export GIT_COMMITTER_DATE="${GIT_AUTHOR_DATE}"
fi'

日付は
git log
または
php -nr " date_default_timezone_set('japan'); echo date(DateTime::RFC2822,strtotime('2015/1/1 0:0:0'));"

問題がなければ、バックアップを削除する
git show-ref | grep refs/original/refs/heads

git update-ref -d refs/original/refs/heads/master

コメントとして、日時をいれているので、移動してタイムスタンプがおかしくなった時もログからいつのかわかります。

方法 (2) dumpして書き換える

» git ファイルタイムスタンプ通りにコミットする方法'">続きを読む