既存のリポジトリの一部から新しいリポジトリを作る

dotfilesというリポジトリを立てて各種設定ファイルを管理しているのだけど、その中にこまごまとしたスクリプトも入れている。けど、これは別にして管理したほうがいい気がしてきた。

そこで、 scripts というリポジトリを立てて、 dotfiles/bin の中身をそちらに移そうとおもった。いままでのコミットを持ったまま移動したかったので、 git filter-branch をつかうことにした。

dotfiles を clone してくる

% cd ~
% git clone git@github.com:aereal/dotfiles.git scripts

git-filter-branch であたらしくリポジトリのrootを決める

% cd ~/scripts
% git filter-branch --subdirectory-filter bin/

remote.origin.url をあたらしい GitHub のリポジトリへ向ける

% git config remote.origin.url git@github.com:aereal/scripts.git

git push

% git push origin master

これで

~/dotfiles/bin の中身があたらしく独立したGitのリポジトリになった。

なぜか zsh の補完で filter-branch が出てこなかったので使えるかどうかわからなかったけど、問題なく使えた。