Git での特定のサブディレクトリのクローン作成

Git での特定のサブディレクトリのクローン作成
Git configuration

サブディレクトリのクローン作成: 概要

Git でバージョン管理を管理する場合、SVN などの古いシステムと比較して、シナリオごとに異なるアプローチが必要になります。特に、リポジトリのサブディレクトリを選択的にクローン作成する機能は、さまざまな開発ワークフローにとって重要です。この機能は、プロジェクトの構造が複雑な場合、またはリポジトリの一部だけを操作する必要がある場合に特に便利です。

SVN では、リポジトリからサブディレクトリを別の場所にチェックアウトするのは簡単でした。ただし、Git ではリポジトリ データの処理方法が異なるため、「svn co」などの SVN コマンドと直接同等のものはわかりにくくなっています。このガイドでは、Git がスパース チェックアウトやその他の戦略を使用して同様の結果を達成する方法を説明します。

指示 説明
git init 新しい Git リポジトリを初期化し、必要なすべてのメタデータを含む初期 .git ディレクトリを作成します。
git remote add -f 新しいリモート リポジトリを Git 構成に追加し、すぐに取得します。
git config core.sparseCheckout true リポジトリの部分的なチェックアウトを可能にするスパース チェックアウト機能を有効にします。
echo "finisht/*" >> .git/info/sparse-checkout スパースチェックアウト構成ファイルにパス「finisht/*」を追加して、チェックアウトするサブディレクトリを定義します。
git pull origin master スパースチェックアウトルールを使用して、指定されたサブディレクトリのみを取得して、「元の」リモートから「マスター」ブランチをプルします。
git sparse-checkout set 作業ディレクトリ内に設定するパスを構成します。

Git スパース チェックアウトとスクリプト ワークフローの説明

提供されるスクリプトは、Git リポジトリから特定のサブディレクトリのクローンを作成するように設計されており、SVN で以前に利用できた動作を模倣します。リポジトリの特定の部分のみが必要な環境では、フェッチされるデータが大幅に削減され、効率が向上します。最初のスクリプトでは、次の組み合わせを使用します。 git initgit remote add -f、 そして git config core.sparseCheckout true 新しい Git リポジトリを初期化し、リモート ソースを追加し、リポジトリ コンテンツの選択的なクローン作成を可能にするスパース チェックアウトを有効にします。

その後、「finisht/*」のようなパスが、次のようにしてスパースチェックアウト構成に追加されます。 echo コマンドを使用して、特定のディレクトリのみをフェッチするように Git に指示します。コマンド git pull origin master は、リモート リポジトリのマスター ブランチから構成済みのサブディレクトリのみをプルするために使用されます。 2 番目のスクリプトは、 git sparse-checkout set コマンド。最近の Git バージョンで導入されたより合理化されたアプローチで、ディレクトリ パスの直接指定が簡素化され、チェックアウトされる内容の明確さと制御が強化されます。

Git リポジトリでのクローン作成のためのサブディレクトリの分離

Bash および Git コマンドの使用

mkdir specific-dir-clone
cd specific-dir-clone
git init
git remote add -f origin https://your-repository-url.git
git config core.sparseCheckout true
echo "finisht/*" >> .git/info/sparse-checkout
git pull origin master
cd ..
mkdir another-specific-dir
cd another-specific-dir
git init
git remote add -f origin https://your-repository-url.git
git config core.sparseCheckout true
echo "static/*" >> .git/info/sparse-checkout
git pull origin master

Git のサブディレクトリに対するスパース チェックアウトの実装

Git スパースチェックアウト機能の使用

git clone --filter=blob:none --no-checkout https://your-repository-url.git repo-dir
cd repo-dir
git sparse-checkout init --cone
git sparse-checkout set finisht
git checkout
cd ..
git clone --filter=blob:none --no-checkout https://your-repository-url.git another-repo-dir
cd another-repo-dir
git sparse-checkout init --cone
git sparse-checkout set static
git checkout

ディレクトリ固有の操作のための Git の高度なテクニック

Git でサブディレクトリを複製する基本的な方法に加えて、開発者が多数のプロジェクトを含む大規模なリポジトリを管理する方法をさらに最適化できる高度なテクニックがあります。そのような方法の 1 つは、 git submodule。このコマンドを使用すると、Git リポジトリに他の Git リポジトリをサブモジュールとして含めることができ、親と一緒にクローンを作成できますが、個別に維持できます。これは、リポジトリのさまざまな部分を分離しながらも中央リポジトリから制御する必要がある場合に特に便利です。

もう 1 つの高度な機能は、 git filter-branch と組み合わせ git subtree。この組み合わせにより、履歴を保持しながら、サブディレクトリを新しい別の Git リポジトリに抽出できます。これは、プロジェクトが独自の実体に成長し、歴史的コンテキストを失うことなくメイン リポジトリから分離する必要がある状況に最適です。

Git サブディレクトリ管理に関する重要な FAQ

  1. Git リポジトリから 1 つのディレクトリだけを複製できますか?
  2. はい、次のようなコマンドを使用します git sparse-checkout または、そのディレクトリの内容だけを含む別のブランチを作成します。
  3. Git のスパース チェックアウトとは何ですか?
  4. スパース チェックアウトを使用すると、プロジェクト全体をダウンロードせずに、リポジトリから特定のフォルダーまたはファイルを選択的にチェックアウトできます。
  5. サブディレクトリにサブモジュールを使用するにはどうすればよいですか?
  6. サブモジュールを追加します git submodule add 目的のリポジトリとパスを指します。
  7. サブディレクトリを新しいリポジトリに分離できますか?
  8. はい、使用しています git subtree split サブディレクトリのみの履歴を含む新しいブランチを作成し、クローンを作成できます。
  9. git サブモジュールと git サブツリーの違いは何ですか?
  10. サブモジュールは個別のリポジトリを依存関係としてプロジェクトにリンクしますが、サブツリーは別のリポジトリをプロジェクトにマージし、それを分割して元に戻すことができます。

Git でのディレクトリ固有のクローン作成に関する最終的な考え方

Git には、個々のディレクトリに対する SVN のチェックアウトに相当する直接コマンドは提供されていませんが、スパース チェックアウト、サブモジュール、およびサブツリー戦略の使用により、強力な代替手段が提供されます。これらの方法は、古いバージョン管理システムが提供する機能を複製するだけでなく、多くの場合拡張します。 SVN から移行する開発者、または Git 内で複雑なプロジェクトを管理する開発者は、これらのテクニックを習得することで開発プロセスを大幅に効率化できます。