[git] git submodules


git内でgitを管理する場合は、サブモジュールを使用します.


git付き親appにgit付きサブappを挿入する場合
> git submodule add {child-app-repo-url} # .gitmodules가 생성된다.
gitサブモジュール、git add、git pushを追加することで、以下の画像に示す青色タグのディレクトリが表示されます.青いフォントのディレクトリは、サブモジュールとして追加されたrepoです.( github )

parent-appをgitクローンする場合、サブモジュールは何ですか?


git cloneを使用する場合、デフォルトでは、サブモジュールはフォルダのみを作成し、ファイルを追跡しません.したがって、次のコマンドの再帰インポートを実行できます.
> git clone {parent-app-repo-url} # 이때는, submodules를 가져오지 않는다. 따라서 child-app directory는 비어있다.
> git submodule update --init # submodules의 파일을 가져온다.

> git pull --recurse-submodules # pull을 할때, submodules의 내용도 가져온다.
> git config submodule.recurse true # 항상 --recurse-submodules를 하기 위한 config

サブモジュールを変更する場合


サブモジュールは互いに影響しません.
たとえば、parent-appでchild-appディレクトリのいずれかを変更します.parent-appとchild-appのcommitはそれぞれの分野である.
(親appのcommit(変更)はchild-appに影響しませんが、child-appのcommit(変更)は親appに影響しません.)

テスト


  • git status-shortの後、サブモジュールのm変更が表示されます.ここで追加してコミットします(変更は+5と表示されます.下部のpackages/local-clientはサブモジュールなので含まれません).


  • サブモジュールの変更点にgitが追加されていないことがわかります.以下に示します.


  • 結論として、parent-appでchild-appを変更し、parent-appをコミットした場合、child-appはcommitに含まれません.(サブモジュールlocal-clientディレクトリに入り、Mと表示されます.)

  • parent-appでサブモジュールを変更する必要がある場合は、次の手順に従います。


    サブモジュールが常に同じであれば良いのですが、親アプリケーションに基づいてサブモジュールをカスタマイズする必要がある場合があります.
    この場合、サブモジュールのブランチを個別に作成して適用することができます.

  • parent-app-1およびparent-app-2でサブモジュールを使用しようとします.


  • main branchのサブモジュールを持ってきて書きます.


  • parent-app-1のサブモジュールの内容を変更する必要がある場合が発生しました.したがってparent-app-1にはサブモジュールのブランチが個別に作成される.(親アプリケーションでのみ変更が必要)

  • テスト


    次の端末イメージでは、parent-app-1はjbookディレクトリであり、サブモジュールはlocal-clientディレクトリである.

  • git checkout-b jbook-with-lernaを使用して、サブモジュールの新しいブランチを作成、変更、およびプッシュします.


  • サブモジュールのコミットが変更されたため、jbookもgit追加とコミットを行う必要があります.


  • githubで結果を表示します.
  • (変更前)サブモジュールのメインブランチ(変更後)サブモジュールのjbook-with-lernaブランチ

    Ref


    YouTube