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の日記