Git - 特定のフォルダを新しいリポジトリに分割する

filter-branch を使用すると履歴を維持したまま、特定のフォルダ内のみを含むリポジトリを作成できます。

特定のフォルダを新しいリポジトリに分割する手順

  1. 対象のリポジトリをクローンします。
    git clone "リポジトリのアドレス"
    
  2. カレントフォルダ(ディレクトリ)をクローンしたリポジトリに移動します。
    cd "cloneしたリポジトリのパス"
    
  3. 対象フォルダのあるブランチをチェックアウトします。
    git checkout -b "ローカルブランチ名" "origin/リモートのブランチ名"
    
  4. 対象フォルダ以外のファイルと履歴を削除します。
    git filter-branch --prune-empty --subdirectory-filter "./フォルダのパス" "対象のブランチ名"
    
    • 指定したフォルダ以外のファイルと履歴が削除されます。
    • 指定したフォルダの中身がリポジトリのルートへ移動されます。
    • ここで指定するフォルダのパスは、リポジトリのルートからの相対パスです。
  5. 重要 リモートリポジトリを変更します。

    変更する場合

    git remote set-url origin "新しいリモートリポジトリのアドレス"
    

    削除する場合

    git remote rm origin
    

    重要

    次のコマンドでリモートリポジトリのアドレスが確認できます。必ず変更されていることを確認してください。変更されていない状態でプッシュをするとオリジナルのリポジトリ内容が失われてしまいます。

    git remote -v
    
  6. 新しいリモートリポジトリにプッシュします。
    git push -u origin "ブランチ名"
    

実行例

検証環境

関連ページ