Gestione delle modifiche Git su più progetti in Visual Studio

PowerShell

Introduzione alla gestione delle modifiche Git

Di recente siamo passati ad Azure DevOps e abbiamo riscontrato un problema di usabilità con la nostra vasta raccolta di 482 applicazioni. Queste applicazioni sono raggruppate in repository, ciascuno contenente più soluzioni. Uno di questi repository ospita cinque applicazioni, con una soluzione che contiene più di 20 progetti, di cui solo uno è condiviso tra le applicazioni, mentre altre hanno da 10 a 15 progetti unici.

La nostra sfida nasce quando si lavora su più applicazioni contemporaneamente all'interno dello stesso repository. A differenza di SVN, che filtrava le modifiche per mostrare solo quelle rilevanti per il progetto nella soluzione, Git Changes di Visual Studio visualizza tutte le modifiche nel repository. Ciò crea una visione disordinata, rendendo difficile concentrarsi su progetti specifici. Stiamo esplorando modi per gestire questa situazione in modo efficace.

Comando Descrizione
git -C $repoPath rev-parse --abbrev-ref HEAD Recupera il nome del ramo corrente nel repository specificato.
git -C $repoPath diff --name-only $branch Elenca i nomi dei file modificati nel ramo corrente rispetto al ramo specificato.
Where-Object Filtra gli oggetti in una raccolta in base alle condizioni specificate in PowerShell.
IVsWindowFrame Rappresenta una cornice di finestra in Visual Studio, utilizzata per personalizzare le finestre degli strumenti.
Package.Initialize() Esegue l'override del metodo di inizializzazione per un pacchetto Visual Studio per aggiungere logica personalizzata.
IVsWindowFrame.Show() Visualizza una finestra degli strumenti in Visual Studio.
Package La classe base per la creazione di un pacchetto Visual Studio in grado di estendere l'IDE.

Comprensione delle soluzioni di script

Lo script PowerShell fornito è progettato per filtrare le modifiche Git per mostrare solo quelle rilevanti per una soluzione specifica all'interno di un repository più grande. Inizia definendo il percorso del repository e recupera il ramo corrente utilizzando il comando . Successivamente, elenca i nomi dei file che sono stati modificati nel ramo corrente utilizzando . Lo script filtra quindi questi file modificati per includere solo quelli all'interno del percorso della soluzione specificato utilizzando , che ci consente di applicare una condizione secondo cui i percorsi dei file devono corrispondere al percorso della soluzione.

D'altra parte, l'estensione di Visual Studio scritta in C# personalizza la finestra Git Changes per filtrare e visualizzare le modifiche rilevanti. Si collega all'ambiente di Visual Studio utilizzando il file classe, che rappresenta una cornice di finestra all'interno di Visual Studio. La logica principale dell'estensione è incapsulata nel file metodo, dove trova la cornice della finestra Git Changes e applica la logica di filtro personalizzata per visualizzare solo le modifiche che fanno parte della soluzione corrente. Ciò aiuta gli sviluppatori a concentrarsi sulle modifiche rilevanti senza essere distratti da modifiche non correlate nel repository.

Filtraggio delle modifiche Git in base alla soluzione in Visual Studio

Utilizzo dello script di 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

Personalizzazione della visualizzazione delle modifiche Git in Visual Studio

Utilizzo dell'estensione di 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
            }
        }
    }
}

Gestione di più progetti in Visual Studio con Git

Un altro approccio alla gestione delle modifiche Git in Visual Studio consiste nell'usare le strategie di ramo in modo efficace. Creando rami separati per ogni applicazione o gruppo di applicazioni all'interno dello stesso repository, puoi isolare le modifiche e impedire che vengano visualizzate in progetti non correlati. In questo modo, quando passi da un ramo all'altro, nella finestra Git Changes vengono visualizzate solo le modifiche rilevanti per il ramo corrente. Questo metodo consente inoltre una migliore collaborazione poiché i membri del team possono lavorare su rami diversi senza interferire con il lavoro degli altri.

Inoltre, strumenti come i sottomoduli Git o Git sparse-checkout possono essere utilizzati per gestire repository di grandi dimensioni con più progetti. I sottomoduli Git ti consentono di includere altri repository all'interno di un repository, fornendo un migliore controllo sulle dipendenze e sulla segregazione dei progetti. Git sparse-checkout ti consente di estrarre solo un sottoinsieme dei file nel repository, riducendo la confusione nella directory di lavoro e rendendo più semplice concentrarsi su progetti specifici. Queste tecniche possono migliorare significativamente la produttività quando si ha a che fare con repository multiprogetto complessi.

  1. Come posso filtrare le modifiche a un progetto specifico in un repository multiprogetto?
  2. Puoi usare il comando in PowerShell per filtrare i file modificati per includere solo quelli all'interno del percorso della soluzione specificato.
  3. Cosa sono i sottomoduli Git e come aiutano?
  4. consentono di includere altri repository all'interno di un repository, fornendo un migliore controllo sulle dipendenze e sulla segregazione dei progetti.
  5. In che modo le strategie delle filiali aiutano a gestire i cambiamenti?
  6. Creando rami separati per ogni applicazione o gruppo di applicazioni, puoi isolare le modifiche ed evitare che incidano su progetti non correlati.
  7. Cos'è Git sparse-checkout?
  8. ti consente di estrarre solo un sottoinsieme dei file nel repository, facilitando la concentrazione su progetti specifici.
  9. Posso personalizzare la finestra Git Changes in Visual Studio?
  10. Sì, puoi personalizzarlo utilizzando un'estensione di Visual Studio scritta in C# che si collega alla finestra Git Changes e applica una logica di filtro personalizzata.
  11. Come posso recuperare il nome del ramo corrente in un repository?
  12. Puoi usare il comando per recuperare il nome del ramo corrente.
  13. Come elenco i nomi dei file modificati nel ramo corrente?
  14. Usa il comando per elencare i nomi dei file che sono cambiati nel ramo corrente.
  15. Qual è lo scopo del metodo Package.Initialize() in Visual Studio?
  16. IL Il metodo viene utilizzato per inizializzare un pacchetto di Visual Studio e aggiungere logica personalizzata, ad esempio filtrare la finestra Git Changes.
  17. Come posso visualizzare una finestra degli strumenti in Visual Studio?
  18. Puoi usare il metodo per visualizzare una finestra degli strumenti in Visual Studio.

La gestione delle modifiche Git su più progetti in Visual Studio può risultare complessa, soprattutto dopo il passaggio ad Azure DevOps. Le soluzioni discusse, inclusi gli script PowerShell e le estensioni di Visual Studio, offrono modi efficaci per filtrare le modifiche e concentrarsi su progetti specifici. L'implementazione di strategie di filiale, sottomoduli Git e checkout sparse può semplificare ulteriormente il flusso di lavoro e migliorare la produttività. Questi metodi aiutano a mantenere chiarezza e organizzazione, garantendo che gli sviluppatori possano concentrarsi sui cambiamenti più importanti per il loro lavoro attuale senza distrazioni inutili.