2009-12-17 2 views
22

코드 리뷰를하는 습관을 갖기 위해 노력하고 있지만 Mercurial에 "병합에 의해 도입 된 변경 사항 만 표시하는 방법을 모르기 때문에 병합이 어려워졌습니다. 그 부모. "Mercurial : 병합으로 인한 변경 사항 만 표시하려면 어떻게해야합니까?

또는 약간 더 공식적으로 (스티브 Losh는 덕분에) :

나에게 부모 중 하나에 존재하지 않았다 병합의 모든 화물선을 표시하고, 나에게 중 하나에서 모든 덩어리의 존재를 보여 그 부모도 3에 없습니다.

예를 들어, 두 개의 파일 a와 b가있는 저장소가 있다고 가정합니다. 리비전 1에서 "a"가 변경되면 리비전 2 (별도의 브랜치에 있음)에서 "b"가 변경되고 리비전 3에서이 두 변경 사항이 병합됩니다. 다음과 같은 기록을 보게됩니다 :

 @ changeset: 3 
    |\ summary:  Merged. 
    | | 
    | o changeset: 2 
    | | summary:  Changing b 
    | | 
    o | changeset: 1 
    |/ summary:  Changing a 
    | 
    o changeset: 0 
     summary:  Adding a and b

하지만 개정 3, hg di -c 3에 의해 도입 된 변화를 보여달라고하면 내가 개정 1에 소개 된 변경 사항을 확인하도록 요청 것처럼 의욕이 나에게 같은 일을 보여줄 것이다, hg di -c 1 :

 $ hg di -c 3 
    --- a/a  
    +++ b/a  
    @@ -1,1 +1,1 @@ 
    -a 
    +Change to a 
    $ hg di -c 1 
    --- a/a  
    +++ b/a  
    @@ -1,1 +1,1 @@ 
    -a 
    +Change to a

하지만, 분명히, 이것은별로 도움이되지 않습니다. 대신에, 개정 3에 의해 새로운 변경 사항이 도입되지 않았다고 말하고 싶습니다. (또는 m 나는 그 갈등에 대한 해결책 만보고 싶다.) 예 :

 $ hg di -c 3 
    $

그럼 어떻게하면됩니까?

PS : 내가 rebase를 사용하여 내 저장소에 병합의 수를 줄일 수 있다는 사실을 알고 ...하지만 그건 내 문제가 아니에요 - 내 문제는 병합으로 변경되었습니다 무엇인지 파악한다.

+0

이것은 매우 유용한 명령처럼 들립니다. 나는 그 대답을 고대하고있다. –

+1

비슷한 질문 : [수은 있음, 다른 부모로부터 변경하지 않고 병합 변경 집합과 하나의 부모 사이의 diff를 보는 방법?] (0120-385-381) –

+5

나는 결국 mergediff plugin : http://mercurial.selenic.com/wiki/MergediffExtension –

답변

12

짧은 대답 : 당신은 주식 Mercurial 명령으로 이것을 할 수 없습니다.

hg diff -c 3을 실행하면 3과 그 첫 번째 부모 (예 : hg merge)의 변경 사항이 표시됩니다.

브랜치를 단순한 변경 집합 이상으로 생각할 때 의미가 있습니다. hg up 1 && hg merge 2을 실행하면 Mercurial에게 "변경 집합 2을 변경 집합 1과 병합하십시오"라고 말합니다.

명명 된 분기를 사용하는 것이 더 분명합니다. 예에서 변경 집합 2rewrite-ui이라는 명명 된 분기에있었습니다. hg update 1 && hg merge rewrite-ui을 실행할 때 "rewrite-ui 브랜치의 모든 변경 사항을 현재 브랜치에 병합하십시오."라고 효과적으로 말합니다. 나중에이 변경 세트에서 hg diff -c을 실행하면 default 브랜치 (또는 어떤 브랜치 1이든)가 병합에 의해 소개 된 모든 것을 보여줍니다.

나에게 부모 중 하나에 존재하지 않았다이 변경 집합의 모든 화물선을 표시하고, 저를 보여 당신이 말할 수있는 방법을 찾고있는 것처럼 질문에서

는하지만, 그것은 본다 그 부모 중 하나에있는 모든 큰 상자는 3에도 존재하지 않습니다.

이것은 계산하기가 간단하지 않습니다. (지금 당장은 설명이 정확하지 않습니다.) 그래도 그것이 유용 할 것임을 분명히 알 수 있습니다. 명확하게 정의 할 수 있다면, 우리 중 한 사람에게 SO를 읽어서 그것을 구현하도록 설득 할 수 있습니다.

+0

Hrm, 나는 그 이전의 명백한 말을 잊어 버린 것 같습니다. 답에 감사드립니다. 어쨌든, 뭔가를 세우는 데 관심이있는 HG 개발자에게서 들었습니까? 또는, 이것을 구현하는 방법을 알아 내려고 시도하는 동안 내가 도청했다면 마음에 들지 않겠습니까? –

+0

내가 작업하고있는 hg-review 확장 프로그램에 대해 "병합 diff"를 사용하는 것이 좋을 것이므로 나는 흥미로울 것이다. 나는 freenode의 # mercurial에있는 sjl입니다 .- 나를 때리십시오. –

+1

늦게 답장을 드려 죄송합니다.하지만 다음과 같은 플러그인을 작성하게되었습니다. http://mercurial.selenic.com/wiki/MergediffExtension –

0

코드 검토를 수행하기 위해 검토중인 프로젝트의 변경 사항 만보고 싶습니다. 이를 위해 우리는 각 스토리에 대해 새로운 분기를 사용하고 끌어 오기 요청을 생성하기 전에 스토리 브랜치에 모든 변경 사항을 병합 한 변경 요청에 대한 끌어 오기 요청을 사용합니다. Bitbucket에서 코드를 호스팅하고 리뷰/풀 요청 도구가 정말 좋으며 한 편 차이를 제공합니다.

Pull requests with side-by-side diffs