A Day in the Life

2010-11-08

git の特定ディレクトリをコミットログ等込みで別プロジェクトへ移動

git のプロジェクトの特定ディレクトリ以下を、誰がどうコミットしたかログ等込みで、別のプロジェクトの特定ディレクトリに移動したい。の方法が解ったのでメモ。git むつかしいです…。

まず特定ディレクトリを移動したいレポジトリで作業。がっつりコミットを書き換えるので適当に clone して新しく作っておくと良いです。

git filter-branch -f --subdirectory-filter my/dir HEAD

git filter-branch で特定ディレクトリをルートディレクトリに持ってくる。このとき、指定したディレクトリ以外のコミットは全部消える。このままでもいいけど、移動先のプロジェクトの my/dir に持ってきたい場合は git mv しとく。(git mv じゃなくて filter-branch 時にどうにかできそうなんだけど解らなかった…)

mkdir -p my/dir
for i in `ls`;do git mv $i my/dir; done
git commit

次に別のプロジェクトのディレクトリで、移動元のレポジトリから merge する。

# さっき filter-branch したプロジェクト
git remote add export_project file:///home/oreore/git/export_project 
git fetch export_project
git merge export_project/master

で完了!これで誰がどうコミットしたか解るので git blame しても安心!git filter-branch ずっと知らなかったです…。

タイトル変更

permalink だと良い感じのタイトルになりますね。

"タイトル変更 - なのです!……って、なんでですか〜 - subtech"

最初ダメアニメだと思ったけど、見れば見るほど味がしみてくれる良作B級アニメだと思いました。