目次
Gitサブモジュールとは何ですか?
サブモジュールの仕組み:
サブモジュールの長所:
サブモジュールの短所:
Gitサブツリーとは何ですか?
サブツリーの仕組み:
サブツリーの長所:
サブツリーの短所:
いつ使用するの?
結論
ホームページ 開発ツール Git GitサブモジュールとGitサブツリーの比較

GitサブモジュールとGitサブツリーの比較

Jul 31, 2025 am 12:18 AM

GITの外部依存関係を管理するには、正確なバージョン制御と独立したプロジェクト追跡が必要な場合はサブモジュールを使用します。特定のコミットを参照し、明確な分離を維持し、積極的に維持された依存関係に最適です。シンプルさが重要な場合はサブツリーを使用します。外部コードをリポジトリに直接マージし、セットアップの複雑さを減らし、新しい貢献者のコラボレーションを容易にするためです。

GitサブモジュールとGitサブツリーの比較

大規模なソフトウェアプロジェクトに取り組む場合、外部依存関係または共有コンポーネントを含めることが一般的です。 GITは、このような依存関係を管理するための2つの方法を提供します:サブモジュールサブツリー。どちらもプロジェクトに別のgitリポジトリを埋め込みましたが、それらは非常に異なって動作し、明確なトレードオフを備えています。これは、ワークフローに適合するものを決定するのに役立つ実用的な比較です。

GitサブモジュールとGitサブツリーの比較

Gitサブモジュールとは何ですか?

Gitサブモジュールは、別のリポジトリでの特定のコミットへの参照です。サブモジュールを追加すると、Gitは外部リポジトリのコミットハッシュを記録し、メインプロジェクトに保存します。

サブモジュールの仕組み:

  • git submodule add <repo-url> <path></path></repo-url>を実行して、レポを含めます。
  • gitは、サブモジュールのURLとパスをリストする.gitmodulesファイルを作成します。
  • 実際のコードは、サブモジュールディレクトリ内の別の.gitフォルダーに存在します。
  • サブモジュールでレポをクローニングするには、追加の手順が必要です。
     git clone -recurse-submodules <main-repo>

    または

    GitサブモジュールとGitサブツリーの比較
     git clone <main-repo>
    Gitサブモジュールアップデート -  Init- Recursive

サブモジュールの長所:

  • 独立して依存関係を隔離し、バージョン制御を維持します。
  • 特定のコミットに固定して、安定性を確保することができます。
  • サブモジュールの変更は、明示的に追跡および更新できます。
  • 含まれているプロジェクトが個別に維持される場合は理想的です。

サブモジュールの短所:

  • 貢献者の複雑さ:新しいチームメンバーは、サブモジュールコマンドを学習する必要があります。
  • サブモジュールの更新をコミットするのを忘れがちです(例:サブモジュールの変更後)。
  • 変更を引き出すには、サブモジュールを手動で更新する必要があります。
  • CI/CDパイプラインは、サブモジュールを処理するために追加の構成が必要です。

サブモジュールは強力ですが、「git内のgit」のように感じることができます。その余分な層は摩擦を追加します。


Gitサブツリーとは何ですか?

Git Subtreeは、外部リポジトリの履歴をメインプロジェクトのサブディレクトリにマージします。サブモジュールとは異なり、外部参照はありません。コードはレポの一部です。

GitサブモジュールとGitサブツリーの比較

サブツリーの仕組み:

  • git subtree add使用して、別のレポをサブディレクトリとして持ち込みます。
  • 外部リポジトリの歴史は、プロジェクトの歴史に接ぎ木されています。
  • 後で元のリポジトリから更新をプルして、変更を戻すことができます(必要に応じて)。

例:

 git subtree add  - -prefix = lib/my-dep <repo-url> main  -  squash

(使用--squashあらゆるコミットで歴史を膨らまないようにするためにスカッシュ。)

更新する:

 Git Subtree Pull  -  Prefix = lib/my-dep <repo-url> main  -  squash

サブツリーの長所:

  • ユーザーにとってよりシンプル:特別なコマンドは必要ありません。正常に作業をクローニング、引っ張り、プッシュします。
  • すべてが1つのリポジトリにあります。CIや新しい開発者向けの追加セットアップはありません。
  • コードは自己完結型であり、配布が簡単です。
  • 頻繁に変更する予定のないベンダーの依存関係に適しています。

サブツリーの短所:

  • あなたのレポはサイズが大きくなります(特にあなたがスカッシュしない場合)。
  • 局所的な変更を加えた場合、上流の変更をマージするのは難しい場合があります。
  • コードと依存関係の間の明確な分離を失う。
  • 使用している依存関係のバージョンを正確に追跡するのは難しい(文書化しない限り)。

Subtreeは、単純さのためにある程度のコントロールを交換します。オーバーヘッドなしで「コードだけ」が必要な場合に最適です。


いつ使用するの?

使用事例 推奨されるアプローチ
独立して進化し、積極的に維持される依存関係を追跡する必要があります。 submodules
あなたのチームは小さくても新品であり、Gitの複雑さを最小限に抑えたいと考えています。 サブツリー
貢献者がクローンを作成し、すぐに作業を開始する必要があります。 サブツリー
頻繁に含まれているリポジトリに貢献します。 サブモジュール(簡単な双方向同期)
時々更新されたライブラリを埋め込みます。 サブツリー
あなたはレポ膨満感を心配していて、きれいな歴史が欲しいです。 submodules

結論

  • サブモジュールは、正確さと分離を提供しますが、ワークフローの複雑さを追加します。
  • Subtreeは、物事をシンプルで自己完結型に保ちますが、プロジェクトの境界を曖昧にします。

きれいなアーキテクチャを大切にし、学習曲線を気にしない場合は、サブモジュールを使用してください。
特に小規模なチームや内部ツールのために、シンプルさと使いやすさを好む場合は多くの場合、より良い選択です。

基本的に、それは次のとおりです。別のプロジェクトへの参照が必要ですか、それともそのコードだけですか?それに応じてサブモジュールまたはサブツリーを選択します。

以上がGitサブモジュールとGitサブツリーの比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

gitリポジトリにサブツリーを追加するにはどうすればよいですか? gitリポジトリにサブツリーを追加するにはどうすればよいですか? Jul 16, 2025 am 01:48 AM

gitリポジトリにサブツリーを追加するには、最初にリモートリポジトリを追加して履歴を取得し、次にGitmergeおよびgitread-treeコマンドを使用してサブディレクトリにマージします。手順は次のとおりです。1。gitremoteadd-fコマンドを使用して、リモートリポジトリを追加します。 2. gitmerge-srecursive-no-commitを実行して、ブランチコンテンツを取得します。 3。GitRead-Tree-Prefix =を使用して、プロジェクトをサブツリーとしてマージするディレクトリを指定します。 4.変更を送信して追加を完了します。 5.更新するときは、最初にgitfetchを繰り返し、マージとステップを繰り返して更新を送信します。この方法により、外部プロジェクトの履歴が完全で保守しやすくなります。

早送りが可能であっても、マージのコミットを作成するにはどうすればよいですか? 早送りが可能であっても、マージのコミットを作成するにはどうすればよいですか? Jul 21, 2025 am 02:22 AM

gitmerge-no-ffを使用して、たとえあなたが早送りすることができても、Gitを強制してマージコミットを作成するように強制します。 1. -NO-FFFパラメーターを使用して、ブランチの履歴を保存し、変更の原因を明確にします。 2。この方法は、コードレビューまたは監査中に特に役立ち、GitFlowなどの厳格なブランチ戦略でよく使用されます。 3.この操作は、gitconfig - globalalias.merge-noff '!gitmerge-no-ff'などのエイリアスまたはスクリプトを構成することで自動化できます。

1つのコマンドで新しいgitブランチに作成して切り替えるにはどうすればよいですか? 1つのコマンドで新しいgitブランチに作成して切り替えるにはどうすればよいですか? Jul 16, 2025 am 01:39 AM

はい、コマンドを使用して新しいgitブランチに切り替えることができます。特定の方法は次のとおりです。1。gitswitch-c:これはよりモダンで明確な方法です。たとえば、gitswitch-cnew-featureはすぐにNew-featureという名前のブランチを作成して切り替えます。 2。Gitcheckout-Bを使用:これは古いが一般的に使用される方法です。たとえば、Gitcheckout-Bnew-Featureは前者と同じ効果を持っています。注:GitswitchはGit2.23で導入され、古いバージョンではGitcheckoutを使用する必要があります。 Gitswitch-Cnewなど、他のブランチに基づいてブランチを指定できます。

GITリポジトリからサブモジュールを削除するにはどうすればよいですか? GITリポジトリからサブモジュールを削除するにはどうすればよいですか? Jul 19, 2025 am 01:19 AM

tocleanlyremoveagitsubmodule、firstdeinitializeit withgitsubmoduledeinit-fpath/to/submodule、thendeleteitsfilesviarm-rf.git/modu les/path/to/submoduleandgitrm-fpath/to/submodule、およびfinallyremoveredentriesfrom.git/configand.gitmodulesbeforecommitting

Git Reflogで削除されたブランチを回復する方法 Git Reflogで削除されたブランチを回復する方法 Jul 25, 2025 am 12:46 AM

rungitreflog - date = localtoviewrecentreceferenceChangESANDLOCATEDELETEDBYITSNAMEORCOMMITHASH.2.IDEDIFYTHECOMMITHASHJUSTBETEBETHE "deletedBranch" message inthereflogoutput.3.3.RecreatetheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTheTherは

ユーザー名とメールアドレスでGitを構成するにはどうすればよいですか? ユーザー名とメールアドレスでGitを構成するにはどうすればよいですか? Jul 23, 2025 am 02:57 AM

gitユーザー名とメールボックスを設定する方法は、gitconfig - globaluser.nameおよびgitconfig - globaluser.emailコマンドを使用して、ID情報をグローバルに構成することです。特定の手順は次のとおりです。1。ユーザー名の設定:gitconfig - globaluser.name "yourname"を実行します。 2。メールボックスを構成します:gitconfig - globaluser.email "your.email@example.com"; 3.設定の確認:gitconfiguser.nameとgitcoを渡します

Git Merge vs. Git Rebaseをいつ使用する必要がありますか? Git Merge vs. Git Rebaseをいつ使用する必要がありますか? Jul 22, 2025 am 02:43 AM

usegitmergetopReservistoryandcollaborate fely、特にforpublicbrancheslikemainordevelop.usegitrebaseTocreateaclean、linearhistoryはliearhistory whenwhenworcally foresharingchanges.mergecreatesanewcommitthatiesbrancheatheathertogetherを紹介します

特定のコミットを元に戻すにはどうすればよいですか(変更を取り消す新しいコミットを作成します)? 特定のコミットを元に戻すにはどうすればよいですか(変更を取り消す新しいコミットを作成します)? Jul 20, 2025 am 01:41 AM

リポジトリにプッシュされたが履歴を維持しているコミットを取り消すには、GitRevertを使用して、指定されたコミットの変更を逆転させる新しいコミットを作成します。 1。gitlog-- Onelineを使用して、ターゲットコミットのハッシュ値を見つけます。 2。GitrevertまたはGitreverthead〜2などを実行して、特定のコミットを取り消す。 3.紛争がある場合は、手動で解決し、GitRevertを続行します。 4.提出情報を編集および確認できます。 5。マージされたコミットの場合、-M1パラメーターを追加する必要があります。この方法は、共有支店にとって安全であり、履歴の書き換えによって引き起こされる問題を回避します。

See all articles