Hantera Git-ändringar över flera projekt i Visual Studio

Hantera Git-ändringar över flera projekt i Visual Studio
Hantera Git-ändringar över flera projekt i Visual Studio

Introduktion till hantering av Git-ändringar

Vi gick nyligen över till Azure DevOps och stötte på ett användbarhetsproblem med vår omfattande samling av 482 applikationer. Dessa applikationer är grupperade i arkiv som var och en innehåller flera lösningar. Ett sådant förvar rymmer fem applikationer, där en lösning har 20+ projekt, där endast en delas mellan applikationerna, medan andra har 10 till 15 unika projekt.

Vår utmaning uppstår när vi arbetar med flera applikationer samtidigt inom samma arkiv. Till skillnad från SVN, som filtrerade ändringar för att bara visa de som är relevanta för projektet i lösningen, visar Visual Studios Git Changes alla ändringar i arkivet. Detta skapar en rörig vy, vilket gör det svårt att fokusera på specifika projekt. Vi undersöker sätt att hantera detta effektivt.

Kommando Beskrivning
git -C $repoPath rev-parse --abbrev-ref HEAD Hämtar det aktuella filialnamnet i det angivna arkivet.
git -C $repoPath diff --name-only $branch Listar namnen på filer som ändrats i den aktuella grenen jämfört med den angivna grenen.
Where-Object Filtrerar objekt i en samling baserat på angivna villkor i PowerShell.
IVsWindowFrame Representerar en fönsterram i Visual Studio, som används för att anpassa verktygsfönster.
Package.Initialize() Åsidosätter initieringsmetoden för ett Visual Studio-paket för att lägga till anpassad logik.
IVsWindowFrame.Show() Visar ett verktygsfönster i Visual Studio.
Package Basklassen för att skapa ett Visual Studio-paket som kan utöka IDE.

Förstå skriptlösningarna

PowerShell-skriptet som tillhandahålls är utformat för att filtrera Git-ändringarna för att endast visa de som är relevanta för en specifik lösning i ett större arkiv. Den börjar med att definiera sökvägen till förvaret och hämtar den aktuella grenen med kommandot git -C $repoPath rev-parse --abbrev-ref HEAD. Därefter listar den namnen på filer som har ändrats i den aktuella grenen med hjälp av git -C $repoPath diff --name-only $branch. Skriptet filtrerar sedan dessa ändrade filer för att endast inkludera de inom den angivna lösningssökvägen som använder Where-Object, vilket tillåter oss att tillämpa ett villkor att filsökvägarna måste matcha lösningens sökväg.

Å andra sidan anpassar Visual Studio-tillägget skrivet i C# Git Changes-fönstret för att filtrera och visa relevanta ändringar. Den kopplas in i Visual Studio-miljön med hjälp av IVsWindowFrame klass, som representerar en fönsterram i Visual Studio. Tilläggets huvudlogik är inkapslad i Package.Initialize() metod, där den hittar fönsterramen Git Changes och tillämpar anpassad filtreringslogik för att endast visa de ändringar som är en del av den aktuella lösningen. Detta hjälper utvecklare att fokusera på de relevanta ändringarna utan att distraheras av orelaterade ändringar i förvaret.

Filtrera Git-ändringar efter lösning i Visual Studio

Använder PowerShell Script

# 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

Anpassa Git Changes Display i Visual Studio

Använder Visual Studio Extension (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
            }
        }
    }
}

Hantera flera projekt i Visual Studio med Git

Ett annat sätt att hantera Git-ändringar i Visual Studio är att använda grenstrategier effektivt. Genom att skapa separata grenar för varje applikation eller grupp av applikationer inom samma arkiv kan du isolera ändringar och förhindra att de dyker upp i orelaterade projekt. På detta sätt, när du växlar mellan grenar, visas endast de ändringar som är relevanta för den aktuella grenen i Git Changes-fönstret. Denna metod möjliggör också bättre samarbete eftersom teammedlemmar kan arbeta på olika grenar utan att störa varandras arbete.

Dessutom kan verktyg som Git-undermoduler eller Git sparse-checkout användas för att hantera stora arkiv med flera projekt. Git-undermoduler låter dig inkludera andra arkiv i ett arkiv, vilket ger bättre kontroll över beroenden och projektsegregering. Git sparse-checkout låter dig bara checka ut en delmängd av filerna i arkivet, vilket minskar röran i arbetskatalogen och gör det lättare att fokusera på specifika projekt. Dessa tekniker kan avsevärt förbättra produktiviteten när man hanterar komplexa multiprojektförråd.

Vanliga frågor och lösningar för hantering av Git-ändringar i Visual Studio

  1. Hur kan jag filtrera ändringar av ett specifikt projekt i ett arkiv med flera projekt?
  2. Du kan använda Where-Object kommandot i PowerShell för att filtrera de ändrade filerna så att de endast inkluderar de inom den angivna lösningssökvägen.
  3. Vad är Git-undermoduler och hur hjälper de?
  4. Git submodules låter dig inkludera andra arkiv i ett arkiv, vilket ger bättre kontroll över beroenden och projektsegregering.
  5. Hur hjälper filialstrategier att hantera förändringar?
  6. Genom att skapa separata grenar för varje applikation eller grupp av applikationer kan du isolera ändringar och förhindra att de påverkar orelaterade projekt.
  7. Vad är Git sparse-checkout?
  8. Git sparse-checkout låter dig bara checka ut en delmängd av filerna i arkivet, vilket gör det lättare att fokusera på specifika projekt.
  9. Kan jag anpassa Git Changes-fönstret i Visual Studio?
  10. Ja, du kan anpassa den med hjälp av en Visual Studio-tillägg skriven i C# som kopplas in i Git Changes-fönstret och tillämpar anpassad filtreringslogik.
  11. Hur hämtar jag det aktuella filialnamnet i ett arkiv?
  12. Du kan använda kommandot git -C $repoPath rev-parse --abbrev-ref HEAD för att hämta det aktuella filialnamnet.
  13. Hur listar jag namnen på filer som ändrats i den aktuella grenen?
  14. Använd kommandot git -C $repoPath diff --name-only $branch för att lista namnen på filer som har ändrats i den aktuella grenen.
  15. Vad är syftet med metoden Package.Initialize() i Visual Studio?
  16. De Package.Initialize() metod används för att initiera ett Visual Studio-paket och lägga till anpassad logik, som att filtrera fönstret Git Changes.
  17. Hur kan jag visa ett verktygsfönster i Visual Studio?
  18. Du kan använda IVsWindowFrame.Show() metod för att visa ett verktygsfönster i Visual Studio.

Sista tankar om att hantera Git-ändringar

Att hantera Git-ändringar över flera projekt i Visual Studio kan vara utmanande, särskilt efter att ha bytt till Azure DevOps. Lösningarna som diskuteras, inklusive PowerShell-skript och Visual Studio-tillägg, erbjuder effektiva sätt att filtrera ändringar och fokusera på specifika projekt. Implementering av filialstrategier, Git-undermoduler och sparsam utcheckning kan ytterligare effektivisera arbetsflödet och förbättra produktiviteten. Dessa metoder hjälper till att upprätthålla tydlighet och organisation, vilket säkerställer att utvecklare kan koncentrera sig på de förändringar som betyder mest för deras nuvarande arbete utan onödiga distraktioner.