2017-10-12 3 views
1

Mercurial을 사용하는 상당수의 ASP.Net (C#) 웹 사이트가 있습니다. 때로는 "무언가"가 병합에 잘못되어 작은 수의 행이 결과 파일에 복제됩니다. 그러나 병합 중에 병합 충돌은 없었습니다.Mercurial 병합 중 중복 코드

복제 된 행은 일반적으로 블록 폐쇄 (중괄호, 닫기 태그 등)와 같이 매우 "일반적인"행입니다. 경우에 따라 컴파일러 오류가 발생합니다. 다른 경우에는 JS 오류가 발생합니다. 브라우저 호환성 문제를 야기하는 잘못된 마크 업입니다.

우리는 프로젝트에서 공동 작업을하는 사람들이 많으며, 그들은 종종 "메인"브랜치 (테스트 사이트를위한 것) 중 하나로 다시 합류하기 전에 서로의 브랜치를 분기하여 브랜치간에 병합하고, 다른 하나는 제작 사이트 용).

두 가지 분기가 독립적으로 시작되고 어떤 지점에서 병합 된 다음 두 분기가 독립적으로 테스트 사이트의 기본 분기로 다시 병합 될 때 문제가 가장 많이 발생하는 것으로 보입니다. 테스트로 병합되는 두 번째 분기에는 테스트로 병합 된 이력이 없으므로 첫 번째 분기 병합에 의해 이미 병합 된 모든 변경 세트가 포함되며 경우에 따라 컨텍스트가 너무 일반적이어서 적절하게 배치하고 그냥 포함합니다.

이 문제의 이름이 있습니까? 알려진 문제입니까? 그것을 피할 수있는 절차가 있습니까? 그것은 일반적인 문제가되어야 할 것 같지만, 그것에 대한 정보를 찾을 수없는 것 같습니다.

조상이 이미 대상 분기에 병합 된 하위 항목을 갖고 있지만 프로젝트 크기와 관련된 분기 수를 고려하면 매우 느릴 수 있으므로 병합을 금지하는 후크 추가를 고려했습니다.

또한 "깊이와 계보"컨트롤을 적용하기 위해 후크를 추가하여 형제, 사촌 또는 할아버지 지점이 아닌 상위 지점에서만 병합을 수행 할 수 있다고 생각했지만 여러 사람들이 협업 및 워크 플로.

생각하십니까?

+0

가지고있는 문제를 보여주는 자급 한 예제를 만들 수 있습니까? 문제를 나타내는 repo를 만드는 짧은 쉘 스크립트로 충분할 것입니다. – ngoldbaum

+0

잘 모르겠습니다. 우리의 대부분의 문제는 매우 복잡한 파일과 분기 패턴으로 발생했습니다. 나는 그것이 사소한 예와 함께 일어날 수 있는지 확신 할 수 없다. 그러나 나는 그것을 줄 것이다. – nhansen

+0

사람들이 다른 라인 결말을 사용합니까? – planetmaker

답변

1

그러나 병합 중에 병합 충돌이 발생하지 않았습니다.

글쎄, 나는 누군가가 갈등을 아주 심하게 풀고 있다고 말하고 싶다.

어떻게 가능합니까? 그들은 게으르지 않다, 그렇지?

나는 graft으로 놀고 있었고, 내 diff 도구는 어리석은 짓을했습니다. 예를 들어 , index.html 파일, 기본 분기의 :

</div> 
</div> 
</body></html> 

지점 A :

</div> 
<br></div> 
</body></html> 

지점 B :

<p></div> 
</div> 
</body></html> 

그냥 또 하나의 지점 B 커밋 :

<p>a</div> 
</div>  
</body></html> 

브랜치 A를 default과 병합하면됩니다.

default B를 접목, 내가 얻을 :

<p>a</div> 
</div> 
<br></div> 
</body></html> 

그러나 default B 병합 :

<p>a</div> 
<br></div> 
</body></html> 

몇 시간 후, 나는 HG 이식 작동하지 않는 것을 이해은 (는) 병합합니다. 브랜치 B의 두 커밋 모두를 hg graft으로 전달해야합니다.

아마도 귀하의 문제는 이와 관련이 없습니다. 귀하의 팀은 hg merge만을 사용하고 계신 것으로 보입니다. 그러나 나는 누군가가 어딘가에 있어야한다고 믿는다.

+0

우리의 절차는 사람들에게 병합을 분명하게 말하고 결코 이식편을 언급하지 않습니다. 내가 그것에 대해 물어 본 사람들은 그 이식편이 존재한다는 것을 알지 못하기 때문에 그들이 게으름을 피우지는 않을 것 같습니다. – nhansen