Skip to main content
ドキュメントには� �繁に更新が� えられ、その都度公開されています。本ページの翻訳はま� 未完成な部分があることをご了承く� さい。最新の情� �については、英語のドキュメンテーションをご参照く� さい。本ページの翻訳に問題がある� �合はこちらまでご連絡く� さい。

このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2022-06-03. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてく� さい。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してく� さい。

Gitのサブツリーのマージについて

複数のプロジェクトを単一のリポジトリで管理する必要がある� �合、サブツリーマージを使ってすべての参照を扱うことができます。

About subtree merges

通常、サブツリーのマージはリポジトリ内にリポジトリを� �納するために使われます。 「サブリポジトリ」はメインのリポジトリのフォルダー内に� �納されます。

サブツリーマージは、例で説明するのが最も分かりやすいでしょう。 以下のように進めます:

  • プロジェクトを表すtestという空のリポジトリの作成。
  • Spoon-Knifeというもう1つのリポジトリをサブツリーとしてマージ。
  • testプロジェクトは、そのサブプロジェクトを同じリポジトリの一部であるかのように使う。
  • Spoon-Knifeからの更新をtest プロジェクトにフェッチする。

サブツリーマージのための空のリポジトリのセットアップ

  1. ターミナルターミナルGit Bashを開いてく� さい。
  2. 新しいディレクトリを作成し、そこに移動します。
    $ mkdir test
    $ cd test
  3. 新しい Git リポジトリを初期化します。
    $ git init
    > Initialized empty Git repository in /Users/octocat/tmp/test/.git/
  4. 新しいファイルを作成してコミットします。
    $ touch .gitignore
    $ git add .gitignore
    $ git commit -m "initial commit"
    > [main (root-commit) 3146c2a] initial commit
    >  0 files changed, 0 insertions(+), 0 deletions(-)
    >  create mode 100644 .gitignore

新しいリポジトリをサブツリーとして追� 

  1. 関心のある別個のプロジェクトを指す新しいリモート URL を追� します。

    $ git remote add -f spoon-knife https://github.com/octocat/Spoon-Knife.git
    > Updating spoon-knife
    > warning: no common commits
    > remote: Counting objects: 1732, done.
    > remote: Compressing objects: 100% (750/750), done.
    > remote: Total 1732 (delta 1086), reused 1558 (delta 967)
    > Receiving objects: 100% (1732/1732), 528.19 KiB | 621 KiB/s, done.
    > Resolving deltas: 100% (1086/1086), done.
    > From https://github.com/octocat/Spoon-Knife
    >  * [new branch]      main     -> Spoon-Knife/main
  2. Spoon-Knife プロジェクトをローカルの Git プロジェクトにマージします。 こうしてもローカルではファイルはまったく変更されませんが、Git は次のステップに備えることになります。

    Git 2.9 以降を使用している� �合:

    $ git merge -s ours --no-commit --allow-unrelated-histories spoon-knife/main
    > Automatic merge went well; stopped before committing as requested

    Git 2.8 以前を使用している� �合:

    $ git merge -s ours --no-commit spoon-knife/main
    > Automatic merge went well; stopped before committing as requested
  3. spoon-knife というディレクトリを新たに作成し、Spoon-Knife プロジェクトの Git の履歴をそこへコピーします。

    $ git read-tree --prefix=spoon-knife/ -u spoon-knife/main
  4. 変更をコミットして安全にします。

    $ git commit -m "Subtree merged in spoon-knife"
    > [main fe0ca25] Subtree merged in spoon-knife

ここでは 1 つのサブプロジェクトを追� した� けですが、Git リポジトリには任意の数のサブプロジェクトを取り込むことができます。

ヒント: 将来このリポジトリのクローンを新しく作成した� �合、追� したリモートは作成されません。 git remote add コマンドを使って、再び追� する必要があります。

更新および変更の同期

サブプロジェクトが追� された� �合、そのサブプロジェクトは上流の変更と自動的には同期されません。 以下のコマンドで、サブプロジェクトを更新する必要があります。

$ git pull -s subtree remotename branchname

上の例では、以下のようになるでしょう:

$ git pull -s subtree spoon-knife main

参考リンク