2017-12-23 32 views
1

병합시 충돌을 예측하고 피하는 방법이 있는지 궁금합니다.어떤 종류의 변경으로 인해 충돌이 발생합니까?

내 질문은 : 실제로 어떤 종류의 변경 충돌이 발생합니까? 실험에서 이것을 추론하기는 어렵습니다.

코드를 변경하면 어떤 종류의 변경이 무해하며 어떤 종류의 변경으로 인해 병합 문제가 발생하며 사용자의주의가 필요합니까?

:

  • 추가 새로운 라인
  • 교체 라인
  • 제거 라인 (끝 또는 중간에 시작 부분) 텍스트를 추가/제거하여 라인 변경

규칙이 있습니까?

+0

힘내의 알고리즘으로 동일한 스토리의 두 버전을 합리화하는 방법을 알 수 없으면 자동 병합 대신 충돌이 발생합니다. 이 점에 대해 걱정할 필요는 없으며 좋은 코드 작성에만 집중해야합니다. 나는 당신이 묘사하는 모든 시나리오에서 갈등을 보았다. –

답변

1

두 개의 분기에서 동일한 파일과 동일한 줄에 변경 사항이있을 경우 충돌이 발생합니다. 그렇지 않으면 충돌이 없어야합니다.

+0

나는 이것이 항상 사실이라고 생각하지 않는다. 그래서 만약 당신이'.java' 파일에 하나의 주석을 추가한다면 말입니다. '// comment'는 언제나 충돌이 있을까요? –

+0

다른 누군가가 해당 줄 또는 인접 줄을 편집 한 경우에만 해당합니다. 즉, 변경 사항이 겹쳐서 버전 제어 시스템이 이러한 변경 사항을 적용하는 방법을 모르는 경우 충돌이 발생합니다. – jeprubio

+0

의견에 갈등이 있습니다. 하나의 brahnc에 주석 앞에 하나의 공백을 추가하고 다른 분기에 해당 주석의 단어를 추가하고 병합하십시오. – jeprubio

1

일반적으로 같은 줄에 영향을주는 변경 사항은 충돌을 일으키는 원인이됩니다. 행을 제거하고 다른 사람이 행을 변경하거나 들여 쓰기를 변경하고 행을 변경하면 충돌이 발생합니다.

충돌을 일으키지 않는 변경 사항은 서로를 바꿔 놓을 수는 없지만 소스 제어에서 충돌하지 않는 10 줄 이상의 변경으로 쉽게 제거 할 수 있습니다. 변경 사항이 사용중인 변수의 이름을 바꿉니다. 자동 빌드 시스템이 존재하는 이유는 다음과 같습니다.

+0

따라서 두 사람이 같은 파일을 엉망으로 만들면 병합을 시도 할 때 충돌이 발생할 가능성이 큽니다. 이것은 우리가 작업을 더 잘 조정할 수 있고 그러한 갈등을 해결하지 않기 때문에 알 수 있습니다. 물론, 다른 오류가있을 수도 있지만 IDE에서 디버거/컴파일러 문제를 해결 한 다음 저장소 문제를 해결하는 것이 더 쉽습니다. – t3chb0t

+0

물론 이것은 일반적인 규칙으로 작동합니다. 하나의 커다란 프로젝트는 많은 유틸리티 기능을 구축했을 때 비슷한 파일을 수정하지 않으면 여전히 문제가 발생합니다. 예를 들어 프로젝트에 구성 설정을로드하는 유틸리티 클래스가 있고 사용자 "Bob"이 해당 기능을 변경하고 코드를 모든 곳에서 업데이트하지만 "Alice"는 자신이 작성한 새 파일에서 구성을 사용하기 시작했습니다. Alice가 Bob의 변경이 요구하는 방식으로 함수를 호출하지 않았기 때문에 전혀 새로운 파일이 빌드를 중단합니다. – bolt