2012-07-13 2 views
2

내 프로젝트를 다른 플랫폼으로 이식하려고하는데이 새로운 플랫폼과 내가 시작한 플랫폼 사이에 약간의 차이점을 발견했습니다. autotools 패키지를 보았고이를 지원하는 스크립트를 구성했지만 새로운 플랫폼마다 별도의 분기를 갖는 것이 얼마나 실현 가능한지 궁금합니다.각 플랫폼마다 별도의 분기 유지

내가 보는 유일한 문제는 대상 플랫폼에서 개발을 수행 한 다음 플랫폼 종속적 인 변경 사항을 가져 오지 않고 다른 분기의 변경 사항을 병합하는 방법입니다. 그렇게 할 수있는 방법이 있다면 그것은 나에게 훨씬 더 깨끗하게 보일 것입니다.

이 방법을 권장하거나 권장 할 수없는 사람이 있습니까?

답변

0

대상 플랫폼에 대한 호환성을 위해 분기가 가능합니다. 대상 플랫폼과 관련이없는 변경 사항을 다른 분기로 분리해야합니다.

4

나는이 접근법을 확실히 권장하지 않을 것입니다.

병합 할 수없는 분기에 동일한 코드를 유지하면 문제가 발생합니다. 플랫폼 분기 중 하나에 변경 사항을 적용하는 것을 잊지 말아야 할 지점과 악몽에 적용된 변경 사항을 추적하는 것은 매우 혼란 스러울 것입니다.

언어는 언급하지 않았지만 언어에서 사용할 수있는 기능을 사용하여 플랫폼간에 코드 차이를 구분하지만 하나의 분기를 사용합니다. 예를 들어, C++에서는 먼저 파일 기반 분리를 사용해야합니다. 예를 들어 Mac, Linux 및 Windows 플랫폼 용 사운드 코드가있는 경우 sound_mac.cpp, sound_windows.cpp 및 sound_linux.cpp 파일을 만듭니다. 각 파일에는 동일한 클래스와 메서드가 포함되어 있지만 플랫폼에 특정한 구현은 매우 다릅니다. 당연히 특정 플랫폼의 IDE에만 해당 파일을 추가해야합니다. 따라서 Xcode 프로젝트는 sound_mac.cpp 파일을 가져오고 Visual Studio 프로젝트는 sound_windows.cpp 파일을 사용합니다. 이러한 클래스와 메서드를 참조하는 파일은 #ifdef를 사용하여 포함 할 헤더를 결정합니다.

설치 프로그램 스크립트와 비슷한 방법을 사용합니다. Windows에서보다 Mac에서 다른 설치 프로그램을 사용할 수도 있지만 두 파일 모두 지점에 있습니다. Mac의 빌드 스크립트는 Mac 관련 설치 프로그램 파일을 활용하고 Windows 관련 파일은 무시합니다.

하나의 브랜치에 물건을두고 현재 플랫폼에 적용되지 않는 것을 무시하면 토픽 브랜치와 마스터를 앞뒤로 병합 할 수있어서 인생을 훨씬 더 정숙하게 만듭니다.

+0

플랫폼 분기를 병합하지 않으면 어떻게됩니까? 플랫폼 간의 차이에 영향을주는 변경 사항을 처리해야 할 것입니다. 제안한 작업을 수행하면 플랫폼을 처리해야하는 부분 만 변경됩니다. – markw

+0

모든 플랫폼에 영향을 미치는 하나의 플랫폼 브랜치를 변경 한 경우 해당 변경 사항을 모든 플랫폼 브랜치에 병합해야합니다. 원하는 것을 할 수는 있지만 공통 코드에 대해 하나의 브랜치가 있어야하며 플랫폼 별 브랜치는 플랫폼 별 추가 만 포함해야합니다. 공통 코드에서 플랫폼 별 분기로만 병합 할 수 있으며 다른 방향으로는 사용할 수 없습니다. 그것은 할 수 있지만 지점 간 자유롭게 병합 할 수있는 코드베이스를 유지하는 것이 더 나은 계획이라고 생각합니다. – wadesworld

+0

이 대답을 수락하거나이 대답을 사용해도 문제가 해결되지 않으면 다른 대답을 만드는 것을 고려하십시오. 답변을 수락하지 않으면 사람들이 도움을 주려하지 않을 것입니다. – wadesworld

관련 문제