読者です 読者をやめる 読者になる 読者になる

DRYな備忘録

Don't Repeat Yourself.

v2とか作ってる別リポジトリをv1のリポジトリにマージっぽいことしたい

なんかv2っぽいものをゼロスクラッチで別リポジトリに書いてたけど、v1のリポジトリにわりとスターついてるし、page viewもあるのでゼロスクラッチだけど、最終的にはv1で、もちろんコミットログを上乗せした形で公開したいな、と。

参考

方針

  1. repo_v2を、repo_v1のリモートに、適当な名前でpushする
  2. repo_v2相当のブランチを、ローカルのrepo_v1のrepoでfetchする
  3. repo_v1でv2本命なブランチをつくり、すべての(.git以外の)ファイルを削除したコミットをする
  4. git logで出てくるコミットのリストを、このブランチにcherry-pickで流し込む

ログ

ローカルのv2リポジトリkcwidgetという)

% git remote -v
origin  git@github.com:otiai10/kcwidget.git (fetch)
origin  git@github.com:otiai10/kcwidget.git (push)

ここに、v1リポジトリkanColleWidgetという)をremoteとして登録する

% git remote add v1remote git@github.com:otiai10/kanColleWidget.git

v2でのコミットログをv1リポジトリのリモートにpushする

% git push v1remote develop:wip/v2

つぎに、ローカルのv1リポジトリで、今まさにリモートのv1リポジトリにpushされたv2相当のブランチをfetchする

% cd ~/proj/chrome/kanColleWidget
% git fetch origin
remote: Counting objects: 367, done.
remote: Compressing objects: 100% (297/297), done.
remote: Total 367 (delta 131), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (367/367), 58.80 KiB | 0 bytes/s, done.
Resolving deltas: 100% (131/131), done.
From github.com:otiai10/kanColleWidget
 * [new branch]      wip/v2 -> origin/wip/v2

これでv2リポジトリで書いたコミットたちがv1リポジトリで参照できるようになったので、あとは順次古いものからcherry-pickしていけばよい。

まずは、v2のコミットたちを迎えるべく、土地をゼロに均す(しかし.gitは保持)コミットをしとく。

% git checkout -b v2/master
% find . -mindepth 1 -maxdepth 1 ! -name ".git" -delete
% git commit -m "(just like) starting over~♪"

いよいよ、v2相当ブランチから、cherry-pickしていく

% git log --pretty=%H --reverse origin/wip/v2 | xargs git cherry-pick

で、最後の仕上げ

% git push origin v2/master

これで、さっきまで別リポジトリで開発していたv2のコミットが、v1のコミットの上に積み重なる形で、v1リポジトリのブランチとして生まれ変わった。 (需要なさそう)

DRYな備忘録として