以下の2つのスクリプトをこさえた
recommit.sh
#!/usr/bin/env bash
COMMIT="$(cat commit)"
AUTHOR_DATE="$(git log "$COMMIT" -1 --pretty=format:%ai)"
AUTHOR="$(git log "$COMMIT" -1 --pretty=format:"%an <%ae>")"
COMMITTER_NAME="$(git log "$COMMIT" -1 --pretty=format:"%cn")"
COMMITTER_EMAIL="$(git log "$COMMIT" -1 --pretty=format:"%ce")"
COMMITTER_DATE="$(git log "$COMMIT" -1 --pretty=format:"%ci")"
MSG="$(git log "$COMMIT" -1 --pretty=format:"%B")"
GIT_COMMITTER_NAME="$COMMITTER_NAME" \
GIT_COMMITTER_EMAIL="$COMMITTER_EMAIL" \
GIT_COMMITTER_DATE="$COMMITTER_DATE" \
git commit --date "$AUTHOR_DATE" --author "$AUTHOR" -m "$MSG" "$@"
cat reset.sh
#!/usr/bin/env bash
HEAD="$(git log -1 --pretty=format:%H)"
git reset --hard "$1"
git reset "$HEAD"
echo "$1" >commit
まず、
git clone https://github.com/dbkk/docx-researchmap
cd docx-researchmap
git checkout -b diff-traceable-ipynb 51b837157cc77b0540ef24487423c05b187f5a68
として、1st commit の branch を work directory に展開
Cygwin の Jupyter Notebook で .ipynb を再保存ししたら以下のようにして、author, committer の情報を維持しながら再コミットしてやる。
echo 51b837157cc77b0540ef24487423c05b187f5a68 >commit
./recommit.sh --amend
あとは、ひたすら、
./reset.sh 次のコミットID
# Jupyter Notebook で .ipynb を再保存
./recommit.sh -a
の繰り返し
branch して merge してる部分は
13da1fc で
git checkout -b diff-traceable-ipynb2
とか枝を作ってから上記の作業を繰り返し、
fc430aa で merge は diff-traceable-ipynb に戻ってから
git merge diff-traceable-ipynb2
echo fc430aa9c9e8e48becda97adbfce7cb95b6c96c6 >commit
./recommit.sh --amend
のように、一旦 merge したところに、元の commit の情報を --amend で上書きしてた。
.ipynb のフォーマット変換が手動なのが地味に辛い所だが、あとは機械作業と言うか、非人間的作業だった。
こういう作業は RPA つぅかマクロ欲しい。
再構築した repos は以下
- GitHub / kou1okada / docx-researchmap
Network Graph 以下のように見える。
GitHub の revision の Network Graph は committer date で整列される。
committer date を元の commit に揃えたのはこのため。