Gestion des modifications Git sur plusieurs projets dans Visual Studio

PowerShell

Introduction à la gestion des modifications Git

Nous avons récemment migré vers Azure DevOps et avons rencontré un problème d'utilisabilité avec notre vaste collection de 482 applications. Ces applications sont regroupées dans des référentiels contenant chacun plusieurs solutions. Un de ces référentiels héberge cinq applications, une solution comportant plus de 20 projets, dont un seul est partagé entre les applications, tandis que d'autres comportent 10 à 15 projets uniques.

Notre défi se pose lorsque nous travaillons simultanément sur plusieurs applications au sein du même référentiel. Contrairement à SVN, qui filtrait les modifications pour afficher uniquement celles pertinentes pour le projet dans la solution, Git Changes de Visual Studio affiche toutes les modifications dans le référentiel. Cela crée une vue encombrée, rendant difficile la concentration sur des projets spécifiques. Nous étudions des moyens de gérer cela efficacement.

Commande Description
git -C $repoPath rev-parse --abbrev-ref HEAD Récupère le nom de la branche actuelle dans le référentiel spécifié.
git -C $repoPath diff --name-only $branch Répertorie les noms des fichiers modifiés dans la branche actuelle par rapport à la branche spécifiée.
Where-Object Filtre les objets d'une collection en fonction de conditions spécifiées dans PowerShell.
IVsWindowFrame Représente un cadre de fenêtre dans Visual Studio, utilisé pour personnaliser les fenêtres d'outils.
Package.Initialize() Remplace la méthode d'initialisation d'un package Visual Studio pour ajouter une logique personnalisée.
IVsWindowFrame.Show() Affiche une fenêtre outil dans Visual Studio.
Package La classe de base pour créer un package Visual Studio pouvant étendre l'EDI.

Comprendre les solutions de script

Le script PowerShell fourni est conçu pour filtrer les modifications Git afin d'afficher uniquement celles pertinentes pour une solution spécifique dans un référentiel plus grand. Il commence par définir le chemin d'accès au référentiel et récupère la branche actuelle à l'aide de la commande . Ensuite, il répertorie les noms des fichiers qui ont changé dans la branche actuelle en utilisant . Le script filtre ensuite ces fichiers modifiés pour inclure uniquement ceux situés dans le chemin de solution spécifié à l'aide de , ce qui nous permet d'appliquer une condition selon laquelle les chemins des fichiers doivent correspondre au chemin de la solution.

D'autre part, l'extension Visual Studio écrite en C# personnalise la fenêtre Git Changes pour filtrer et afficher les modifications pertinentes. Il se connecte à l'environnement Visual Studio à l'aide du classe, représentant un cadre de fenêtre dans Visual Studio. La logique principale de l'extension est encapsulée dans le , où il trouve le cadre de la fenêtre Git Changes et applique une logique de filtrage personnalisée pour afficher uniquement les modifications qui font partie de la solution actuelle. Cela aide les développeurs à se concentrer sur les modifications pertinentes sans être distraits par des modifications sans rapport dans le référentiel.

Filtrage des modifications Git par solution dans Visual Studio

Utilisation du script 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

Personnalisation de l'affichage des modifications Git dans Visual Studio

Utilisation de l'extension 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
            }
        }
    }
}

Gestion de plusieurs projets dans Visual Studio avec Git

Une autre approche pour gérer les modifications de Git dans Visual Studio consiste à utiliser efficacement les stratégies de branche. En créant des branches distinctes pour chaque application ou groupe d'applications au sein du même référentiel, vous pouvez isoler les modifications et empêcher leur apparition dans des projets non liés. De cette façon, lorsque vous basculez entre les branches, seules les modifications pertinentes pour la branche actuelle sont affichées dans la fenêtre Git Changes. Cette méthode permet également une meilleure collaboration puisque les membres de l’équipe peuvent travailler sur différentes branches sans interférer avec le travail de chacun.

De plus, des outils tels que les sous-modules Git ou Git sparse-checkout peuvent être utilisés pour gérer de grands référentiels avec plusieurs projets. Les sous-modules Git vous permettent d'inclure d'autres référentiels dans un référentiel, offrant ainsi un meilleur contrôle sur les dépendances et la ségrégation des projets. Git sparse-checkout vous permet d'extraire uniquement un sous-ensemble des fichiers du référentiel, réduisant ainsi l'encombrement dans le répertoire de travail et facilitant la concentration sur des projets spécifiques. Ces techniques peuvent améliorer considérablement la productivité lorsqu’il s’agit de référentiels multi-projets complexes.

  1. Comment puis-je filtrer les modifications apportées à un projet spécifique dans un référentiel multi-projets ?
  2. Vous pouvez utiliser le dans PowerShell pour filtrer les fichiers modifiés afin d'inclure uniquement ceux situés dans le chemin de solution spécifié.
  3. Que sont les sous-modules Git et en quoi sont-ils utiles ?
  4. vous permettent d'inclure d'autres référentiels dans un référentiel, offrant ainsi un meilleur contrôle sur les dépendances et la ségrégation des projets.
  5. Comment les stratégies des succursales aident-elles à gérer les changements ?
  6. En créant des branches distinctes pour chaque application ou groupe d'applications, vous pouvez isoler les modifications et les empêcher d'affecter des projets non liés.
  7. Qu’est-ce que Git Sparse-Checkout ?
  8. vous permet d'extraire uniquement un sous-ensemble des fichiers du référentiel, ce qui facilite la concentration sur des projets spécifiques.
  9. Puis-je personnaliser la fenêtre Git Changes dans Visual Studio ?
  10. Oui, vous pouvez le personnaliser à l'aide d'une extension Visual Studio écrite en C# qui se connecte à la fenêtre Git Changes et applique une logique de filtrage personnalisée.
  11. Comment récupérer le nom de la branche actuelle dans un référentiel ?
  12. Vous pouvez utiliser la commande pour récupérer le nom de la branche actuelle.
  13. Comment lister les noms des fichiers modifiés dans la branche actuelle ?
  14. Utilisez la commande pour lister les noms des fichiers qui ont changé dans la branche actuelle.
  15. Quel est le but de la méthode Package.Initialize() dans Visual Studio ?
  16. Le La méthode est utilisée pour initialiser un package Visual Studio et ajouter une logique personnalisée, telle que le filtrage de la fenêtre des modifications Git.
  17. Comment puis-je afficher une fenêtre outil dans Visual Studio ?
  18. Vous pouvez utiliser le méthode pour afficher une fenêtre outil dans Visual Studio.

La gestion des modifications Git sur plusieurs projets dans Visual Studio peut s'avérer difficile, en particulier après le passage à Azure DevOps. Les solutions présentées, notamment les scripts PowerShell et les extensions Visual Studio, offrent des moyens efficaces de filtrer les modifications et de se concentrer sur des projets spécifiques. La mise en œuvre de stratégies de branche, de sous-modules Git et de sparse-checkout peut rationaliser davantage le flux de travail et améliorer la productivité. Ces méthodes aident à maintenir la clarté et l'organisation, garantissant que les développeurs peuvent se concentrer sur les changements les plus importants pour leur travail actuel sans distractions inutiles.