例えば、何らかの理由でリポジトリのこのディレクトリ以下の部分だけ別リポジトリで管理したいな~!って場合のやり方。
履歴を引き継がなくてもいい場合はそのまま新しいリポジトリがある場所にコピーすれば良いんだけど、履歴も引き継ぎたい場合。
やり方は簡単で、特定のコマンドを 2 ~ 3 回叩けば終わる。
ということで、まずは、該当リポジトリを新たにクローンし、そこへ移動します。
新しくクローンする理由としては、該当コマンドは現在のリポジトリの履歴を書き換える動作を行うためですね
$ git clone https://github.com/mika-f/example-repository.git $ cd example-repository
移動後、以下のコマンドをインストールします。
Windows の場合は、次のようにしてインストール出来ます。
$ scoop install git-filter-repo
インストールが完了したら、分けたいサブディレクトリを引数に渡して、コマンドを実行します。
$ git filter-repo --path subdirectory
これで、今操作しているリポジトリには、 subdirectory
以下のファイルと、それに関連した履歴のみが残っています。
ただ、この場合、 subdirectory
以下を新しいリポジトリとして運用したいので、ディレクトリもなかったことにしたいはず。
ということで、次のコマンドを実行しましょう。
$ git filter-branch --subdirectory-filter subdirectory/ -- --all
わたしの場合、ある程度深い場所にあったので、このコマンドを上位ディレクトリから順番に実行することで、最終的に該当ディレクトリがルートへくるように修正した。 最後に、リモートリポジトリを新たに設定して、 push してあげれば、新しいリポジトリへの移行は完了です。お疲れさまでした。
$ git remote set-url origin https://github.com/mika-f/new-repository # そもそも無いケースは、普通に追加すれば良い $ git remote add origin https://github.com/mika-f/new-repository # あとは push するだけ $ git push origin HEAD