リポジトリ内のサブディレクトリを別のリモートリポジトリにする
GitはSVNのようにサブディレクトリのみを取得するということができません。(階層維持される)
本記事ではローカル環境で、ひとつのリモートリポジトリ(中央リポジトリ)に複数のプロジェクト(サブディレクトリ)を登録してしまった後、サブディレクトリを別のリモートリポジトリ(中央リポジトリ)に移動させる(複製する)方法を解説します。
上記、subdir
をprj1sub.git
というBareリポジトリのルートに移動させます。
1.TortoiseGitでの操作
まず、TortoiseGitを使って操作します。
- 新しく中央リポジトリを作成したいフォルダで右クリック
- Git クローン(複製)...
- ダイアログに以下を設定
- URL:に複製したいディレクトリを含む中央リポジトリのパス
- ディレクトリに新しい中央リポジトリのパス
- Bareリポジトリにクローンをチェック
この時点でprj1sub.git
の内容は元のリポジトリと同じです。
2.Git Bashでの操作
次にGit Bashを使ってprj1sub.git
を操作します。
- 複製先のフォルダ(
prj1sub.git
)で右クリック - Git Bash Here
- Git Bashで上で以下を実行
git filter-branch --subdirectory-filter [サブディレクトリのパス] HEAD
今回の場合だと、
git filter-branch --subdirectory-filter subdir HEAD
これでprj1sub.git
はサブディレクト(subdir
)の内容がトップになります。
右クリックメニューにGit Bashが無い場合は、スタートメニューからGit Bashを起動し、複製先のフォルダまで移動してください。
私はGitインストールフォルダの下にremoteフォルダを作成し、そこにリモートリポジトリを配置していたので、以下のように移動しました。
cd /
cd remote
cd prj1sub.git