Introducció a la gestió dels canvis de Git
Recentment hem fet la transició a Azure DevOps i hem trobat un problema d'usabilitat amb la nostra àmplia col·lecció de 482 aplicacions. Aquestes aplicacions s'agrupen en repositoris, cadascun conté múltiples solucions. Un d'aquests dipòsits alberga cinc aplicacions, amb una solució amb més de 20 projectes, on només un es comparteix entre les aplicacions, mentre que altres tenen de 10 a 15 projectes únics.
El nostre repte sorgeix quan es treballa en diverses aplicacions simultàniament dins del mateix repositori. A diferència de SVN, que filtrava els canvis per mostrar només els rellevants per al projecte a la solució, Git Changes de Visual Studio mostra tots els canvis al repositori. Això crea una visió desordenada, cosa que dificulta centrar-se en projectes específics. Estem explorant maneres de gestionar-ho de manera eficaç.
Comandament | Descripció |
---|---|
git -C $repoPath rev-parse --abbrev-ref HEAD | Recupera el nom de la branca actual al repositori especificat. |
git -C $repoPath diff --name-only $branch | Llista els noms dels fitxers canviats a la branca actual en comparació amb la branca especificada. |
Where-Object | Filtra els objectes d'una col·lecció en funció de les condicions especificades a PowerShell. |
IVsWindowFrame | Representa un marc de finestra a Visual Studio, utilitzat per personalitzar finestres d'eines. |
Package.Initialize() | Substitueix el mètode d'inicialització d'un paquet de Visual Studio per afegir lògica personalitzada. |
IVsWindowFrame.Show() | Mostra una finestra d'eines a Visual Studio. |
Package | La classe base per crear un paquet de Visual Studio que pugui ampliar l'IDE. |
Comprensió de les solucions de script
L'script de PowerShell proporcionat està dissenyat per filtrar els canvis de Git per mostrar només els rellevants per a una solució específica dins d'un repositori més gran. Comença definint el camí al dipòsit i recupera la branca actual mitjançant l'ordre git -C $repoPath rev-parse --abbrev-ref HEAD. A continuació, enumera els noms dels fitxers que han canviat a la branca actual utilitzant git -C $repoPath diff --name-only $branch. Aleshores, l'script filtra aquests fitxers modificats per incloure només els de la ruta de la solució especificada Where-Object, que ens permet aplicar una condició que els camins dels fitxers han de coincidir amb el camí de la solució.
D'altra banda, l'extensió de Visual Studio escrita en C# personalitza la finestra Canvis de Git per filtrar i mostrar els canvis rellevants. S'enganxa a l'entorn de Visual Studio mitjançant l' IVsWindowFrame classe, que representa un marc de finestra dins de Visual Studio. La lògica principal de l'extensió es troba encapsulada a Package.Initialize() mètode, on troba el marc de la finestra Git Changes i aplica la lògica de filtratge personalitzada per mostrar només els canvis que formen part de la solució actual. Això ajuda els desenvolupadors a centrar-se en els canvis rellevants sense distreure's per modificacions no relacionades al repositori.
Filtrar els canvis de Git per solució a Visual Studio
Utilitzant 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
Personalització de la visualització dels canvis de Git a Visual Studio
Ús de 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
}
}
}
}
Gestió de múltiples projectes a Visual Studio amb Git
Un altre enfocament per gestionar els canvis de Git a Visual Studio és utilitzar estratègies de branques de manera eficaç. En crear branques separades per a cada aplicació o grup d'aplicacions dins del mateix dipòsit, podeu aïllar els canvis i evitar que es mostrin en projectes no relacionats. D'aquesta manera, quan canvieu entre branques, només es mostren els canvis rellevants per a la branca actual a la finestra Canvis de Git. Aquest mètode també permet una millor col·laboració, ja que els membres de l'equip poden treballar en diferents branques sense interferir amb el treball dels altres.
A més, es poden utilitzar eines com els submòduls Git o Git sparse-checkout per gestionar grans dipòsits amb diversos projectes. Els submòduls Git us permeten incloure altres dipòsits dins d'un dipòsit, proporcionant un millor control de les dependències i la segregació de projectes. Git sparse-checkout us permet consultar només un subconjunt dels fitxers del dipòsit, reduint el desordre al directori de treball i facilitant centrar-vos en projectes específics. Aquestes tècniques poden millorar significativament la productivitat quan es tracta de repositoris complexos de diversos projectes.
Preguntes i solucions habituals per gestionar els canvis de Git a Visual Studio
- Com puc filtrar els canvis a un projecte específic en un repositori multiprojecte?
- Podeu utilitzar el Where-Object comanda a PowerShell per filtrar els fitxers modificats per incloure només aquells dins del camí de la solució especificat.
- Què són els submòduls Git i com ajuden?
- Git submodules permeten incloure altres dipòsits dins d'un dipòsit, proporcionant un millor control de les dependències i la segregació de projectes.
- Com ajuden les estratègies de les sucursals a gestionar els canvis?
- En crear branques separades per a cada aplicació o grup d'aplicacions, podeu aïllar els canvis i evitar que afectin projectes no relacionats.
- Què és Git sparse-checkout?
- Git sparse-checkout us permet consultar només un subconjunt dels fitxers del repositori, cosa que facilita centrar-vos en projectes específics.
- Puc personalitzar la finestra Canvis de Git a Visual Studio?
- Sí, podeu personalitzar-lo mitjançant una extensió de Visual Studio escrita en C# que s'enganxa a la finestra Canvis de Git i aplica una lògica de filtratge personalitzada.
- Com puc recuperar el nom de la branca actual en un repositori?
- Podeu utilitzar l'ordre git -C $repoPath rev-parse --abbrev-ref HEAD per recuperar el nom de la branca actual.
- Com puc llistar els noms dels fitxers canviats a la branca actual?
- Utilitzeu l'ordre git -C $repoPath diff --name-only $branch per llistar els noms dels fitxers que han canviat a la branca actual.
- Quin és l'objectiu del mètode Package.Initialize() a Visual Studio?
- El Package.Initialize() El mètode s'utilitza per inicialitzar un paquet de Visual Studio i afegir lògica personalitzada, com ara filtrar la finestra Canvis de Git.
- Com puc mostrar una finestra d'eines a Visual Studio?
- Podeu utilitzar el IVsWindowFrame.Show() mètode per mostrar una finestra d'eines a Visual Studio.
Consideracions finals sobre la gestió dels canvis de Git
Gestionar els canvis de Git en diversos projectes a Visual Studio pot ser un repte, sobretot després de canviar a Azure DevOps. Les solucions comentades, incloses els scripts de PowerShell i les extensions de Visual Studio, ofereixen maneres efectives de filtrar els canvis i centrar-se en projectes específics. La implementació d'estratègies de sucursal, submòduls Git i el pagament escàs pot agilitzar encara més el flux de treball i millorar la productivitat. Aquests mètodes ajuden a mantenir la claredat i l'organització, garantint que els desenvolupadors es puguin concentrar en els canvis que més importen al seu treball actual sense distraccions innecessàries.