【手順】git subtreeコマンドの使い方


Git subtreeとは

外部のリポジトリを現在のリポジトリに取り込むことができる。

Git上のプロジェクトを他のプロジェクトでも使用したいときに利用する。
Git subtreeコマンドは、取り込んだリポジトリを編集することで、取り込み先のリポジトリも編集可能にする。

Git subtreeとGit submodule

Git subtree

→外部リポジトリを現在のリポジトリのものとして取り込み、手を加えていくときに使用する。

Git submodule

→外部リポジトリを現在のリポジトリの外のものとして取り込み、今後編集しない時に使用する。

Git subtreeの使い方

サブディレクトリへの登録方法

前提

Gitで新プロジェクトを作成済み。
以下の作業は、新プロジェクト内で行うこと。

手順

1.取り込みたいリポジトリを、外部リポジトリに登録する。

# git remote add <任意の名前> <取り込みたいリポジトリのURL(SSH)>
例
# git remote add subtree-test [email protected]:subtree-test.git

2.外部リポジトリに登録できているか確認する。

# git remote
<任意の名前>があるか確認。

3.外部リポジトリに登録したものをサブディレクトリに登録する。

# git subtree add --prefix=<任意のディレクトリ名> --suquash <1.で登録した任意の名前> <任意のブランチ名>
例
# git subtree add --prefix=roles/subtree-test --squash subtree-test master

4.サブディレクトリに反映されているか確認する。

# ls -al roles
rolesディレクトリ内に、subtree-testディレクトリとその中身があることを確認する。

5.コミットする。

# git commit -m "任意のコメント"

6.新プロジェクトに反映させる。

# git push origin master

7.ブラウザ上で、反映されたか確認する。

取り込み先のプロジェクトの[Repository]を押下し、3.で登録した<任意のディレクトリ名>があることを確認する。

取り込み先(子)を編集し、取り込み元(親)に反映する方法。

前提

  • 取り込み先(子)での変更を取り込み元(親)に反映させたい。
  • 取り込み先(子)を編集済み
  • サブディレクトリへの登録済み

コマンド

# git subtree push --prefix=<親にpushしたいディレクトリ名> <外部リポジトリ名> <push先ブランチ名>
<親にpushしたいディレクトリ名> → git subtree add した際に指定したディレクトリ名
<外部リポジトリ名>              → git remote add した際に指定した外部リポジトリ名
<push先ブランチ名>            → 親リポジトリのブランチ名
例
# git subtree add --prefix=roles --squash subtree-test master

取り込み元(親)を編集し、取り込み先(子)に反映する方法。

前提

  • 取り込み元(親)の変更を取り込み先(子)に反映させたい
  • 取り込み先(子)を編集済み
  • サブディレクトリへの登録済み

コマンド

# git subtree pull --prefix=<子のpullしたいディレクトリ名> --squash <外部リポジトリ名> <pull先ブランチ名>
<子のpullしたいディレクトリ名>  → git subtree add した際に指定したディレクトリ名
<外部リポジトリ名>             → git remote add した際に指定した外部リポジトリ名
<pull先ブランチ名>            → 親リポジトリのブランチ名
例
# git subtree pull --prefix=roles --squash subtree-test master