commit 履歴を保持したままディレクトリ移動

# 概要
* `git mv` を行うと `git log -p ` 使用時に履歴を閲覧できない
* filter-branch で過去の commit 内でディレクトリを移動することで閲覧できる

```shell
git filter-branch -f --prune-empty --tree-filter '
dir="path/to/movedir"
if [ ! -e "$dir" ]
then
    mkdir -p "$dir"
    git ls-tree --name-only $GIT_COMMIT | xargs -I files mv files "$dir"
fi'
```

## git mv 使用時
```shell
$ git init
Initialized empty Git repository in /private/tmp/git-log/.git/

# README.md 作成, 編集の commit 作成
$ touch README.md
$ git add README.md
$ git commit -m "Initial Commit"
[master (root-commit) 0cb6fee] Initial Commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

$ echo "git log の確認" >> README.md
$ git add README.md
$ git commit -m "README.md 編集"
[master 2f6c8a2] README.md 編集
 1 file changed, 1 insertion(+)
```

###### `git log` を確認します
```shell
$ git log -p README.md
commit 2f6c8a27507e9838485412cf8499cdd1632c6af0 (HEAD -> master)
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:09:00 2019 +0900

    README.md 編集

diff --git a/README.md b/README.md
index e69de29..7923e00 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+git log の確認

commit 0cb6fee47f54cb31ef07f4ad5a9b748306661aa9
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:08:26 2019 +0900

    Initial Commit

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e69de29
```

###### README.md を移動した後に `git log` を確認してみます
```shell
# README.md の移動
$ mkdir foo
$ git mv README.md foo/README.md
$ git commit -m "README.md 移動"
[master c3bbb6d] README.md 移動
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename README.md => foo/README.md (100%)

$  git log -p foo/README.md
commit c3bbb6d43f95f9500ec7255d3e031521a87937ae (HEAD -> master)
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:11:40 2019 +0900

    README.md 移動

diff --git a/foo/README.md b/foo/README.md
new file mode 100644
index 0000000..7923e00
--- /dev/null
+++ b/foo/README.md
@@ -0,0 +1 @@
+git log の確認
```

* `diff --git a/foo/README.md b/foo/README.md` コマンドを発行しているようなので過去の履歴が見れません。

## git filter-branch 使用時

###### README.md の移動前の commit から。
```shell
$ git log
commit c3bbb6d43f95f9500ec7255d3e031521a87937ae (HEAD -> master)
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:11:40 2019 +0900

    README.md 移動

commit 2f6c8a27507e9838485412cf8499cdd1632c6af0
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:09:00 2019 +0900

    README.md 編集

commit 0cb6fee47f54cb31ef07f4ad5a9b748306661aa9
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:08:26 2019 +0900

    Initial Commit

$ git checkout -b filter-branch 2f6c8a27507e9838485412cf8499cdd1632c6af0
Switched to a new branch 'use-filter-branch'
```


###### filter-branch で移動後 `git log` で確認
```shell
$ git filter-branch -f --prune-empty --tree-filter '
dir="foo"
if [ ! -e "$dir" ]
then
    mkdir -p "$dir"
    git ls-tree --name-only $GIT_COMMIT | xargs -I files mv files "$dir"
fi'

$ git log -p foo/README.md
commit 3ae7d6d4ce007282e189b3ed5b56303990eca082 (HEAD -> use-filter-branch)
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:09:00 2019 +0900

    README.md 編集

diff --git a/foo/README.md b/foo/README.md
index e69de29..7923e00 100644
--- a/foo/README.md
+++ b/foo/README.md
@@ -0,0 +1 @@
+git log の確認

commit 867f6f0d570bad36cd0deaae073ea67f690d1cb0
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:08:26 2019 +0900

    Initial Commit

diff --git a/foo/README.md b/foo/README.md
new file mode 100644
index 0000000..e69de29
```

## まとめ
* 普段 GUI ツールで git 操作を行っているので `git mv`と`git log`の挙動を初めて知った。