かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Git 別のリポジトリを履歴を残したまま取り込みたい

Gitで別々に作ってたリポジトリをコミットログを残したまま1つにしてしまいたい時のめも。

例えばkankore_repokuchikukan_repoという2つのリポジトリが別々にあったとします。
これらを別々のリポジトリで管理するのが大変になってきたのでkankore_repo内の'destroyer'ディレクトリに kuchikukan_repoで管理していた全てをコミットログを残したまま入れてしまいたい。そんな感じです。

図で書くと

/kankore  # kankore_repo リポジトリのあるディレクトリ
    |--- .git
/kuchikukan  # kuchikukan_repo リポジトリのあるディレクトリ
    |--- .git

これを ↓ のような感じにしたいのです!

/kankore  # kankore_repo リポジトリのあるディレクトリ
    |--- .git
    |--- /destroyer # kuchikukan_repo リポジトリの内容をこのディレクトリ内に移したい

1. 下準備

kuchikukan_repoを入れるディレクトリがなかったら作っておきます。

# kankore_repo リポジトリのあるディレクトリに移動
cd ~/kankore
# destroyer ディレクトリを作成
mkdir destroyer
# 空 destroyer ディレクトリをgitに追加できるように.gitkeepを作成
touch destroyer/.gitkeep
# コミットさん
git add -A destroyer
git commit -m "create destroyer dir"

 

2. 取り込むリポジトリをリモートリポジトリとして追加する

取り込みたいkuchikukan_repokankore_repoのリモートリポジトリに追加します。

# kankore_repo リポジトリのあるディレクトリに移動
cd ~/kankore
# kuchikukan_repo をリポジトリ名 kuchikukan とてリモートリポジトリに追加
# git remote add <リポジトリ名> <リポジトリのあるURL>
git remote add kuchikukan ~/kuchikukan

※ 今回はkuchikukan_repoリポジトリがローカル環境の~/kuchikukanディレクトリ内にある想定です。 GitHubやBitbucketなどにある場合はそのURLを指定すれば大丈夫だと思います。

 

3. ディレクトリを指定して取り込む

destroyerディレクトリにkuchikukan_repoの内容を取り込みます。

# kankore_repo リポジトリのあるディレクトリに移動
cd ~/kankore
# ディレクトリを指定して kuchikukan_repo の master ブランチを取り込んでマージ
git merge -X subtree=destroyer kuchikukan_repo/master

これでkuchikukan_repoで管理していた駆逐艦ちゃんの情報がkankoreリポジトリdestroyerディレクトリにコミットログを保持したまま移すことができました!やったね。
直ぐにマージしたくないとかだとこの部分が少し違う手順になるかと思います。(しっかり調べてませんスミマセン…

 


[参考]