2017-04-26 1 views
3

내 개발자 팀은 6 개의 솔루션 (일명 섹션)으로 구성된 중간 크기의 응용 프로그램을 유지 관리합니다. 현재 소스 제어를 위해 TFS를 사용합니다. 각 솔루션은 고유 한 Main 브랜치에 있습니다.하나의 큰 Git repo 또는 여러개의 작은 것들

힘내로 이전하고 싶습니다. 내 문제는 모든 6 솔루션에 대해 1 Git repo를 사용할지 아니면 각 솔루션에 대해 별도 Git repo를 사용할지 여부입니다.

  • 팀을 위해 복잡성을 감소 :

    나는 때문에, 하나 개의 망할 놈의 repo를 가진 매력 있어요.

  • 하나의 커밋은 여러 솔루션에서 관련 변경 사항을 가질 수 있습니다 (예 : 한 솔루션에서 다른 솔루션으로 코드 이동).

반면에 하나의 Git repo는 솔루션을 변경하면 TeamCity CI 서버에서 모든 솔루션을 완전히 다시 빌드 할 수 있다는 의미입니다.

이 문제에 대한 다른 팀 리드의 통찰력을 찾으십시오.

답변

4

git를 사용하는 경우에도 현재 프로젝트별로 1 개의 repo를 사용한다고 인정됩니다. 대부분의 답변 또는 조언에서이를 알려줄 것입니다. 실제로는 모든 것을 같은 저장소에 저장하는 솔루션입니다. 'monorepo'전략.

빅 인터넷 플레이어는 Google, Facebook, Microsoft와 같이 (거의) 가고 있습니다. 그래서 프로와 단점에 대한 몇 가지 문서를 쉽게 찾을 수 있습니다.

예 : 보인다으로 https://github.com/babel/babel/blob/4c371132ae7321f6d08567eab54a59049e07f246/doc/design/monorepo.md 당신은 주요 문제 중 하나는 버전 관리 도구의 성능이라고 이해하면

(그러나 자식은 반드시 5 개발팀을 지원할 수)는, 그것은 ... 프로젝트 느낌이 더 당신은 이미 몇몇 이점을 인식하고있는 것으로 보이고, 나는 당신이 그것을 시험 할 것을 강력하게 조언합니다!

또한 저장소를 병합하는 git 명령 (기록 보관)은 저장소를 병합하는 것보다 훨씬 쉽기 때문에 먼저 시도해보십시오.

우리 팀에서는 우리가 monorepo에 점점 더 많이 다가 가고 있습니다.

내 개발자 5 명은 6 개의 솔루션 (일명 섹션)으로 구성된 중간 규모 응용 프로그램을 유지 관리합니다.

한 응용 프로그램의 경우 monorepo가 ​​실제로 좋은 해결책 일 수 있습니다.

하지만 해결해야 할 문제는 누겟으로 관리하는 솔루션간에 종속성이있는 경우입니다.

너겟 사용을 제거하고 이진 의존성을 사용하면 (체크인하지 않고!) 모든 빌드가 필요하지만 분기를 사용하기가 어려울 수 있습니다.

두 개의 커밋을 사용하여 여러 개의 git 리포지토리와 마찬가지로 업데이트를 수행 할 수 있습니다. 수동으로 또는 빌드로 자동화 할 수 있습니다.

시 : 자식 서브 모듈이되도록 기반으로하는 솔루션 반면에

:-(통증이있을 것입니다 ... 어려운 매우 자식 처음 사용자를위한 adviced 아닌, 하나 개의 망할 놈의 repo 어떤 솔루션을 변경해도 TeamCity CI 서버의 모든 솔루션을 완전히 새로 빌드 할 수 있습니다.

각 솔루션마다 다른 빌드를 만들고 솔루션 폴더에서만 각 팀십 트리거를 설정할 필요는 없습니다.

Ps2 : 예상보다 긴 대답을했습니다. 도움이 되었기를 바랍니다.

1

방법론을 현재대로 유지하면서 솔루션 당 하나의 저장소로 유지하십시오. 필요한 경우 특정 리포지토리의 변경 사항을 기반으로 빌드하도록 TeamCity를 구성하십시오. 젠킨스가이 일을 할 수 있다는 걸 압니다.

1

각 프로젝트를 자체 repo에 보관하고 빌드 서버가 개별 프로젝트와 상호 작용하도록했습니다. 개별 프로젝트 리포지토리를 하위 모듈로 포함하는 단일 리포를 생성하여 개발자를위한 작업을 단순화하고 변경된 리포지토리의 변경 사항 조정을 용이하게 할 수 있습니다. 따라서 개발자는 큰 저장소 (서브 모듈 참조를 통해 프로젝트 저장소를 가져옵니다)를 확인하고 빌드 서버가 프로젝트 저장소를 가져옵니다.

+0

팀에서 서브 모듈에 대한 경험이 많지 않은 경우이 방법을 사용하지 않는 것이 좋습니다. 서브 모듈은 종이 위에는 멋지지만 실제로는 엉망이 될 수 있습니다. – zypherman

+0

"경험이 없으면 경험이 없습니까?" 당신이 그들과 구체적인 이슈가 있다면 나는 그것에 대해 듣고 싶을 것이다. 그러나 이것은 FUD 사람들이 던져 버릴 수없는 것처럼 들리 겠지만 - 원하지도 않는다 - 제대로 기능을 사용하는 법을 배우게된다. . –

0

VCS 액세스를 전세계에 공개하려는 오픈 소스의 경우 프로젝트 당 저장소가 있어야합니다.

내부 작업의 경우 하나의 저장소 (또는 몇 개의 큰 저장소)가 훨씬 우수합니다. 그렇지 않으면 자원을 상호 작용하거나 공유해야하는 코드베이스 간의 일관성을 보장하는 것과 같은 일을하는 것이 매우 어렵습니다. 실제로 많은 저장소가있는 모든 상황에서 추가 저장소를 불필요하게 작업해야하므로 추가 오버 헤드 및 동기화 문제에 문제가 있음을 발견했습니다.

경고가 있습니다. 서로 관계가없는 일을 위해, 그들은 행복하게 분리 된 저장소에있을 수 있습니다. Git은 또한 mono-repos와 함께 특정 결함이 있습니다. monorepo가 ​​잘 작동하는 SVN (외부, 전체 레포를 가져올 필요가없고, 특정 폴더를 얻을 수있는 등)과 비교해 보면 알 수 있습니다. 당신은 symlink를 사용하는 것과 같은 것들을 사용할 수 있습니다.

관련 문제