alfort's Blog

Linuxエンジニアのメモ

Gitのリポジトリに別のGitリポジトリを取り込む

 

Gitで管理されるリポジトリを、Gitで管理したまま、自分のプライベートGitリポジトリの下に置くためにはどうすればいいのか…と悩み、調べたのでメモ。

 

そもそもなんでなんでこんなことになったのか?

新しいマシンの環境を整えるとなると、今使っているマシンから、zsh, vim, emacs等の設定ファイルを一々コピーする必要がある。

これではとてもじゃないけれどコピーの漏れ、どこに何があるのか把握するのが煩雑である。

このため、様々なアプリケーションの設定ファイルを一つのディレクトリ(設定ファイルはたいてい"."から始まるのでdotfilesとかつけることが多い)に入れ、管理するというのがスマートらしい。

qiita.com

特に、このディレクトリをGitなんかで管理してしまえば、ネットに繋がったPCならgit clone して、ファイルにリンクを貼るだけですぐに環境が整えられる。

 

…が、zshの環境のためにpreztoを使っており、prezto自体もGitのリポジトリであるため、preztoはpreztoとして最新のものを簡単に取り込めるようにしつつ、dotfiles下に置くためにはどうすればいいのか…と悩んでしまったのでメモ。

 

git submoduleを使う

gitには自分のGitリポジトリに他のGitリポジトリを入れるためのコマンドが用意されており、git submodule ****(取り込みたいリポジトリのアドレス)と打つとサブモジュールとして管理されるようになる。

今回だと、自分のリポジトリ(dotfiles)に外部のGitリポジトリ(prezto)を取り込みたいので、自分のリポジトリの下でこんな感じのコマンドを打った。

git submodule add https://github.com/sorin-ionescu/prezto.git

これが終わってgit statusを打つと、.gitmodules, preztoがステージされた状態になっている。

後はこれをコミットしておくと、submoduleリポジトリのgit submodule addした時の最新の状態が取り込んだ側のブランチに保存される。

一応これで自分のGitリポジトリに他の人のGitリポジトリを入れることは出来る。

取り込んだリポジトリは一つのGitリポジトリとして機能しているので、それであれこれコミットしたり、Pullしたりすることも可能になっている。

上のリポジトリに更新を反映させたりするとかは、またあとで。