[Git] git リポジトリを歴史も含めて親に取り込んでまとめる

memo.

[markdown]
こちらを拝見して、どうなるのか試したメモ。

> * [Githubさん,ごめんなさい!複数リポジトリを一つにまとめる方法 – Qiita](http://qiita.com/awakia/items/6233eeac21fb895fa58d)
>
> 複数のリポジトリがあった時に、それをまとめた親レポジトリを作り、各レポジトリをサブディレクトリとしてまとめてしまう方法。
>
> ファイルとして保存するだけじゃなく、ちゃんとコミットHistoryも保存される。一つにまとめたものを後で切り出すこともできる。

以前書いた Gist を親リポジトリに持ってきてみることにします。

## 親にしたいリポジトリを作成する

ここでは既にあるので移動します。

“`prettyprinted
% cd VMs/
“`

## 別ブランチにもってくる

Gist という名前で、親リポジトリにまとめたい gist を remote 登録。

“`prettyprinted
% git remote add Gist https://gist.github.com/6694891.git
% git remote -v
Gist https://gist.github.com/6694891.git (fetch)
Gist https://gist.github.com/6694891.git (push)
origin git@github.com:DriftwoodJP/VMs.git (fetch)
origin git@github.com:DriftwoodJP/VMs.git (push)
“`

fetch して新しいブランチを作成してます。

“`prettyprinted
% git fetch Gist
warning: no common commits
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 18 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (18/18), done.
From https://gist.github.com/6694891
* [new branch] master -> Gist/master
% git checkout -b Gist Gist/master
Branch Gist set up to track remote branch master from Gist.
Switched to a new branch ‘Gist’
% git branch -a
* Gist
master
remotes/Gist/master
remotes/origin/master
“`

## git filter-branch

ここがマジックだった。

“`prettyprinted
% git filter-branch -f –tree-filter “mkdir Gist && git mv -k {,.[\!.],..[\!.]}* Gist/”
Rewrite 7e0a09da27c3e6ce563ee5bc7e2b360e0b765101 (6/6)
Ref ‘refs/heads/Gist’ was rewritten
“`

チェックアウトして、例えば master に merge すればよいよう。

“`prettyprinted
% git checkout master
Switched to branch ‘master’
Your branch is up-to-date with ‘origin/master’.
% git merge Gist
Merge made by the ‘recursive’ strategy.
Gist/Vagrantfile | 13 ++++++++
Gist/provision.sh | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 103 insertions(+)
create mode 100644 Gist/Vagrantfile
create mode 100644 Gist/provision.sh
“`

これで、ファイルだけでなく歴史も親にまとっていました。

以下で一旦戻しました。

“`prettyprinted
% git reset –hard HEAD~
HEAD is now at effb75e typo
“`

理解できていないけれども、ログとして残しておきます。
[/markdown]