2014-11-15 3 views
12

여러 솔루션 중에서 공유 할 공유 코드가 있습니다. 대부분의 예제는 명령 줄을 사용하지만 Visual Studio 2013 (및/또는 TortoiseGit)을 사용하여 수행하려고합니까? 내가 무슨 짓을 Visual Studio에서 git 하위 모듈을 사용하기위한 워크 플로

- SolutionShared 
    - .git 
    - Project1Shared 
    - Project2Shared 
- Solution1 
    - .git 
    - ProjectFoo 
    - ProjectBar 
    - [SolutionShared] 
    - [Project1Shared] 
    - [Project2Shared] 
- Solution2 
    - .git 
    - ProjectBaz 
    - ProjectQux 
    - [SolutionShared] 
    - [Project1Shared] 
    - [Project2Shared] 

는 새로운 솔루션 SolutionShared을 만들 내 모든 공유 코드를 추가하고, 자신의 자식의 repo에 추가했다. 그런 다음 TortoiseGit을 사용하여 (Visual Studio를 수행하는 방법을 파악하지 못했기 때문에) 그 공유 저장소를 자식 서브 모듈로 Solution1Solution2에 추가했습니다.

1. Visual Studio에서 무엇을합니까?
두 가지 솔루션의 디렉토리는 SolutionShared입니다. Visual Studio에서 두 개의 하위 프로젝트 (Project1SharedProject2Shared)를 추가하기 만합니까?

2. 어떻게 비 공유 프로젝트 내에서 공유 코드를 변경해야합니까 어떻게
나는 비 공유 솔루션 중 하나에있어 및 서브 모듈에 뭔가를 변경하는 경우, 내가 공유 솔루션의 레포 (SolutionShared)를 다시 참조하여이를 참조하는 모든 솔루션에서 사용할 수 있습니까?

답변

6

많은 실험을 거친 후 ...

VS에서는 하위 모듈의 공유 프로젝트를 솔루션에 추가합니다. 그들은 버젼 관리 (versioning)까지 부모 솔루션의 "외부"에서 사는 것처럼 보입니다.

하위 모듈의 프로젝트를 편집하는 경우 로컬입니다. 그들은 커밋되어 소스 저장소로 푸시되어야합니다. 그런 다음 저장소에 병합해야합니다. 소스에서 변경 한 경우 솔루션의 git 하위 모듈로 수동으로 가져와야합니다.

문제는 VS가이 작업을 수행하지 않으므로 TortoiseGit 또는 명령 줄과 같은 것을 사용해야합니다.

+2

우리는 아직 CI가없는 CI 빌드에서 사용할 수없는 것 같습니다. – mbx

+1

submodules는 TeamCity CI – madsolver

+0

@mbx에서 매력처럼 작동합니다. 고급 설정에서 풀 서브 모듈로 tfs 온라인을 가져올 수 있습니다. VS 클라이언트는 이것을하지 않습니다. . –

3

이 작업을 수행하는 가장 쉬운 방법은 공유 된 각 코드 단위를 고유 한 Visual Studio 프로젝트로 이동하고 각 공유 된 Visual Studio 프로젝트를 자체 repo에 배치하는 것입니다.

그런 다음 해당 프로젝트 각각을 하위 모듈로 추가하여 필요한 솔루션에 추가합니다. 이것은 많은 프로젝트가 크기가 매우 커서 많은 코드를 공유 할 수 있기 때문에 유용합니다. 우리는이 목적으로 너겟 패키지를 광범위하게 사용했지만, 일반적으로 서브 모듈과 함께 더 나은 성공과 더 나은 디자인/디버그 경험을했습니다.

지난 몇 년 동안 Git과 관련하여 Microsoft에서 많은 부분이 변경되었습니다. Visual Studio Team Services (TFS Online) 및 On Prem-TFS (TFS2015 이후)는 이제 서브 모듈 작동 방법을 잘 이해하고 있으며 이제는 서브 모듈을 즉시 사용할 수있는 CI 빌드를 수행 할 수 있습니다.

그러나 온 프레미스 TFS 2015의 지원은 다소 버그가있을 수 있습니다. TFS Build의 서브 모듈에 대한 참조는 손상되어 버리는 습관을 가지며, 결과적으로 서브 모듈이 잘못되어있는 부분이 완전히 제거되고 다시 추가 될 때까지 경고없이 작동하지 않는 빌드를 만듭니다. 재미있는 과정이 아닙니다. 이러한 이유 때문에 (몇 가지 다른 것들 중에서) 우리는 현재 모든 것을 위해 VSTS (TFS Online)를 사용하고 있으며 같은 유형의 문제를 가지고 있지 않습니다. 나는 이것이 온 - 프레스 TFS 2017에서 고정되어 있다고 가정 할 것이다.

앞서 언급했듯이 Visual Studio 자체 (IDE)는 여전히 서브 모듈 관계를 이해하는 데 어려움이 있습니다. 그것은 정말로 그들을 다룰 수 없습니다. 나는 이와 같은 환경을 관리하는 가장 쉬운 방법을 찾기 위해 여러 독립형 힘내 도구를 시도했다. Tortoise는 repos가 포함 된 하위 모듈을 밀고 당기거나 체크인 할 때 가장 쉽고 재미있는 경험을 제공하는 것 같습니다. 나는 보통 서브 모듈을 추가하기 위해 명령을 사용하지만, Tortoise의 서브 모듈 기능 추가 기능도 잘 작동한다고 생각합니다.

Tortoise를 사용하여 repo에 코드를 커밋 할 때 하위 모듈이 더럽혀 질 때이를 알려주고 상위 레포를 체크인하기 전에 하위 모듈을 체크인하라는 메시지를 표시합니다. 정말 좋네요. 부모 레포를 당기거나 가져 오는 것은 다소 혼란 스러울 수 있습니다. 원격 지점에서 실제로 서브 모듈을 새로 고치지는 않습니다. 현재 가장 최신 레벨은 아닌 메인 저장소에 체크인 된 레벨로만 새로 고칩니다. 현실에서는 이것이 바람직한 행동입니다. 예상하지 못하는 경우에는 직관적이지 않습니다.