例えば、
というディレクトリ内のファイルを、
という新しいリポジトリで管理したくなった場合の移行方法です。
ここでは GitHub を使用することとし、まずは、新しい空のリポジトリ new
を GitHub 上で作成しておいてください。
下記のように、古いリポジトリの内容を書き換えて、新しいリポジトリとして扱う方法をとるので、必ず古いリポジトリのバックアップ (git clone
) をしてから作業してください。
### 作業用にリポジトリ old を取得
$ git clone --mirror https://github.com/maku77/old.git
### リポジトリ old の階層構造を書き換えて aaa 以下のファイルをルートに
$ cd old.git
$ git filter-branch -f --subdirectory-filter aaa -- --all
### 新しいリポジトリ new として push
$ git remote remove origin
$ git remote add origin https://github.com/maku77/new.git
$ git push --all (全ブランチを push)
$ git push --tags (全タグを push)
新しいリポジトリへ push が完了したら、clone して確認してみます。
$ git clone https://github.com/maku77/new.git
必要があれば、古いリポジトリ側から、対象ディレクトリに関するコミット履歴を削除します。
$ git clone https://github.com/maku77/old.git
$ cd old
$ git filter-branch --force --index-filter "git rm -rf --ignore-unmatch aaa/" --prune-empty -- --all
$ git push --force
.git-rewrite': Directory not empty
などのエラーが出た場合は、もう一度実行すると成功したりします。