@Greduan と私のコメントを拡張します。
を使用して、ローカル git リポジトリをサブモジュールとして追加できますgit submodule add <repo> <path>
。
Git SCM のドキュメントによるとsubmodule add
:
これには少なくとも 1 つの引数が必要です: <repository>
. オプションの引数<path>
は、複製されたサブモジュールがスーパープロジェクトに存在するための相対位置です。
TL;DR:<repo>
と<path>
が同じ場合、子リポジトリを親リポジトリに複製することを避けることができます
さて、例として(これが実際にどのように機能するかを知りたいと思っていたので、試して結果を投稿しようと思いました):
./
に親レポがあり、 に子レポがあるとしましょう./some/folder/child-repo
。
次の方法で、不必要にクローンを作成せずにサブモジュールを追加できます。
git submodule add ./some/folder/child-repo ./some/folder/child-repo #same location
child-repo
これにより、現在の場所にサブモジュールとして追加されます。
Git は次のようなものを出力します: Adding existing repo at 'some/folder/child-repo' to the index
.
を実行するgit status
と、コミットする準備が整った 2 つの新しいファイルが表示されます。
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: .gitmodules
# new file: some/folder/child-repo
#
.gitmodules
はモジュールを説明するファイルで、もう 1 つのファイルは子リポジトリ表現です。
サブモジュールを親リポジトリにコミットします。git commit -m 'add child-repo as submodule'
この時点で、子リポジトリで行ったコミットは、次のように親リポジトリに表示されます。
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: some/folder/child-repo (new commits)
#
その後、実行git submodule update
して親リポジトリを更新できます。これで、不要な重複や余分なコミットはありません:)
警告: 親で実行した後に子リポジトリを操作する必要がある場合、子リポジトリが切り離された HEAD状態submodule update
になることがわかります。これは、手動更新セクションに記載されています。git submodule
git checkout master
子リポジトリで(または作業しているブランチで)修正できます。