2010-05-20 3 views
3

.NET 3.5로 작성된 다소 큰 클래스 라이브러리가 있으므로 .NET 4.0에서도 사용할 수 있도록 업그레이드하고 싶습니다.Mercurial : .NET 3.5 및 4.0 모두에 대해 존재할 클래스 라이브러리입니까?

그 과정에서 많은 오래된 잼을 없애고 TPL과 같은 새로운 클래스와 지원을 더 잘 활용할 수 있도록 코드를 다시 작성합니다. 따라서 클래스 라이브러리는 갈라 지지만 여전히 동일한 버그 수정이 동일한 방식으로 수행 될 수있을만큼 충분히 유사해야합니다.

Mercurial에서이 클래스 라이브러리를 어떻게 구성해야합니까? 그게 중요하다면 나는 Kiln (fogbugz)을 사용하고있다. 이식 또한,

    하나 개의 저장소에
  1. 명명 된 지점은, 다음 하나 개의 저장소에서 다른
  2. 이름 나뭇 가지 하나에서 모든 버그 수정을 이식 할 수 있지만, 나는이 모양을 생각 :

    나는 생각하고 지저분한

  3. 별도의 저장소는 버그 수정을 다시 구현할 (또는 도와 비 수은 - integraded 비교할 도구를 사용하여)

당신이 무엇을 할 것입니까? (내가 가지고 있지 않은 다른 대안도 환영합니다.)

클래스 라이브러리는 꽤 많은 부분으로 나뉘어집니다. Linq와 비슷한 기능을하는 오래된 컬렉션 유형 코드의 일부 잔해가 있습니다. 나는 제거 할 것이고, Linq-methods를 사용하기 위해 다시 쓰는 코드를 사용할 것이다. 따라서 프로젝트 파일을 복사하고 #if NET40..#endif 섹션을 사용하는 것만으로는 효과가 없습니다. 또한 3.5 버전의 클래스 라이브러리는 많은 새로운 기능을 제공하지 않을 것이며, 대부분 중요한 버그 수정이 필요하므로 두 버전을 모두 "동등하게"유지하는 것은 실제로 필요하지 않습니다. 따라서 모든 파일을 별도로 복사하면 충분합니다. ,

  1. 두 가지를 작성 (또는 "기본"을 유지하고 다른 경로를 다른 분기를 만들 : @Rudi의 대답 here에서


    편집, 내가 무엇을 그가 말하는 것은이 생각 "default"=. NET 4.0 및 "net35"=. NET 3.5 경우)

  2. 중요한 버그 수정이 발견되고 두 버전 이자형. 버전 3.5는 새로운 기능이 많이 생기지 않으므로 버그가 원래 버전에 있음을 의미합니다 (분기하기 전에)
  3. I 따라서 원래 버전에서 (또는 아주 가까이에) 다른 브랜치를 만들고, 내 버그 픽스를 구현 한 다음, 3.5 및 4.0 브랜치에이 팁을 병합하여 둘 다 업데이트한다.

나는 이것에 대해 생각할 것입니다. 변경 사항이 아니라 파일에서 Mercurial이 합병되는 것 같습니다. 즉, 버그 수정이 필요한 파일에 수행 된 모든 변경 사항이 초기 단계로 다시 병합 될 위험이 있지만이를 테스트해야합니다.

+0

수은과 병합은 파일이 아니라 변경 세트에 대한 것입니다. Mercurial은 이름이 바뀌거나 복사 된 파일에 변경 사항을 적용하기도합니다. (복사본이 수은 ['hg cp'또는'hg mv']에게 전해지면 자동으로 이동 또는 복사본을 추적하지 않습니다). 지점 지점에 가깝다는 나의 요지는 무관 한 변화를 이끌어 내지 않는 것입니다. http://nvie.com/git-model에서 가능한 개발 모델 및 http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/을 확인하십시오. 수은 (그리고 자식) 가지에 대한 더 깊은 설명을 위해. http://stackoverflow.com/questions/2621610에도 많은 리소스가 포함되어 있습니다. – Rudi

답변

3

서로 다른 환경 (기본적으로 두 개의 익명 분기)에 대해 두 개의 복제본을 사용하고 각 복제본 내에 다른 분기 이름을 사용할 수도 있습니다.또한 각 버그 수정 또는 상호 교환 가능한 기능에 대해 새 분기를 사용하여 가능한 한 분기점에 가장 가까운 지점에서 시작하여 주 분기 간의 병합을 더 쉽게 만듭니다. 4.0 트리의 버그 수정이 다른 변경으로 인해 병합 문제를 일으킬 가능성이 더 높으므로 3.5 분기에서 버그 수정을 개발하려고합니다 (이 방법으로 문제가 발생하지 않는다고 말하는 것은 아닙니다).

+0

방금 ​​지사를 만들었으며 두 개는 지금 동일하다고 가정 해 보겠습니다. 그렇다면 예를 들어 3.5 버전의 일부 코드와 4.0 버전의 많은 코드를 제거하는 등 여러 가지 편집 작업을 수행합니다. 일반적인 버그 수정을 구현하려면 다른 분기를 원래 분기점 (여전히 비슷한 위치)에 가깝게 만든 다음 두 분기의 팁에 버그 수정을 위해 새 분기를 병합해야합니다. 너 이거 봤니? 나는 그걸 생각하지 못했습니다 ... –

+0

@Lasse V. Karlsen. 요점은 병합 원본과 병합 대상 사이에 최소한의 커밋이 있다는 것입니다. 이 교환을 사용하면 일반적으로 병합 대상 측에서 변경 세트를 줄일 가능성이 없습니다 (일반적으로 팁으로 이동해야하기 때문에). 따라서 주 플랜은 분기 지점에서 변경 세트를 시작하는 것입니다. 단점은이 경우 두 가지 병합을 수행해야한다는 것입니다. 하나는 다른 지점으로의 이식을위한 것이고 다른 하나는 동일한 지점 내부에서 버그 수정을 자체 분기의 끝으로 가져 오는 것입니다. – Rudi

관련 문제