銀の弾丸

プログラミングに関して、いろいろ書き残していければと思っております。

Gitでアリバイ工作するスクリプトはコチラです

f:id:takamints:20180217200222p:plain
[Defi] Master and Servant by Franck Mahon, on Flickr


あなたはとある事件の容疑者だ。 悪いことに、事件当日の居場所を証明できないでいる。

というか、ここだけの話ホントはアナタが真犯人。だからこの際アリバイ工作するしか無いようだ・・・

そこであなたは、Gitのコミット日時を書き換える(え?)・・・

(という設定で以下進行ってなんだそりゃ?)

コミット日時を偽装する

ってな時に、Gitのコミット日時を偽装して、簡単にアリバイ工作(?)できるスクリプトが、これ(↓)ですね。

git-giso

#!/bin/sh
if [ "$1" = "" ]; then
    echo "Error: datetime need to be specified"
    exit 1
fi
echo git commit --amend -C HEAD --date="$1" && \
git commit --amend -C HEAD --date="$1" && \
echo && \
echo git rebase HEAD~ --committer-date-is-author-date && \
git rebase HEAD~ --committer-date-is-author-date

このファイルに実行属性を付けてPATHの通った所へINSTALL。

実行例

実行すると以下のようになりますよ(極秘情報は伏せてある)。

$ git-giso '2018-02-17 20:26:45'
git commit --amend -C HEAD --date='2018-02-17 20:26:45'
[working-branch abcdefg] #$%S&Gys7&%$#
 Date: #$$ Feb %& $%#2#$$%&'(&%%%
 n file changed, 4 insertions(+)

git rebase HEAD~ --committer-date-is-author-date
Current branch working-branch is up to date, rebase forced.
First, rewinding head to replay your work on top of it...
Applying: %&%S$%S&&D'F/??./

それは、ヒ・ミ・ツ

理由は明かせないけれど、コミット日時を書き換えたいときがあります(よね?)。あるんです。

絡み合う2つの日時・・・

  1. Gitのコミットには author-datecommitter-dateという2つの日付がありまして、最初にコミットした時、両方同時刻に設定されます。
  2. でも、git commit --amend した時には、committer-date しか書き換わらないの・・・
  3. てことで、git commit --amend -C HEAD --date='<datetime>' として author-date を書き換える。
  4. しかし、committer-date が、その時の時刻になってしまっているので、
  5. git rebase HEAD~ --committer-date-is-author-datecommitter-dateauthor-dateに一致させるというわけです。

ふう・・・

masterブランチでやっちゃダメ

これ、amendしてrebaseするので、ワーキングブランチでやりましょう。

masterブランチでコレやって、push -f とかしちゃったら、市中引き回しの上獄門ですから気をつけて。


なんで縄文・・・