2012-10-28 6 views
1

내 응용 프로그램 중 하나에 대해 분기/병합 구현을 고려하고있었습니다. 일부 시나리오에서는 충돌없이 병합하는 방법을 이해할 수 없습니다. 이것을 예로 들어 보겠습니다.DVCS에서 병합

루트는 일부 코드를 작성합니다. A, B, C가 그에게서 끌어와 기능을 추가합니다. C가 완료되어 A와 B가 풀/병합됩니다. 루트로 루트를 사용하여 자신을 C와 비교하여 작동한다고 생각합니다. 이제 A와 B는 더 많은 기능을 작성하고 마무리합니다.

이제 A에서 당기고 B에서 당기면 어떻게됩니까? 그들의 기초는 뿌리이고, 둘 다 C에서 뽑아서 같은 줄이 편집됩니다. 충돌인지 아닌지 어떻게 알 수 있습니까? C 행을 편집 한 다음 B 행을 편집하면 어떻게됩니까? 나는 그것이 갈등이 될 것이라고 생각한다. 이제 마지막 질문은 C에서 당긴 후에 A와 B가 함수의 위치를 ​​뒤섞으면 어떻게 될까요? 나는 이제 dif 인식이 얼마나 좋은지 알 수 있지만, 충돌없이 A와 B 모두를 어떻게 풀 수 있는지 확신 할 수 없다.

답변

2

때때로 이된다. 예를 들어 A와 B가 같은 줄을 편집하면 다르게). 그런 다음 병합 할 DVCS에 의존하기보다는 변경 사항을 수동으로 병합해야합니다 (A 및 B와 대화 할 수도 있습니다).

또한 논리적 충돌이 발생할 수 있습니다 (A와 B는 파일의 다른 섹션을 변경하므로 명백한 충돌이 발생하지 않으며 DVCS가 병합을 처리 할 수 ​​있지만 이러한 섹션은 서로의 가정을 깨뜨리기 때문에 버그가 도입됩니다)). 버전 제어로는이 문제를 해결할 수 없으며 개발자 간의 통신과 유닛 테스트 만 가능합니다.

2

충돌 여부는 어떻게 알 수 있습니까?

  • 중 하나 DVCS 당신에게 말할 것이기 때문에 : 그것은 동일한 라인이
  • 를 편집하는 경우 병합을 수동으로 해상도를 트리거하거나 때문에 것
    • 의미 자리에 충분히 코드를 알고 충돌
    • 에는 의미 충돌을 제거하는 확장 된 단위 테스트 배터리가 있습니다.

그러나의 코멘트에 언급 된 "Still not drinking the DVCS Kool-Aid", 커밋 정기적으로 병합 (A CVCS보다 훨씬 높은 속도로, 중앙 집중식 버전 관리 시스템) 논리의 충돌을 피하거나 만드는 열쇠입니다 가능한 한 작게
의미 충돌에 대한 자세한 내용은 Martin Fowler article을 참조하십시오.