Visual Studio で複数のプロジェクトにわたる Git の変更を処理する

Visual Studio で複数のプロジェクトにわたる Git の変更を処理する
Visual Studio で複数のプロジェクトにわたる Git の変更を処理する

Git の変更管理の概要

最近 Azure DevOps に移行しましたが、482 個のアプリケーションの広範なコレクションでユーザビリティの問題が発生しました。これらのアプリケーションはリポジトリにグループ化され、それぞれに複数のソリューションが含まれます。このようなリポジトリの 1 つは 5 つのアプリケーションを収容しており、1 つのソリューションには 20 以上のプロジェクトがあり、アプリケーション間で共有されるのは 1 つだけですが、他のリポジトリには 10 ~ 15 の固有のプロジェクトがあります。

私たちの課題は、同じリポジトリ内で複数のアプリケーションを同時に作業するときに発生します。変更をフィルター処理してソリューション内のプロジェクトに関連する変更のみを表示する SVN とは異なり、Visual Studio の Git 変更はリポジトリ内のすべての変更を表示します。これによりビューが乱雑になり、特定のプロジェクトに集中することが困難になります。私たちはこれを効果的に管理する方法を模索しています。

指示 説明
git -C $repoPath rev-parse --abbrev-ref HEAD 指定されたリポジトリ内の現在のブランチ名を取得します。
git -C $repoPath diff --name-only $branch 指定されたブランチと比較して、現在のブランチで変更されたファイルの名前をリストします。
Where-Object PowerShell で指定された条件に基づいて、コレクション内のオブジェクトをフィルターします。
IVsWindowFrame Visual Studio のウィンドウ フレームを表します。ツール ウィンドウのカスタマイズに使用されます。
Package.Initialize() Visual Studio パッケージの初期化メソッドをオーバーライドして、カスタム ロジックを追加します。
IVsWindowFrame.Show() Visual Studio でツール ウィンドウを表示します。
Package IDE を拡張できる Visual Studio パッケージを作成するための基本クラス。

スクリプト ソリューションを理解する

提供される PowerShell スクリプトは、Git の変更をフィルタリングして、大規模なリポジトリ内の特定のソリューションに関連する変更のみを表示するように設計されています。まずリポジトリへのパスを定義し、次のコマンドを使用して現在のブランチを取得します。 git -C $repoPath rev-parse --abbrev-ref HEAD。次に、現在のブランチで変更されたファイルの名前をリストします。 git -C $repoPath diff --name-only $branch。次に、スクリプトはこれらの変更されたファイルをフィルタリングして、指定されたソリューション パス内のファイルのみを含めます。 Where-Objectこれにより、ファイル パスがソリューション パスと一致する必要があるという条件を適用できます。

一方、C# で記述された Visual Studio 拡張機能は、Git の変更ウィンドウをカスタマイズして、関連する変更をフィルターして表示します。これは、次を使用して Visual Studio 環境にフックします。 IVsWindowFrame Visual Studio 内のウィンドウ フレームを表すクラス。拡張機能のメインロジックは、 Package.Initialize() このメソッドでは、Git Changes ウィンドウ フレームを検索し、カスタム フィルター ロジックを適用して、現在のソリューションの一部である変更のみを表示します。これにより、開発者はリポジトリ内の無関係な変更に気を取られることなく、関連する変更に集中できます。

Visual Studio でのソリューションごとの Git 変更のフィルター処理

PowerShell スクリプトの使用

# Define the path to the repository
$repoPath = "C:\path\to\your\repository"
# Get the current branch
$branch = git -C $repoPath rev-parse --abbrev-ref HEAD
# Get the list of changed files
$changedFiles = git -C $repoPath diff --name-only $branch
# Define the solution path
$solutionPath = "C:\path\to\your\solution"
# Filter the changed files to include only those in the solution
$filteredFiles = $changedFiles | Where-Object { $_ -like "$solutionPath\*" }
# Output the filtered files
$filteredFiles

Visual Studio での Git 変更表示のカスタマイズ

Visual Studio 拡張機能の使用 (C#)

using System;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
namespace GitChangesFilter
{
    public class GitChangesFilterPackage : Package
    {
        protected override void Initialize()
        {
            base.Initialize();
            // Hook into the Git Changes window
            IVsWindowFrame windowFrame = /* Get the Git Changes window frame */
            if (windowFrame != null)
            {
                // Customize the Git Changes display
                // Apply filtering logic here
            }
        }
    }
}

Git を使用した Visual Studio での複数のプロジェクトの管理

Visual Studio で Git の変更を管理するもう 1 つのアプローチは、ブランチ戦略を効果的に使用することです。同じリポジトリ内のアプリケーションまたはアプリケーションのグループごとに個別のブランチを作成することで、変更を分離し、無関係なプロジェクトに変更が表示されるのを防ぐことができます。こうすることで、ブランチ間を切り替えるときに、現在のブランチに関連する変更のみが [Git Changes] ウィンドウに表示されます。この方法では、チーム メンバーが互いの作業を妨げずに異なるブランチで作業できるため、コラボレーションが向上します。

さらに、Git サブモジュールや Git sparse-checkout などのツールを使用して、複数のプロジェクトを含む大規模なリポジトリを管理できます。 Git サブモジュールを使用すると、リポジトリ内に他のリポジトリを含めることができ、依存関係やプロジェクトの分離をより適切に制御できるようになります。 Git sparse-checkout を使用すると、リポジトリ内のファイルのサブセットのみをチェックアウトできるため、作業ディレクトリ内の混乱が軽減され、特定のプロジェクトに集中しやすくなります。これらの手法により、複雑なマルチプロジェクト リポジトリを扱う際の生産性が大幅に向上します。

Visual Studio で Git の変更を管理するための一般的な質問と解決策

  1. マルチプロジェクト リポジトリ内の特定のプロジェクトへの変更をフィルタリングするにはどうすればよいですか?
  2. 使用できます Where-Object PowerShell のコマンドを使用して、変更されたファイルをフィルター処理して、指定されたソリューション パス内のファイルのみを含めます。
  3. Git サブモジュールとは何ですか?また、どのように役立ちますか?
  4. Git submodules リポジトリ内に他のリポジトリを含めることができるため、依存関係やプロジェクトの分離をより適切に制御できます。
  5. ブランチ戦略は変更の管理にどのように役立ちますか?
  6. アプリケーションまたはアプリケーションのグループごとに個別のブランチを作成することで、変更を分離し、無関係なプロジェクトに影響を与えるのを防ぐことができます。
  7. Git スパース チェックアウトとは何ですか?
  8. Git sparse-checkout リポジトリ内のファイルのサブセットのみをチェックアウトできるため、特定のプロジェクトに集中しやすくなります。
  9. Visual Studio で [Git Changes] ウィンドウをカスタマイズできますか?
  10. はい、C# で記述された Visual Studio 拡張機能を使用してカスタマイズできます。この拡張機能は Git の変更ウィンドウにフックし、カスタム フィルター ロジックを適用します。
  11. リポジトリ内の現在のブランチ名を取得するにはどうすればよいですか?
  12. コマンドを使用できます git -C $repoPath rev-parse --abbrev-ref HEAD 現在のブランチ名を取得します。
  13. 現在のブランチで変更されたファイルの名前を一覧表示するにはどうすればよいですか?
  14. コマンドを使用する git -C $repoPath diff --name-only $branch 現在のブランチで変更されたファイルの名前をリストします。
  15. Visual Studio の Package.Initialize() メソッドの目的は何ですか?
  16. Package.Initialize() このメソッドは、Visual Studio パッケージを初期化し、Git の変更ウィンドウのフィルター処理などのカスタム ロジックを追加するために使用されます。
  17. Visual Studio でツール ウィンドウを表示するにはどうすればよいですか?
  18. 使用できます IVsWindowFrame.Show() Visual Studio でツール ウィンドウを表示するメソッド。

Git の変更管理に関する最終的な考え方

Visual Studio で複数のプロジェクトにわたる Git の変更を管理するのは、特に Azure DevOps に切り替えた後は困難になることがあります。 PowerShell スクリプトや Visual Studio 拡張機能など、ここで説明したソリューションは、変更をフィルターして特定のプロジェクトに焦点を当てるための効果的な方法を提供します。ブランチ戦略、Git サブモジュール、スパース チェックアウトを実装すると、ワークフローがさらに合理化され、生産性が向上します。これらの方法は、明確さと整理を維持するのに役立ち、開発者が不必要に気を散らすことなく現在の作業にとって最も重要な変更に集中できるようにします。