作業用リポジトリが増えてきたので、1つにまとめました。その際に git 履歴を残したまま移行したので、その方法を解説します。
やりたいことのイメージ
.
├── 移行したいリポジトリ (base_repo)
└── 移行先のリポジトリ (target_repo)
└── /target <- ここに「移行したいリポジトリ」を移行する
※ ただしこの場合ディレクトリの階層が異なるため、移行したいリポジトリの履歴と移行先のリポジトリの履歴が合わなくなります。
そのため、全体の階層を含めた履歴ではなく、ファイルの履歴だけの変更だけ取っておきたい目的と割り切って使用した方が良いです。
使用したバージョン
- git 2.38.1
手順
1. 移行先のリポジトリに移行用のディレクトリを作成する
移行したいリポジトリのルートディレクトリで移行用のディレクトリを作成します。(コミットに反映されるように .gitkeep を置いています。)
|
|
2. 移行先のローカルリポジトリに移行したいリモートリポジトリ を登録する
移行したいリモートリポジトリからコミット履歴を fetch するために、移行したいリモートリポジトリを登録します。
|
|
3. 登録したリポジトリのコミット履歴を移行先のローカルリポジトリに反映する
先ほど登録したリポジトリを使ってコミット履歴を fetch し、移行先のリポジトリに反映します。
|
|
fetch できたことを確認して移行したいディレクトリに merge します。
|
|
今回は移行したいリポジトリが移行先のリポジトリ内のディレクトリに移動させるため、エラー無視して反映できるように --allow-unrelated-histories が必要です。
By default, git merge command refuses to merge histories that do not share a common ancestor. This option can be used to override this safety when merging histories of two projects that started their lives independently. As that is a very rare occasion, no configuration variable to enable this by default exists or will be added.
ref. –allow-unrelated-histories