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 . Därefter listar den namnen på filer som har ändrats i den aktuella grenen med hjälp av . Skriptet filtrerar sedan dessa ändrade filer för att endast inkludera de inom den angivna lösningssökvägen som använder , 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 klass, som representerar en fönsterram i Visual Studio. Tilläggets huvudlogik är inkapslad i 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.
- Hur kan jag filtrera ändringar av ett specifikt projekt i ett arkiv med flera projekt?
- Du kan använda kommandot i PowerShell för att filtrera de ändrade filerna så att de endast inkluderar de inom den angivna lösningssökvägen.
- Vad är Git-undermoduler och hur hjälper de?
- låter dig inkludera andra arkiv i ett arkiv, vilket ger bättre kontroll över beroenden och projektsegregering.
- Hur hjälper filialstrategier att hantera förändringar?
- 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.
- Vad är 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.
- Kan jag anpassa Git Changes-fönstret i Visual Studio?
- 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.
- Hur hämtar jag det aktuella filialnamnet i ett arkiv?
- Du kan använda kommandot för att hämta det aktuella filialnamnet.
- Hur listar jag namnen på filer som ändrats i den aktuella grenen?
- Använd kommandot för att lista namnen på filer som har ändrats i den aktuella grenen.
- Vad är syftet med metoden Package.Initialize() i Visual Studio?
- De metod används för att initiera ett Visual Studio-paket och lägga till anpassad logik, som att filtrera fönstret Git Changes.
- Hur kan jag visa ett verktygsfönster i Visual Studio?
- Du kan använda metod för att visa ett verktygsfönster i Visual Studio.
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.