在 Visual Studio 中处理跨多个项目的 Git 更改

PowerShell

管理 Git 更改简介

我们最近过渡到 Azure DevOps,并遇到了 482 个应用程序的广泛集合的可用性问题。这些应用程序被分组到存储库中,每个存储库包含多个解决方案。其中一个存储库包含 5 个应用程序,其中一个解决方案拥有 20 多个项目,其中只有一个项目在应用程序之间共享,而其他解决方案则拥有 10 到 15 个独特的项目。

当在同一个存储库中同时处理多个应用程序时,我们会遇到挑战。与 SVN 过滤更改以仅显示与解决方案中的项目相关的更改不同,Visual Studio 的 Git Changes 显示存储库中的所有更改。这会产生混乱的视图,使得很难专注于特定项目。我们正在探索有效管理这一问题的方法。

命令 描述
git -C $repoPath rev-parse --abbrev-ref HEAD 检索指定存储库中的当前分支名称。
git -C $repoPath diff --name-only $branch 列出当前分支中与指定分支相比发生更改的文件名称。
Where-Object 根据 PowerShell 中的指定条件过滤集合中的对象。
IVsWindowFrame 表示 Visual Studio 中的窗口框架,用于自定义工具窗口。
Package.Initialize() 重写 Visual Studio 包的初始化方法以添加自定义逻辑。
IVsWindowFrame.Show() 在 Visual Studio 中显示工具窗口。
Package 用于创建可扩展 IDE 的 Visual Studio 包的基类。

了解脚本解决方案

提供的 PowerShell 脚本旨在过滤 Git 更改,以仅显示与较大存储库中的特定解决方案相关的更改。它首先定义存储库的路径,并使用命令检索当前分支 。接下来,它列出了当前分支中已更改的文件的名称,使用 。然后,该脚本会过滤这些已更改的文件,以仅包含指定解决方案路径中的文件 ,这允许我们应用文件路径必须与解决方案路径匹配的条件。

另一方面,用 C# 编写的 Visual Studio 扩展自定义了 Git Changes 窗口来过滤和显示相关更改。它使用以下方式连接到 Visual Studio 环境 类,代表 Visual Studio 中的窗口框架。扩展的主要逻辑封装在 方法,它找到 Git Changes 窗口框架并应用自定义过滤逻辑以仅显示属于当前解决方案的更改。这有助于开发人员专注于相关更改,而不会因存储库中不相关的修改而分心。

在 Visual Studio 中按解决方案筛选 Git 更改

使用 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

自定义 Visual Studio 中的 Git 更改显示

使用 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
            }
        }
    }
}

使用 Git 在 Visual Studio 中管理多个项目

在 Visual Studio 中管理 Git 更改的另一种方法是有效使用分支策略。通过为同一存储库中的每个应用程序或应用程序组创建单独的分支,您可以隔离更改并防止它们出现在不相关的项目中。这样,当您在分支之间切换时,只有与当前分支相关的更改才会显示在 Git Changes 窗口中。这种方法还可以实现更好的协作,因为团队成员可以在不同的分支上工作,而不会干扰彼此的工作。

此外,Git 子模块或 Git Sparse-Checkout 等工具可用于管理具有多个项目的大型存储库。 Git 子模块允许您在存储库中包含其他存储库,从而更好地控制依赖关系和项目隔离。 Git稀疏签出允许您仅签出存储库中的文件子集,从而减少工作目录中的混乱并使其更容易专注于特定项目。在处理复杂的多项目存储库时,这些技术可以显着提高生产力。

  1. 如何过滤对多项目存储库中特定项目的更改?
  2. 您可以使用 PowerShell 中的命令可筛选已更改的文件,以仅包含指定解决方案路径中的文件。
  3. 什么是 Git 子模块,它们有何帮助?
  4. 允许您在存储库中包含其他存储库,从而更好地控制依赖关系和项目隔离。
  5. 分支机构策略如何帮助管理变革?
  6. 通过为每个应用程序或应用程序组创建单独的分支,您可以隔离更改并防止它们影响不相关的项目。
  7. 什么是 Git 稀疏结帐?
  8. 让您只查看存储库中文件的子集,从而更轻松地专注于特定项目。
  9. 我可以在 Visual Studio 中自定义 Git 更改窗口吗?
  10. 是的,您可以使用用 C# 编写的 Visual Studio 扩展来自定义它,该扩展挂钩到 Git 更改窗口并应用自定义过滤逻辑。
  11. 如何检索存储库中的当前分支名称?
  12. 您可以使用命令 检索当前分支名称。
  13. 如何列出当前分支中更改的文件名?
  14. 使用命令 列出当前分支中已更改的文件的名称。
  15. Visual Studio 中的 Package.Initialize() 方法的用途是什么?
  16. 这 方法用于初始化 Visual Studio 包并添加自定义逻辑,例如过滤 Git Changes 窗口。
  17. 如何在 Visual Studio 中显示工具窗口?
  18. 您可以使用 方法在 Visual Studio 中显示工具窗口。

在 Visual Studio 中管理多个项目中的 Git 更改可能具有挑战性,尤其是在切换到 Azure DevOps 后。所讨论的解决方案(包括 PowerShell 脚本和 Visual Studio 扩展)提供了过滤更改并专注于特定项目的有效方法。实施分支策略、Git 子模块和稀疏签出可以进一步简化工作流程并提高生产力。这些方法有助于保持清晰度和组织性,确保开发人员能够专注于对其当前工作最重要的更改,而不会受到不必要的干扰。