Help us understand the problem. What is going on with this article?

複数のリポジトリを一つの大きなリポジトリにまとめる方法

はじめに

この記事は、Dockerでコンテナごとにリポジトリ分けたいと思ったときに見つけた方法を備忘録として残したものです!
今回大きなリポジトリにまとめる方法としてこのサイトを参考にして、git submoduleを使うことにしました!

git submodule とは

あるリポジトリ1を別のリポジトリ2の一部として使いたい。だけど、リポジトリ1は個別で管理したいという問題を解決できるGitの機能です!

具体的には

外部の git リポジトリを、自分の git リポジトリのサブディレクトリとして登録し、特定の commit を参照する仕組み

です。

使ってみる

準備

  1. 大元となるgit_submodule_practiceリポジトリとサブリポジトリであるsub_repositoryをGitHub上で作成。

  2. git_submodule_practiceをローカルにcloneして、git_submodule_practice内にsub_repositoryをcloneする。

  3. 各ディレクトリ配下にREADME.mdを作成し、そのディレクトリにcommitしておく

今のディレクトリ構造です。

git_submodule_practice
.
├── README.md
├── .git
└── sub_repository
    ├── .git
    └── README.md

この状態でgit_submodule_practiceディレクトリでgit statusをしてみます。

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    sub_repository/

nothing added to commit but untracked files present (use "git add" to track)

sub_repository配下がgitにtrackされています。この状態だとsub_repository内の差分もgit_submodule_practiceで管理されてしまいます。

submodule化する

submodule化するのはこのコマンド!git_submodule_practice直下で実行してください。後ろのurlはcloneするときのurlです。sshでも問題ないです。

$ git submodule add https://github.com/{GitHubアカウント 名}/sub_repository.git
Adding existing repo at 'sub_repository' to the index

結果として、以下の文字

'sub_repository' does not have a commit checked out

が出てきたらsub_repository内でREADME.mdをcommitしましょう。submoduleはcommitを参照しているため、一つもcommitがないとsubmodule化ができません。

今のディレクトリ構造です。

git_submodule_practice
.
├── README.md
├── .git
├── .gitmodules
└── sub_repository
    ├── .git
    └── README.md

.gitmodulesというファイルができましたね?そのファイルをのぞいてみると以下のようになります。ここにsubmoduleを追跡しないようにigunoreを記載しましょう!

.gitmodules
[submodule "sub_repository"]
        path = sub_repository
        url = https://github.com/{GitHubアカウント 名}/sub_repository.git
        ignore = all    //追記

これで、sub_repositoryはsubmodule化され、変更は大元となるgit_submodule_practiceに反映されなくなりました!!

追記

大元のgit_submodule_practiceのディレクトリにcloneする前であれば、git submodule add https://github.com/{GitHubアカウント 名}/sub_repository.gitgit clone + submoduleへの追加をしてくれます。

参考

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away