3

Visual Studio 2005 및 2008 버전의 라이브러리를 별도로 유지 관리 할 수있는 워크 플로를 개발하면서 한 지점의 변경 사항을 항상 다른 지점의 복제본 분기.Mercurial : Visual studio 2005 및 2008 지점 관리

현재로서는 기본 (VS2005) 분기 만 변경 한 다음 완료되면 VS2008 분기로 병합하는 것이 좋습니다. 불행히도 이것은 규율에 의존합니다. 문제가 발견되었을 때와 위기에 처했을 때 어려움이있을 수 있습니다. 이로 인해 나중에 한 브랜치의 변경 사항을 기본값으로 다시 변경하려고 시도해야했습니다.

VS2005와 VS2008 프로젝트 사이의 변경 사항을 패치 큐에 저장할 수 있지만 명령 줄 사용에 익숙한 팀원은 단 한 명 뿐이라고 동료 동료들은 Tortoise HG.

이와 같이 사실 이후 문제 해결에 의존합니다. 내 현재 절차에는 VS2008 분기의 모든 변경 집합에 대한 패치를 내보내고 기본 분기에 적용하는 작업이 포함됩니다. VS2008 브랜치의 팁을 기본 팁과 병합 한 다음 수작업으로 VS2005로 다시 변환하는 것보다 시간이 많이 걸리지 만 오류가 발생하지 않습니다.

this article을 읽었을 때 '업그레이드'변경 집합을 취소했지만 VS2008 분기의 새로운 팁으로 결과 제거 출력 세트가 항상 끝나고 결과적으로 변경 사항을 다시 병합 할 수 없습니다. 병합시 분기를 명시 적으로 닫으려고해도 VS2008 분기에서 병합이 끝납니다.

여러 가지 방법으로이 작업을 시도했지만 새로운 VS2008 분기 팁으로 끝나고 변경 내용을 기본 분기로 다시 병합 할 방법이 없습니다. 따라서, 나는 여기서 명백한 것을 놓친 것부터 시작하고있다.

궁극적으로 다른 두 사람이 느끼는 차이점은 프로젝트와 솔루션 파일에 포함 된 Visual Studio 버전 번호 만 차이가 나는 라이브러리의 두 버전을 유지하려고 할 때 가장 좋습니다.

편집 : 내가 피하려고하는 문제는 (쉽게 디버깅하기 위해) VS2005 솔루션에 VS2005 프로젝트를 추가하면 VS2005 프로젝트가 VS2008 프로젝트에 자동으로 '업그레이드'되어 '변경된'작업이 수행된다는 것입니다. 복사 및 불필요한 '변환'파일의 튀김. 따라서, 사람들이 메인 라인에 '업그레이드'하는 것을 유혹하는 대신 분기를 개별적으로 유지하고 사용자가 복제 후 첫 번째 업데이트에서 필요한 버전을 선택하도록하는 것이 더 좋습니다.


솔루션을 추가로 편집하십시오.

좀 더 엉망이되어서이 워크 플로를 표준 TortoiseHg 도구와 함께 작동시키는 방법을 발견했으며 명령 줄 개입은 상황을 설정하는 데에만 필요했습니다.

먼저 프로젝트가 VS2005에서 VS2008로 변환 된 변경 집합으로 업데이트되었습니다. 나는 그 개정판을 철회하고, 백 아웃의 패치를 만들고, 기본 분기에 있었기 때문에 철회 된 changeset를 제거했다. 그런 다음 ht patch --no-commit patch를 사용하여 백 아웃 패치를 변환 변경 집합에 적용한 다음 새 "VS2005"분기 이름으로 패치를 작성했습니다. 그런 다음 (익명) VS2005 분기의 끝에서 병합했습니다.

다음 단계는 (비 꾸미어진) VS2008 브랜치의 이전 팁으로 업데이트하여 중요한 변경을 수행하고 새로운 "VS2008"브랜치로 커밋하는 것입니다. 그런 다음 VS2005 팁에서 변경 사항을 병합했지만 컴 피트 할 때 csproj 파일의 변경 사항을 허용하지 않았습니다.나는 커밋 후에이 파일들을 되 돌렸다.

마지막으로 VS2005 팁으로 업데이트하고 VS2008 팁을 병합했습니다.

이렇게하면 VS2005에서 VS2008 로의 변환으로 인한 차이점을 제외하고 두 가지 팁이 동일한 코드로 나타납니다.

새로운 워크 플로우 : 필요에 따라 VS2005 또는 VS2008 지점 중 하나에

  • 일.
  • 한 분기에서 업데이트가 완료되면 다른 분기로 업데이트하고 수정 된 분기의 변경 사항을 병합 한 후 자체 분기로 커밋합니다. 그런 다음 원하는 지점으로 다시 업데이트하십시오.
  • 두 분기에서 동시에 업데이트가 발생하면 두 분기를 별도로 수행하십시오. VS2005 팁을 업데이트하고 VS2008 팁을 병합 한 다음 VS2008 팁으로 업데이트하고 이전 (병합 전) VS2005 팁으로 병합하십시오.
+0

두 버전 (2005 및 2008)을 말하면 VS 솔루션 일 뿐이며 코드에 특정 비트가 포함되어 있습니까? –

+0

실제 코드를 변경해서는 안된다는 아이디어가 있습니다. –

답변

0

그것은 내 자신의 질문에 대답하기 조금 이상한 것 같다,하지만이 일을하지 않고 나는이 질문이 허용 대답을 가지고 유래을 표시 할 수 없습니다.

자세한 내용은 가로 규칙 뒤에 내 질문을 참조하십시오.

elses 답변에 대한 감사 인사를 추가해야합니다. 전 premake에 대한 사용을 찾을 수 있으며, 별도의 프로젝트/솔루션 파일은 다른 상황에서 작동 할 수 있습니다. 어느 날 나는 의심 할 여지없이 Mercurial Queues에 대한 사용법을 스스로 발견 할 것이지만, 나머지 개발 팀에게 사용하게 될지 의심 스럽다. 필자는 Windows에서의 하드 링크에 익숙하지 않았으므로 아마도 그렇게하려고하지는 않을 것입니다. 그러나 그것들의 존재를 일깨워주는 것이 좋습니다.

& 다시 응답 해 주신 모든 분께 감사드립니다.

1

우리는 별도의 솔루션 및 프로젝트 파일을 사용합니다. .sln 및 .csproj/.vcproj/.vbproj를 복사하고 메모장에서 편집하여 새 파일을 사용합니다. 클래스를 추가 할 때 다른 솔루션에 파일을 추가하는 것을 기억해야하지만 그렇지 않으면 수정 사항을 복사 할 필요가 없습니다.

1

Mercurial: The Definitive Guide 책에는 Mercurial Patch Queues를 사용하여 이전 Linux 커널의 백 포트를 유지 관리 할 때 whole chapter이 있습니다. 나는 mq extension가 당신을 도울 수 있다고 생각합니다. premake을 시도 :

+0

내가 말했듯이, MQ를 직접 사용하여 행복하게 할 수는 있지만 나머지 그룹을 설득하여 사용하는 것은 까다 롭습니다. VS2008에 병합을 수행하는 절차를 따르지 못하면 패치 대기열을 밀고 당기는 방식으로 구입할 수있는 방법을 알 수 없습니다. 내가 정말로 필요로하는 것은 사실 이후에 문제를 (절차를 잊은 상태로) 고칠 수있는 더 쉬운 방법이다. –

2

대신 문제를 해결 당신은 멀리 갈 수 있도록 시도 할 수 있습니다.

Premake는 (이름에서 알 수 있듯이이 사전 메이크업 또는 사전 MSBuild에서 만약에 당신을 실행하기위한 것입니다) 사전 제작 시스템입니다. 프로젝트 을 위에 구축 된 선언적 내부 DSL에 한 번 기술하면 premake는 VS2008, 2005, 2003 및 2002, MonoDevelop, SharpDevelop, Code :: Blocks, CodeLite 또는 GNU Makefile에 대한 솔루션 및 프로젝트를 자동으로 생성 할 수 있습니다. 유닉스, Cygwin 또는 MinGW. 현재 32/64 비트, OSX Universal Binaries, PlayStation 3 및 XBox 360에 대한 크로스 컴파일을 포함하여 C++, C 및 C# 프로젝트를 지원합니다.

구성 언어는 very clean and declarative입니다. 그러나 Lua 위에 내부 DSL로 구축되면 매우 강력하고 아름답고 표현력이 뛰어나며 (가장 중요한 것은 튜링 완료) 스크립팅 언어를 손쉽게 사용할 수 있습니다. 구성 언어의 구조와 전문 용어는 모두 Visual Studio를 기반으로합니다. solutions, projects, configurationsplatforms에 대해 설명합니다.

premake 도구 자체가 루아 인터프리터, 루아 표준 라이브러리와 물론 premake 스크립트 자체를 포함 distributed as just a single .exe입니다. 그것은 외부 의존성을 전혀 가지지 않으며, 설정 파일을 쓰지도 않으며 레지스트리를 쓰거나 읽는 것조차하지 않습니다.

VS2008 솔루션을 수동으로 번으로 번역하기 만하면됩니다.

+0

이것은 멋지지만 몇 가지 기능이 부족한 것으로 보이며 5 월의 패치가 빌드에 포함되지 않았습니다. 정체 된 것으로 보입니다. –

+0

소스 코드 저장소에 대한 마지막 커밋은 46 시간 전이었습니다. 곧 출시 될 4.2 릴리스 (XCode IDE 및 Objective-C 및 Objective-C++ 지원)에 대한 베타 릴리스는 20 일 및 25 일 전에 출시되었습니다. 현재 stable 4.1 릴리스의 3 개월, 5 개월, 6 개월 전이었습니다. 누군가 포럼에서 질문을 한 지 2 주 밖에되지 않았고 저자가 수 분 내에 응답했습니다. 포럼에 저자의 마지막 게시물 어제했다. 그래서, 그것은 저에게 정체되어 보이지 않습니다. –

+0

오프 - 기회 누군가가 Premke 정보를 찾는 동안이 스레드를 찾습니다 : 우리는 Xcode 지원이 문 밖으로 나가야하는 동안 그들은 크고 추가 작업이 필요하기 때문에 그 패치를 밀었습니다. 나는 우리 트랙 기록이 전반적으로 꽤 좋았다고 생각한다. 아무런 공격도하지 않고 그냥 기록을 지우고 싶었습니다. – starkos

0

아마도 두 개의 다른 분기를 유지하면서 소스 코드와 Visual Studio 2005 프로젝트 파일을 포함하는 하나의 분기 만 유지해야합니다. 두 번째 분기에는 소스 코드가 아닌 Visual Studio 2008 프로젝트 파일 만 포함되어야합니다.Visual Studio 2008 버전을 컴파일하려면 로컬 드라이브에서 모든 소스 파일에 대한 하드 링크를 만들어 두 폴더 트리에 표시되도록합니다 (하드 링크 작성을 배치 파일에 저장하고 저장소에서 최신 업데이트를 가져 오는 명령과 함께 배치하십시오). 이 방법을 사용하려면 NTFS 파일 시스템과 적절한 "ln"명령 줄 도구 (예 : this one)가 필요합니다.

소스 코드를 원하는 폴더에서 디버깅/편집 할 수 있으므로 모든 변경 사항이 다른 폴더에도 즉시 표시됩니다.

편집 : 예, 직접 시도했지만 작동합니다. Visual Studio 2008 및 이전 버전의 Borland 컴파일러로 컴파일 할 C++ 응용 프로그램과 매우 유사한 시나리오가 있습니다.