2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-09-21

#はじめに

この記事は、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への追加をしてくれます。

参考

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?