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級アニメだと思いました。

記事の一覧 >

関連するかもエントリー

2011-02-07
git-ssh-create で自分用レポジトリを ssh 越しのサーバにかんたんに作る自分用にプライベートなレポジトリをどっかのサーバに置く時に、毎回サーバに ssh で入って bare レポジトリ作って、というのがめんどくさいので ssh 越しにコマンド投げてレポジトリを作っ...
git-ssh-create で自分用レポジトリを ssh 越しのサーバにかんたんに作る自分用にプライベートなレポジトリをどっかのサーバに置...
git-new-workdir が便利
git-new-workdir が便利作業中、別のベクトルの作業するからブランチ切り替えじゃ無くてもういっこワーキングディレクトリを作って作業したい!って思った経験ありませんか?みなさん n 回ぐらいあるんじゃないでしょか。そんなときいちいち clone して…などしなくても g...
git-new-workdir が便利作業中、別のベクトルの作業するからブランチ切り替えじゃ無くてもういっこワーキングディレクトリを作って作...
submodule もちゃんと git grep する
submodule もちゃんと git grep するsubmodule も git grep したいなー git submodule foreach 'git grep' だと path が submodule のディレクトリからのパスになっちゃって嫌だなー、とずっと思ってたん...
submodule もちゃんと git grep するsubmodule も git grep したいなー git submodule fo...