対象
- 前回からちょっとステップアップしたい
- なんだかちょっとgitに慣れてきた気がする
- フォルダで管理していたファイルたちを別リポジトリとして抽出したい
という人が対象です
目的
とりあえずで適当にコミットしていたリポジトリから特定のフォルダを、コミット履歴そのままに別リポジトリに切り分ける
注意事項
- 元となるリポジトリの規模によっては時間がかかるので、時間に余裕があるときにやるのがいいと思います。
- 元となるリポジトリは一切変更されませんが、最初は念のためcloneしたリポジトリでの実行をおすすめします
手順
gitでまるまる管理してる /c/repos/Toriaezu/
フォルダ(抽出元リポジトリ)から、
source
フォルダ(/c/repos/Toriaezu/source/
)を、
/c/repos/source/
レポジトリへ抽出する場合
※パス形式は Windows版のSource Treeについてくるシェル(MINGW)の形式になっているので適宜読み変えてください
- まっさらなbareリポジトリを準備する。(抽出先となるリポジトリ)
-
git init --bare
を/c/repos/source/
で実行。
-
-
/c/repos/Toriaezu/
で下記のコマンドを実行するgit subtree push /c/repos/source/ master --prefix source/
- (git subtree push
抽出先リポジトリ
抽出元リポジトリのpushしたいブランチ
--prefix抽出するフォルダ
)
- /c/repos/source/ をcloneし抽出されていることを確認
まとめ
- とりあえず一つのフォルダをまるまるgitで管理していても、あとから必要なフォルダだけ抽出するのはびっくりするほど簡単
- もしかしたらあとで抽出したくなるかも、と思ったら、フォルダ構成だけしっかり管理しておけば大丈夫
- 上記の事さえおさえておけば、もうなにもこわくない。