팀은 소스 파일의 덮어 쓰기 작업을 어떻게 방지합니까? [닫은]


26

예를 들어 게임 엔진과 같이 여러 사람이 동시에 작업하는 동안 덮어 쓰기가 어떻게 방지 될 수 있습니까?

하자 말의 개발자 하나 에 노력 Audio.cpp하고 개발자 두 도에 작동하고 Audio.cpp, 방법이 일반적으로 전투 덮어 쓰기에 큰 팀에서 관리한다? (즉 , 개발자 1 이 완료 될 때까지 개발자 2 가 파일을 열지 못하게 하려면 )


84
선택한 태그 중 하나가 이미 답변입니다.
Philipp

18
사실, 4 개 태그의 3은 대답하지만, 하나는 대답.
MSalters

답변:


69

게임 개발뿐만 아니라 대부분의 소프트웨어 개발 팀은 버전 관리 소프트웨어를 사용하여이 문제를 해결 합니다 . 예는

이러한 모든 도구에는 약간의 차이가 있지만 기본 워크 플로우는 일반적으로 다음과 같습니다. 전체 코드베이스가있는 프로젝트를위한 중앙 저장소가 하나 있습니다. 개발자가 프로젝트에 참여하려고 할 때 "체크 아웃"을 수행합니다. 버전 제어 소프트웨어는 코드베이스를 로컬 시스템에 복사합니다. 소프트웨어는 코드베이스의 현재 버전 ( "개정")을 기억합니다. 개발자가 변경을 수행하고이를 메인 리포지토리에 배치하려고하면 "커밋"을 수행합니다. 변경 사항이 중앙 리포지토리에 업로드되고 새 개정 번호가 생성됩니다.

다른 개발자가 변경 사항을 커밋하려고하지만 한 번 체크 아웃 한 개정판이 더 이상 최신 개정판이 아닌 경우 버전 관리 시스템에서는이를 허용하지 않습니다. 개발자는 먼저 그 동안 발생한 개정을 "풀"해야합니다. 이렇게하면 로컬 사본이 중앙 저장소의 최신 버전으로 업데이트됩니다. 충돌이있는 경우 (중간 개정도 변경 한 파일을 변경 한 경우) 소프트웨어는 자동으로 관리 할 수없는 경우 충돌하는 파일을 수동으로 편집 ( "병합")하여 충돌을 해결하도록 요청할 수 있습니다. 그런 다음 변경 사항을 새 개정으로 커밋 할 수 있습니다.


18
Git과 Mercurial은 분산 된 버전 제어 시스템으로 약간 다르게 작동합니다. 단일 중앙 리포지토리가 필요하지 않지만 이론적으로는 개발자가 다른 사람으로부터 직접 업데이트를 가져올 수 있습니다. 물론 실제로는 하나의 저장소 (종종 GitHub와 같은 공개 호스트에 위치)가 "공식"저장소를 선언하고 비 분산 버전 제어 시스템의 중앙 저장소와 거의 비슷하게 사용되는 것이 일반적입니다.
Ilmari Karonen

18
이 답변은 또한 병합이 항상 수동으로 수행됨을 의미합니다. 그러나 대부분의 경우 버전 제어 소프트웨어는 차이를 자동으로 병합 할 수 있으며, 매우 급격한 변경을 위해서는 수동 작업 만 필요합니다.
jhocking

의견, 사람들의 긴 토론을 피하십시오. 토론 포럼이 아닙니다. 원하는 경우 게임 개발 채팅을 사용하십시오 . 접선 주석 스레드를 정리했습니다.
Josh

또한 각 팀 구성원이 특정 모듈을 거의 독점적으로 관리하는 것이 이상적이며 드문 경우에 한 사람 이상이 짧은 시간 내에 동일한 소스 파일을 수정해야합니다.이 워크 플로는 충돌하는 변경 사항을 병합 할 필요성을 최소화하기 때문입니다. 그러나 항상 그런 것은 아닙니다.
Nicolas Miari

13

개발자는 동일한 파일을 사용하지 않습니다 .

각 개발자는 자신의 파일 버전을 가지고 있으며 작업을 관리하기 위해 특별한 종류의 소프트웨어를 사용합니다. 둘 다 변경하면 다른 개발자가 수행 한 변경 사항을 덮어 쓰려고 시도하면 해결 해야하는 충돌 이 발생 합니다. 그렇지 않으면 내가 이야기 한 소프트웨어가 불평하기 시작합니다. 즉, 충돌을 일으키는 개발자는 다른 개발자의 작업과 작업을 결합한 다음 파일을 "저장"할 수 있어야합니다.

이것은 그렇지 않은 간단한 버전 제어 개념의 일부에 대한 간단한 설명입니다 .


6
또한 그들은 의사 소통이라고하는이 소설적인 일을하고 소프트웨어는 진공 상태로 작성되지 않습니다. 따라서 그들이 이해 상충을 이해하지 못하면 상대방과 대화하거나 미리 조정합니다.
Brian

9

버전 관리 및 병합과의 충돌 처리에 대한 다른 답변에서 제기 된 사항 외에도 팀 구성원이 서로의 작업을 덮어 쓰는 것을 피할 수있는 다른 두 가지 방법이 있습니다.

  • 일부 버전 제어 시스템 (예 : SVN)은 파일 잠금을 허용합니다. 즉, 한 팀 구성원이 일정 시간 동안 파일의 독점 소유권을 가질 수 있으므로 파일이 잠금 해제 될 때까지 다른 팀 구성원이 충돌하는 편집 (또는 실제로 모든 편집)을 수행 할 수 없습니다.

    그러나 여러 가지 문제가 발생할 수 있으므로 일반적으로 자주 사용되지 않습니다. 특정 시간에 파일 작업을 수행 할 수있는 사람을 제한하여 생산성을 저하시킬 수 있으며 누군가 파일 잠금 해제를 잊어 버린 경우 문제를 일으킬 수 있습니다. 또한 적어도 SVN (다른 VCS에 대해서는 잘 모르겠습니다)의 경우 파일을 잠그면 다른 사람이 작업 사본을 변경하는 것을 막을 수 없으며 변경 사항을 커밋하는 것만 막을 수 있습니다.이 경우 개발자가 노력을 낭비 할 수 있습니다 파일이 잠겨 있기 때문에 변경 사항을 커밋 할 수 없다는 것을 발견하기 위해 파일을 수정합니다.

  • 팀은 주어진 시간에 특정 파일을 작업하는 사람이 두 명 이상 없도록 개발자에게 작업을 할당하려고 시도 할 수 있습니다. 예를 들어 개발자는 프로젝트의 특정 부분 (예 : 3D 렌더링, 네트워크, 오디오 등)을 담당 할 수 있습니다. 코드베이스가 모듈화되어 있으면 네트워크 코드에 할당 된 개발자는 파일을 만질 필요가 거의 없습니다. 오디오 다루기.

    물론 다른 방법으로 관리해야하는 중복 부분이 항상 있습니다.


2
플러스 측면에서 잠금은 .JPEG 또는 기타 일반 텍스트가 아닌 파일을 편집 할 수있는 유일한 방법입니다. 이것은 이론적 인 제한이 아니며 병합 도구가 일반적으로 빠지는 것입니다.
MSalters

2
@MSalters 도구가 빨라지는 것이 아니라 대부분의 병합 도구가 이진 데이터가 아니라 텍스트 용으로 만들어 졌기 때문입니다. 두 변경 사항이 파일에서 동일한 픽셀을 수정 한 경우 충돌을 어떻게 해결 하시겠습니까? 또는 JPEG 압축으로 인한 변경 사항을 어떻게 고려 하시겠습니까? 단일 솔루션만으로는 불가능한 매우 복잡한 문제이므로 대부분의 병합 도구가 지원하지 않는 이유는 그 필요성이 매우 드물고 기능을 구현하기가 어렵 기 때문입니다.
Maurycy

3
@MaurycyZarzycki : 같은 문자를 변경하는 것은 수동으로 해결해야하는 동일한 픽셀을 변경하는 것과 유사합니다. .JPEG는 아마도 나쁜 예일 것입니다. 아티스트는 손실이 많은 형식으로 작업하지 않기 때문입니다. 그러나 병합 문제는 .PNG에도 존재합니다. 최소한 병합 도구가 XML을 손상시키지 않고 병합 할 수 있는지 여부는 최소한 감사 할 것입니다.
MSalters

@MSalters 물론, 훨씬 더 동의 할 수 있습니다.
Maurycy

1
@ xorsyst : 다음과 같이 시도하십시오 : 두 위치의 SVN에서 체크 아웃하십시오. 그런 다음 위치 1에서 파일을 잠그십시오. 위치 2는 커밋 또는 업데이트 할 때까지 파일이 잠겨 있음을 알 수 없습니다.
Zan Lynx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.