gitaarik/git_submodules.md (日本語)

0 Comments

なぜサブモジュールなのですか?

Gitでは、リポジトリにサブモジュールを追加できます。 これは基本的にメインリポジトリに埋め込まれたarepositoryです。 これは非常に有用です。 サブモジュールを使用するいくつかの利点:

  • コードを異なるリポジトリに分けることができます。

    大きなコンポーネントを持つコードベースがある場合は、acomponentをサブモジュールにすることができます。 このようにして、gitログがクリーンになります(コミットは特定のコンポーネントに固有です)。,

  • サブモジュールを複数のリポジトリに追加できます。

    同じコンポーネントを共有する複数のリポジトリがある場合に便利です。 このアプローチを使用すると、サブモジュールとして追加されたすべてのリポジトリ内のthosecomponentsを簡単に更新できます。これは、コードをtherepositoriesにコピーして貼り付けるよりもはるかに便利です。

Basics

Gitでサブモジュールを追加するときは、thesubmoduleのコードをメインリポジトリに追加しないで、メインリポジトリに追加されたthesubmoduleに関する情報のみを追加します。, この情報は、サブモジュールが指しているコミットを記述します。 このようにして、サブモジュール”srepository”が更新されると、サブモジュールのコードは自動的に更新されません。 これは、あなたのコードがサブモジュールの最新のコミットで動作しない可能性があるため、unexpectedbehaviourを防止するため、これは良いことです。,

サブモジュールの追加

次のようにリポジトリにサブモジュールを追加できます。

デフォルト設定では、awesome_submodule.gitリポジトリのコードをpath_to_awesome_submoduleディレクトリにチェックアウトし、このサブモジュールについての情報をメインリポジトリに追加します。これは、このコマンドが実行された時点でのデフォルトブランチ(通常はmasterブランチ)の現在のコミットになります。,

この操作の後、git statusを実行すると、Changes to be committedリスト:.gitmodulesファイルとサブモジュールへのパスが表示されます。 これらのファイ

サブモジュールのコードの取得

ある人が新しいサブモジュールを作成した場合、チーム内の他の人がこのサブモジュールを開始する必要があります。 まず、サブモジュールに関する情報を取得する必要がありますが、これは通常のgit pullによって取得されます。, 新しいサブモジュールがある場合は、git pullの出力に表示されます。 次に、それらを開始する必要があります:

これにより、サブモジュールからすべてのコードがプルされ、それが設定されているディレ

サブモジュールを使用するリポジトリを複製した場合は、このコマンドを実行してサブモジュールのコードを取得する必要があります。 これは自動的にgit cloneによって行われません。

サブモジュールでの更新のプッシュ

サブモジュールは単なる別のリポジトリです。, 変更を行いたい場合は、このリポジトリで変更を行い、通常のGitリポジトリのようにプッシュする必要があります(サブモジュールのディレクトリでgitコマンドを実行するだけです)。 ただし、mainrepositoryにサブモジュールのリポジトリを更新したことを知らせ、サブモジュールのリポジトリの最新のコミットを使用させる必要があります。 サブモジュール内で新しいコミットを行うと、メインリポジトリは古いコミットを指し示すからです。,

したがって、メインリポジトリでもこれらの変更を行いたい場合は、メインリポジトリにthesubmoduleの最新のコミットを使用するように指示する必要があ 今どのようにこれを行うのですか?

だから、あなたはサブモジュールのリポジトリに変更を加え、そのリポジトリにそれらをコミットしました。 Mainrepositoryでgit statusを実行すると、サブモジュールがリストChanges not staged for commitにあり、テキスト(modified content)その背後にあります。このコードをサブモジュールをチェックアウトにadifferentコミットのリポジトリを指す。, メインリポジトリがこの新しいコミットを指している場合は、git addでこの変更を追加してから、コミットしてプッシュします。

サブモジュールを最新の状態に保つ

誰かがサブモジュールを更新した場合、他のチームメンバーはサブモジュールのコードを更新する必要があります。 これは、git pullによって自動的に行われるわけではありません。git pullサブモジュールが別のコミットを指している情報のみを取得するためですが、サブモジュールのコードは更新されません。, サブモジュールのコードを更新するには、次を実行する必要があります。

このコマンドを実行しないとどうなりますか?

このコマンドを実行しない場合、サブモジュールのコードは古いコミットにチェックアウトされます。 git statusを実行すると、Changes not staged for commitテキスト(modified content)その背後にあるリストにサブモジュールが表示されます。 これは、submoduleのコードを変更したためではなく、そのコードがdifferentcommitにチェックアウトされているためです。 したがって、Gitはこれを変更と見なしますが、実際にはサブモジュールのコードを更新しませんでした。, したがって、サブモジュールを使用して作業している場合は、サブモジュールを最新の状態に保つことを忘れないでください。

すべての人にとって簡単になります

サブモジュールを開始して更新するのを忘れると迷惑になることがあります。 幸いなことに、それを簡単にするためのいくつかのトリックがあります:

これにより、サブモジュールが更新され、まだ開始されていない

サブモジュールの内部にサブモジュールを持つこともできます。, この場合、サブモジュールを再帰的に更新/開始する必要があります。

これは入力するのがたくさんあるので、エイリアスを作成できます。

git updateを実行するたびに、git pullandagit submodule update --init --recursive、したがって、プロジェクト内のすべてのコードを更新します。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です