itochin2の日記(仮)

主に備忘録。Perl、MySQL、Unity、開発管理などについて情報を残していきたい。

gitで階層を維持したままディレクトリ構成を変える

PC向けに作ってたHTMLをスマホ対応するからディレクトリ分けて管理したい
ってなった時にやったこと。

[Before]

tmpl/index.tt
tmpl/404.tt
tmpl/500.tt
tmpl/member/history.tt
tmpl/item/detail.tt
tmpl/item/list.tt
:

[After]

tmpl/pc/index.tt
tmpl/pc/404.tt
tmpl/pc/500.tt
tmpl/pc/member/history.tt
tmpl/pc/item/detail.tt
tmpl/pc/item/list.tt
:
tmpl/m/index.tt
tmpl/m/404.tt
tmpl/m/500.tt
tmpl/m/member/history.tt
tmpl/m/item/detail.tt
tmpl/m/item/list.tt
:

再帰的に実行したかったので、findで取得したパスを加工してgit mvに渡してーとか
考えたけど、そんなスクリプト職人のようなことをしなくても、
以下のように簡潔なコマンドを叩いていくだけで実現できた。

$ mkdir .pc
$ cp -pr * .pc
$ git rm -r *
$ mv .pc pc
$ cp -pr pc m
$ git add pc
$ git add m

.から始まるファイルは*に含まれないという特性を利用しているのがポイント。
git mv はrmとaddをまとめただけなので、これでよし。

参考

ここをみて思いついた。
clmemo@aka: カレント・ディレクトリー内の全てのファイルを新しい下位ディレクトリーに簡単に移動させる 〜 dot dir を使って

あと、別の方法もあったけど、filter-branch機能は履歴を抹殺するっていうのが怖そうだったのでやめた。

Gitリポジトリのディレクトリ構成を変更する - ekreaの日記