Visual Studio의 여러 프로젝트에서 Git 변경 사항 처리

Visual Studio의 여러 프로젝트에서 Git 변경 사항 처리
Visual Studio의 여러 프로젝트에서 Git 변경 사항 처리

Git 변경 관리 소개

우리는 최근 Azure DevOps로 전환했으며 광범위한 482개 애플리케이션 컬렉션에서 사용성 문제에 직면했습니다. 이러한 애플리케이션은 각각 여러 솔루션을 포함하는 저장소로 그룹화됩니다. 이러한 저장소 하나에는 5개의 애플리케이션이 있으며, 하나의 솔루션에는 20개 이상의 프로젝트가 포함되어 있으며, 애플리케이션 전체에서 하나만 공유되는 반면 다른 저장소에는 10~15개의 고유 프로젝트가 있습니다.

동일한 저장소 내에서 동시에 여러 애플리케이션을 작업할 때 문제가 발생합니다. 솔루션의 프로젝트와 관련된 변경 사항만 표시하기 위해 변경 사항을 필터링한 SVN과 달리 Visual Studio의 Git 변경 사항은 리포지토리의 모든 변경 사항을 표시합니다. 이로 인해 보기가 어수선해져서 특정 프로젝트에 집중하기가 어려워집니다. 우리는 이를 효과적으로 관리할 수 있는 방법을 모색하고 있습니다.

명령 설명
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 변경 사항을 필터링하여 더 큰 저장소 내의 특정 솔루션과 관련된 변경 사항만 표시하도록 설계되었습니다. 저장소에 대한 경로를 정의하는 것으로 시작하고 다음 명령을 사용하여 현재 분기를 검색합니다. git -C $repoPath rev-parse --abbrev-ref HEAD. 다음으로 다음을 사용하여 현재 분기에서 변경된 파일 이름을 나열합니다. git -C $repoPath diff --name-only $branch. 그런 다음 스크립트는 다음을 사용하여 지정된 솔루션 경로 내의 파일만 포함하도록 이러한 변경된 파일을 필터링합니다. Where-Object, 파일 경로가 솔루션 경로와 일치해야 한다는 조건을 적용할 수 있습니다.

반면 C#으로 작성된 Visual Studio 확장은 Git 변경 창을 사용자 지정하여 관련 변경 사항을 필터링하고 표시합니다. 다음을 사용하여 Visual Studio 환경에 연결됩니다. Visual Studio 내의 창 프레임을 나타내는 클래스입니다. 확장의 주요 논리는 Package.Initialize() 여기서는 Git 변경 창 프레임을 찾고 사용자 지정 필터링 논리를 적용하여 현재 솔루션의 일부인 변경 사항만 표시합니다. 이를 통해 개발자는 저장소의 관련 없는 수정 사항으로 인해 주의가 산만해지지 않고 관련 변경 사항에 집중할 수 있습니다.

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 변경 창에 표시됩니다. 또한 이 방법을 사용하면 팀 구성원이 서로의 작업을 방해하지 않고 서로 다른 지점에서 작업할 수 있으므로 더 나은 협업이 가능합니다.

또한 Git 하위 모듈 또는 Git sparse-checkout과 같은 도구를 사용하여 여러 프로젝트가 포함된 대규모 리포지토리를 관리할 수 있습니다. Git 하위 모듈을 사용하면 저장소 내에 다른 저장소를 포함할 수 있어 종속성과 프로젝트 분리를 더 효과적으로 제어할 수 있습니다. Git sparse-checkout을 사용하면 저장소에 있는 파일의 하위 집합만 체크아웃하여 작업 디렉터리의 혼란을 줄이고 특정 프로젝트에 더 쉽게 집중할 수 있습니다. 이러한 기술은 복잡한 다중 프로젝트 저장소를 처리할 때 생산성을 크게 향상시킬 수 있습니다.

Visual Studio에서 Git 변경 사항 관리에 대한 일반적인 질문 및 솔루션

  1. 다중 프로젝트 저장소에서 특정 프로젝트에 대한 변경 사항을 필터링하려면 어떻게 해야 합니까?
  2. 당신은 사용할 수 있습니다 Where-Object 지정된 솔루션 경로 내의 파일만 포함하도록 변경된 파일을 필터링하는 PowerShell의 명령입니다.
  3. Git 하위 모듈은 무엇이며 어떻게 도움이 됩니까?
  4. Git submodules 저장소 내에 다른 저장소를 포함할 수 있으므로 종속성과 프로젝트 분리를 더 효과적으로 제어할 수 있습니다.
  5. 변경 관리에 지점 전략이 어떻게 도움이 됩니까?
  6. 각 애플리케이션 또는 애플리케이션 그룹에 대해 별도의 분기를 생성하면 변경 사항을 격리하고 관련 없는 프로젝트에 영향을 주지 않도록 할 수 있습니다.
  7. Git 스파스 체크아웃이란 무엇입니까?
  8. Git sparse-checkout 저장소에 있는 파일의 하위 집합만 체크아웃할 수 있으므로 특정 프로젝트에 더 쉽게 집중할 수 있습니다.
  9. Visual Studio에서 Git 변경 창을 사용자 지정할 수 있나요?
  10. 예, Git 변경 창에 연결되고 사용자 지정 필터링 논리를 적용하는 C#으로 작성된 Visual Studio 확장을 사용하여 사용자 지정할 수 있습니다.
  11. 저장소에서 현재 분기 이름을 어떻게 검색합니까?
  12. 다음 명령을 사용할 수 있습니다. git -C $repoPath rev-parse --abbrev-ref HEAD 현재 지점 이름을 검색합니다.
  13. 현재 브랜치에서 변경된 파일 이름을 어떻게 나열합니까?
  14. 명령을 사용하십시오 git -C $repoPath diff --name-only $branch 현재 분기에서 변경된 파일 이름을 나열합니다.
  15. Visual Studio에서 Package.Initialize() 메서드의 목적은 무엇입니까?
  16. 그만큼 Package.Initialize() 메서드는 Visual Studio 패키지를 초기화하고 Git 변경 창 필터링과 같은 사용자 지정 논리를 추가하는 데 사용됩니다.
  17. Visual Studio에서 도구 창을 표시하려면 어떻게 해야 하나요?
  18. 당신은 사용할 수 있습니다 IVsWindowFrame.Show() Visual Studio에서 도구 창을 표시하는 방법입니다.

Git 변경 관리에 대한 최종 생각

Visual Studio의 여러 프로젝트에서 Git 변경 사항을 관리하는 것은 어려울 수 있으며, 특히 Azure DevOps로 전환한 후에는 더욱 그렇습니다. PowerShell 스크립트 및 Visual Studio 확장을 포함하여 논의된 솔루션은 변경 사항을 필터링하고 특정 프로젝트에 집중할 수 있는 효과적인 방법을 제공합니다. 분기 전략, Git 하위 모듈 및 스파스 체크아웃을 구현하면 워크플로우를 더욱 간소화하고 생산성을 향상시킬 수 있습니다. 이러한 방법은 명확성과 구성을 유지하는 데 도움이 되므로 개발자는 불필요한 방해 없이 현재 작업에 가장 중요한 변경 사항에 집중할 수 있습니다.