ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 머큐리얼 리비전 세트 특정 방법
    개발 도구/형상관리 도구 (SCM) 2021. 7. 1. 21:48

      hg 커맨드를 위한 리비전 특정 방법 

    커맨드 라인을 통해 hg 커맨드를 사용할 때 타깃 리비전을 적절하게 설정하는 방법을 설명한다.

     

    리비전 특정 방법

    • 정수 숫자
      • 양수 리비전 번호
      • 음수 최신 리비전 기준 오프셋
    • 문자열  
      • 40 자리 16진수 문자열 특정 리비전을 브랜치에 상관없이 유일하게 식별할 수 있는 식별자
      • 40 자리가 안 되는 16진수 문자열 식별자의 뒷부분을 일부 잘라내도 유일하게 식별할 수 있을 때 사용 가능한 단축 식별자
      • 이외의 문자열 북마크, 태그 또는 브랜치 명으로 사용되며 ":"를 포함해서는 안됨
    • 예약된 문자열 
      • tip 가장 최신 브랜치를 나타냄
      • null 빈 레포지토리의 리비전을 나타내는 것으로  0번째 리비전의 부모를 나타냄
      • . 현재 작업 중인 레포지토리의 부모를 나타내며 최상위 브랜치인 경우 null과 동일함. 커밋되지 않은 머지는 첫 번째 부모를 나타냄

     

    ※ 명령어에 리비전 세트가 주어진 경우 한 개의 리비전을 사용하는 명령어는 주어진 세트 중 가장 최신의 리비전을 사용하며 두 개의 리비전을 사용하는 경우 가장 오래된 리비전과 가장 최신의 리비전을 사용한다.

     

    여러 리비전 특정 방법

    머큐리얼은 revsets라고 불리는 리비전을 선택하는 언어를 지원한다.

    revsets는 여러 예약어와 연산자를 지원하며 이것들을 조합해 원하는 리비전 리스트를 얻을 수 있다.

     

    가령 괄호는 그룹핑에 사용되며 따옴표나 쌍 따옴표로 특수문자 혹은 공백이 포함된 식별자를 나타낼 수 있다.

    또, 쌍 따옴표를 이용해 개행 문자(\n) 같은 특수 문자를 사용할 수도 있다.

     

    예약어가 아닌 문자열 자체를 사용하고 싶을 때는 다음과 같이 r을 붙인 따옴표를 이용하면 된다.


    "not x" -> "r'not x'"


     

    연산자

    • not x(또는 !x) 주어진 x가 아닌 체인지 셋을 찾는다.
    • x::y(또는 x..y) 리비전 x와 y 사이에 존재하는 모든 체인지 셋을 찾는다.
    • x:y 리비전 x와 y 사이에 존재하는 모든 체인지 셋을 찾는다. 단, x와 y는 동일한 브랜치여야 한다.
    • x and y(또는 x & y) 체인지 셋 x와 y의 교집합을 찾는다.
    • x or y(또는 x | y 또는 x + y) 체인지 셋 x와 y의 합집합을 찾는다.
    • x - y 체인지 셋 x와 y의 차집합을 찾는다(x와 y 중 x에만 포함된 경우를 찾는다).
    • x % y 체인지 셋 x의 조상이면서 y의 조상이 아닌 체인지 셋을 찾는다.
    • x^n 체인지 셋의 n번째 부모 체인지 셋을 찾는다(n이 0이면 자신을 가리킨다).
    • x~n 체인지 셋의 n번째 조상을 찾는다(n이 0이면 자신을 가리키고 n이 음수면 자손을 가리킨다).

     

    유용한 예약어

    • branch(string or set) 특정 브랜치의 리비전을 가져온다.
    • merge() 머지 리비전을 가져온다.
    • max(set) 주어진 리비전 세트 중 가장 큰 번호를 가진 리비전을 가져온다.
    • min(set) 주어진 리비전 세트 중 가장 작은 번호를 가진 리비전을 가져온다.
    • origin([set]) 주어진 세트에서 다른 브랜치로 그래프트 한 리비전을 가져온다.
    • destination([set]) 주어진 세트에서 다른 브랜치에서 그래프트 된 리비전을 가져온다.
    • rev(number) 번호에 해당하는 리비전을 가져온다.

     

    간단한 예제

    • default 브랜치의 로그
      • hg log -r "branch(default)"
    • A 브랜치 커밋 중 그래프트 되지 않은 로그
      • hg log -r "branch(A) - destination(branch(A))"
    • A 브랜치의 마지막 커밋과 B 브랜치의 생성까지 default 브랜치에 커밋된 머지가 아닌 로그
      • hg log -r "(max(branch(A)):min(branch(B)) and branch(default)) and not merge()"

     

    댓글

Designed by Tistory.