Gitで管理されるリポジトリを、Gitで管理したまま、自分のプライベートGitリポジトリの下に置くためにはどうすればいいのか…と悩み、調べたのでメモ。
そもそもなんでなんでこんなことになったのか?
新しいマシンの環境を整えるとなると、今使っているマシンから、zsh, vim, emacs等の設定ファイルを一々コピーする必要がある。
これではとてもじゃないけれどコピーの漏れ、どこに何があるのか把握するのが煩雑である。
このため、様々なアプリケーションの設定ファイルを一つのディレクトリ(設定ファイルはたいてい"."から始まるのでdotfilesとかつけることが多い)に入れ、管理するというのがスマートらしい。
特に、このディレクトリを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したりすることも可能になっている。
上のリポジトリに更新を反映させたりするとかは、またあとで。