SVN Mercurial Overview

SVN(Subversion)과 Mercurial은 소프트웨어 개발에서 코드의 변경 이력을 관리하고 협업을 지원하는 버전 관리 시스템이다. SVN은 중앙 집중형(Centralized) 시스템으로, 모든 버전 이력이 중앙 서버에 저장된다. 반면, Mercurial은 분산형(Distributed) 시스템으로, 각 개발자가 전체 저장소를 로컬에 복제하여 작업한다. 각 시스템은 저장 방식, 협업 모델, 성능 등에서 차이가 있으며, 프로젝트의 특성과 요구사항에 따라 적절한 시스템을 선택해야 한다.

핵심 개념

SVN (Subversion)

SVN은 Apache Software Foundation에서 개발한 중앙 집중식 버전 관리 시스템이다.

핵심 개념은 다음과 같다:

  1. 중앙 저장소: 모든 파일 버전과 변경 이력이 단일 중앙 서버에 저장된다.
  2. 작업 복사본(Working Copy): 개발자는 중앙 저장소의 일부 또는 전체를 로컬 머신에 체크아웃하여 작업한다.
  3. 델타 저장 방식: 파일 변경 사항을 델타(차이점)로 저장하여 공간을 절약한다.
  4. 원자적 커밋: 여러 파일에 대한 변경 사항이 단일 트랜잭션으로 처리된다.
  5. 리비전 번호: 각 커밋마다 순차적으로 증가하는 정수 형태의 리비전 번호가 할당된다.

Mercurial

Mercurial은 Matt Mackall이 개발한 분산형 버전 관리 시스템으로, 핵심 개념은 다음과 같다:

  1. 분산 저장소: 모든 사용자가 저장소의 전체 복사본과 이력을 로컬에 보유한다.
  2. 체인지셋(Changeset): 프로젝트 상태의 스냅샷과 메타데이터를 포함하는 불변의 단위이다.
  3. 해시 기반 식별자: 각 체인지셋은 SHA-1 해시로 식별된다.
  4. 브랜치 모델: 가볍고 유연한 브랜칭 메커니즘을 제공한다.
  5. 확장성: 플러그인 시스템을 통해 기능을 확장할 수 있다.

목적 및 필요성

버전 관리 시스템인 SVN과 Mercurial의 필요성은 다음과 같다:

  1. 코드 변경 추적: 소프트웨어 개발 과정에서 누가, 언제, 무엇을 변경했는지 추적할 필요가 있다.
  2. 협업 효율성: 여러 개발자가 동시에 작업할 때 코드 충돌을 최소화하고 병합을 용이하게 한다.
  3. 코드 백업: 개발 중인 코드의 안전한 백업을 제공한다.
  4. 실험적 개발: 새로운 기능이나 수정 사항을 안전하게 실험할 수 있는 환경을 제공한다.
  5. 릴리스 관리: 특정 버전의 소프트웨어를 쉽게 릴리스하고 관리할 수 있다.
  6. 책임 추적: 코드 변경에 대한 책임을 명확히 할 수 있다.
  7. 지식 보존: 개발 결정 사항과 진행 과정에 대한 지식을 보존한다.

SVN과 Mercurial 비교 분석

기본 구조 및 특성

비교 항목SVNMercurial
아키텍처 유형중앙 집중식(Centralized)분산형(Distributed)
저장 방식델타 저장 방식델타 저장 + 스냅샷
식별자 체계순차적 정수 리비전 번호SHA-1 해시 기반 식별자
개발 언어CPython + C
라이선스Apache LicenseGNU GPL v2+
작업 단위파일 + 디렉토리체인지셋(전체 프로젝트 상태)
오프라인 능력제한적완전한 오프라인 작업

주요 기능 비교

기능SVNMercurial
버전 관리 방식원자적 커밋, 디렉토리 버전 관리분산 작업, 로컬 커밋
브랜치 관리디렉토리 기반 브랜치, 효율적인 태깅강력한 브랜치 지원, 이름 공간 브랜치
파일 처리파일 잠금, 파일/디렉토리 이력 관리자동 이름 변경 감지, 효율적 저장
서버 의존성대부분 작업에 서버 필요서버 없이 대부분 작업 가능
접근 프로토콜HTTP, HTTPS, SVN, SVN+SSHHTTP, SSH, 로컬 프로토콜
UI 옵션명령줄, GUI 클라이언트명령줄, TortoiseHg, 웹 인터페이스
확장성플러그인/후크Python 기반 확장 시스템
대용량 파일기본 지원Largefiles 확장 기능

성능 및 효율성

측면SVNMercurial
로컬 작업 속도서버 의존으로 상대적 느림로컬 작업으로 빠른 성능
네트워크 의존성높음 (대부분 작업에 필요)낮음 (로컬 작업 중심)
저장소 크기상대적으로 작음 (델타 기반)중간 (델타 + 일부 스냅샷)
대규모 저장소 처리대형 저장소에서 성능 저하 가능효율적인 저장으로 대형 저장소 지원
병합 성능상대적으로 복잡하고 느림강력한 자동 병합 지원
브랜치 생성 비용상대적으로 비용 높음가볍고 빠른 브랜치 생성
부분 체크아웃지원 (저장소 일부만 체크아웃 가능)제한적 (전체 저장소 클론이 기본)

장점 및 단점

SVN

장점:

  • 중앙 집중식 모델로 단일 진실 소스 제공
  • 세밀한 접근 제어 및 권한 관리
  • 부분 체크아웃으로 대규모 저장소 효율적 관리
  • 순차적 리비전 번호로 이해하기 쉬운 버전 참조
  • 바이너리 파일에 대한 잠금 기능 제공
  • 안정적이고 성숙한 시스템

단점:

  • 중앙 서버 의존성으로 오프라인 작업 제한적
  • 네트워크 작업이 많아 속도가 느릴 수 있음
  • 브랜치 병합이 복잡하고 충돌 해결이 어려움
  • 매우 큰 저장소에서 성능 저하 발생 가능
  • 파일 이름 변경 추적이 명시적으로 필요
  • 커밋된 이력 수정이 어려움
Mercurial

장점:

  • 분산형 모델로 로컬에서 대부분 작업 가능
  • 오프라인 상태에서도 커밋, 브랜치 등 작업 가능
  • 로컬 작업 중심으로 빠른 성능
  • 효율적인 저장 알고리즘으로 공간 절약
  • 강력한 자동 병합 도구와 충돌 해결 제공
  • 확장 시스템을 통한 기능 확장 용이
  • 자동 파일 이름 변경 및 복사 감지

단점:

  • 분산 모델 개념이 초보자에게 어려울 수 있음
  • 매우 큰 바이너리 파일 처리 시 성능 이슈 가능
  • Git에 비해 상대적으로 작은 생태계와 인지도
  • 전체 저장소 복제가 기본이라 초기 클론 시간 소요
  • 기본 보안 감사 기능이 제한적
  • 초대형 프로젝트에서 Git 대비 성능 저하 가능성

적합한 사용 시나리오

시나리오SVNMercurial
대기업 개발 환경중앙 통제, 엄격한 접근 제어, 감사 추적 필요 환경팀 간 독립적 작업, 오프라인 작업 필요, 유연한 워크플로우 환경
오픈 소스 프로젝트중앙 관리가 필요한 프로젝트 (Apache, GNOME)분산 협업 중심 프로젝트 (Mozilla Firefox, OpenJDK)
소규모 팀 개발간단한 프로젝트, 중앙 서버 관리 용이한 환경독립적 작업 중심, Git보다 간단한 인터페이스 선호 시
바이너리 자산 관리대용량 바이너리 파일 관리, 파일 잠금 필요 시Largefiles 확장으로 바이너리 파일 관리 가능
규제 산업감사 추적, 엄격한 접근 제어 필수 환경로컬 작업 필요하나 중앙 관리도 중요한 하이브리드 환경

브랜칭 및 워크플로우 전략

항목SVNMercurial
브랜치 모델디렉토리 기반 브랜치이름 공간 브랜치, 익명 헤드
브랜치 전략기능별 브랜치 최소화 권장책임 분리 브랜치 권장
병합 방식수동 해결 위주3-way 머지 자동화 지원
워크플로우 유형체크아웃-수정-커밋 주기분기-개발-병합 워크플로우
협업 패턴중앙화된 협업, 직접 커밋분산 협업, 풀/푸시 모델

최적화 전략

영역SVNMercurial
저장소 구조여러 작은 저장소로 분할 권장저장소 크기 모니터링, 필요시 분할
서버 설정Apache 튜닝, 캐시 최적화서버 측 압축 설정, 웹 서버 최적화
네트워크 최적화압축 활성화, HTTP 파이프라이닝번들 사용, 압축 수준 조정
대용량 파일외부 저장소, 바이너리 파일 분리largefiles 확장, 바이너리 관리 정책
정기 유지 관리저장소 압축, 불필요 파일 정리저장소 압축(hg 컴팩션), 캐시 정리

마이그레이션 및 통합 고려사항

측면SVNMercurial
다른 시스템에서 이전단계적 전환, 이력 보존 방안 수립SVN/Git에서 이전 도구 활용, 이력 변환
CI/CD 통합Jenkins/TeamCity 등과 통합확장 시스템 활용, CI/CD 파이프라인 통합
IDE 통합대부분 IDE와 통합 지원TortoiseHg, IDE 플러그인 활용
라이선스 고려Apache 라이선스, 상업적 활용 자유GPL v2+, 라이선스 영향 검토 필요

실제 사용 사례

조직/프로젝트사용 시스템특이사항
Apache 프로젝트SVN중앙 관리형 오픈소스 개발
Mozilla FirefoxMercurial대규모 분산 오픈소스 개발
엔터프라이즈 소프트웨어SVN엄격한 접근 제어, 감사 필요 환경
Facebook(일부)Mercurial대규모 코드베이스에 맞게 사용자화
게임 스튜디오SVN대용량 바이너리 에셋 관리
OpenJDKMercurial분산 협업 중심 Java 개발

현대적 개발 환경에서의 위치

측면SVNMercurial
현재 시장 점유율전통적 기업 환경에서 여전히 사용Git에 비해 점유율 감소 추세
클라우드 통합제한적 클라우드 지원다양한 클라우드 서비스 지원
DevOps 친화성제한적 CI/CD 통합확장성 있는 DevOps 파이프라인 통합
신규 도입 추세감소 추세, 레거시 시스템 유지일부 특수 환경에서 새로운 도입
생태계 활성도안정적 유지보수 중심활발한 개발 및 확장

작동 원리

SVN의 작동 원리

SVN은 중앙 집중식 버전 관리 시스템으로 다음과 같은 원리로 작동한다:

  1. 저장소 구조: 중앙 서버에 모든 버전 정보와 이력이 저장된다.
  2. 체크아웃: 개발자는 중앙 저장소의 특정 리비전을 로컬 작업 복사본으로 가져온다.
  3. 변경 사항 추적: 로컬에서 파일을 수정하면 SVN 클라이언트가 변경 사항을 추적한다.
  4. 업데이트: 개발자는 중앙 저장소의 최신 변경 사항을 로컬 작업 복사본에 업데이트한다.
  5. 커밋: 개발자가 변경 사항을 중앙 저장소에 커밋하면, 새로운 리비전이 생성된다.
  6. 델타 저장: 변경 사항은 델타(차이점)로 저장되어 공간을 절약한다.
  7. 충돌 감지 및 해결: 여러 개발자가 동일한 파일을 수정할 때 발생하는 충돌을 감지하고 해결한다.

SVN 작동 원리 다이어그램:

1
[개발자 1 작업 복사본] <---- 체크아웃/업데이트/커밋 ----> [중앙 SVN 저장소] <---- 체크아웃/업데이트/커밋 ----> [개발자 2 작업 복사본]

Mercurial의 작동 원리

Mercurial은 분산형 버전 관리 시스템으로 다음과 같은 원리로 작동한다:

  1. 저장소 복제: 개발자는 저장소의 전체 복사본을 로컬에 클론한다.
  2. 로컬 작업: 모든 버전 관리 작업(커밋, 브랜치, 로그 보기 등)이 로컬에서 수행된다.
  3. 체인지셋 생성: 변경 사항을 커밋하면 불변의 체인지셋이 생성된다.
  4. 해시 기반 식별: 각 체인지셋은 SHA-1 해시로 고유하게 식별된다.
  5. 푸시/풀: 개발자들은 저장소 간에 변경 사항을 푸시하거나 풀하여 동기화한다.
  6. 병합: 여러 개발 라인을 병합할 때 자동 충돌 해결과 수동 개입을 조합하여 사용한다.
  7. 저장소 그래프: 모든 커밋이 방향성 비순환 그래프(DAG)로 구성된다.

Mercurial 작동 원리 다이어그램:

1
2
3
4
5
[개발자 1 저장소 복사본] <---- 푸시/풀 ----> [중앙 저장소(선택적)] <---- 푸시/풀 ----> [개발자 2 저장소 복사본]
                                                   ^
                                                   |
                                                   v
                                        [개발자 3 저장소 복사본]

구성 요소 및 아키텍처

SVN의 구성 요소 및 아키텍처

SVN은 다음과 같은 주요 구성 요소로 이루어져 있다:

  1. 저장소(Repository):
    • 기능: 모든 프로젝트 데이터와 이력 저장
    • 역할: 버전 관리 데이터의 중앙 저장소 역할
  2. 저장소 백엔드(FSFS/BDB):
    • 기능: 저장소 데이터의 물리적 저장
    • 역할: 파일 시스템 기반(FSFS) 또는 Berkeley DB(BDB) 기반 저장 제공
  3. 서버 프로세스(svnserve/Apache):
    • 기능: 저장소에 대한 네트워크 액세스 제공
    • 역할: svn://, http://, https://, svn+ssh:// 등의 프로토콜 지원
  4. 클라이언트(svn 명령줄 도구, TortoiseSVN 등):
    • 기능: 사용자 인터페이스 제공
    • 역할: 저장소와 상호작용하는 명령 실행
  5. 작업 복사본(Working Copy):
    • 기능: 로컬에서 파일 편집 제공
    • 역할: 저장소의 특정 리비전 상태를 로컬에 유지
  6. APR(Apache Portable Runtime):
    • 기능: 크로스 플랫폼 호환성 제공
    • 역할: 다양한 운영 체제에서 일관된 기능 보장

SVN 아키텍처 다이어그램:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[클라이언트 측]                              [서버 측]
+----------------+                           +-----------------+
| SVN 명령줄 도구 |                           | Apache/svnserve |
+----------------+                           +-----------------+
        |                                            |
        v                                            v
+----------------+                           +-----------------+
|  작업 복사본    |<--- 네트워크 프로토콜 --->   |     저장소       |
+----------------+    (http, svn, etc.)      +-----------------+
                                                     |
                                                     v
                                              +-----------------+
                                              | 저장소 백엔드   |
                                              | (FSFS/BDB)     |
                                              +-----------------+

SVN(Subversion)은 일반적으로 다음과 같은 표준 디렉토리 구조를 사용한다:

  1. 트렁크(trunk):
    • 기본 개발 라인을 나타낸다.
    • 주요 개발 작업이 이루어지는 곳이다.
    • 프로젝트의 현재 최신 상태를 나타낸다.
    • 경로 예시: /project/trunk/
  2. 브랜치(branches):
    • 메인 개발 라인에서 분기한 별도의 개발 라인이다.
    • 새로운 기능 개발, 버그 수정, 실험적 작업 등에 사용된다.
    • SVN에서 브랜치는 트렁크의 복사본으로 생성된다(실제로는 참조).
    • 경로 예시: /project/branches/feature-x/
  3. 태그(tags):
    • 프로젝트의 특정 시점 스냅샷을 나타낸다.
    • 주로 릴리스 버전을 표시하는 데 사용된다.
    • 변경되지 않아야 하는 읽기 전용 참조이다.
    • 경로 예시: /project/tags/v1.0/

이 구조는 단순한 디렉토리 구조일 뿐, SVN이 이를 특별하게 처리하지는 않는다.
이는 관례적인 패턴으로, 개발자들이 이 구조를 준수함으로써 효율적인 버전 관리가 가능해진다.

SVN의 트렁크/브랜치/태그 작업 흐름:

  1. 개발자는 트렁크에서 일상적인 개발 작업을 수행한다.
  2. 새로운 기능 개발이 필요하면 트렁크에서 브랜치를 생성한다.
  3. 브랜치에서 개발이 완료되면 트렁크로 병합(merge)한다.
  4. 릴리스 시점에는 트렁크 또는 안정화된 브랜치를 태그로 복사한다.

SVN에서 브랜치와 태그 생성은 svn copy 명령을 사용하며, 실제로는 파일을 복제하지 않고 저장소 내에서 참조만 생성하므로 공간 효율적이다. 그러나 브랜치 병합은 명시적으로 수행해야 하며, 복잡한 병합 시나리오에서는 충돌 해결이 어려울 수 있다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[SVN 저장소]
  |
  +-- trunk/
  |     |
  |     +-- src/
  |     +-- docs/
  |     +-- …
  |
  +-- branches/
  |     |
  |     +-- feature-a/
  |     |     |
  |     |     +-- src/
  |     |     +-- docs/
  |     |     +-- …
  |     |
  |     +-- bugfix-123/
  |           |
  |           +-- src/
  |           +-- …
  |
  +-- tags/
        |
        +-- v1.0.0/
        |     |
        |     +-- src/
        |     +-- docs/
        |     +-- …
        |
        +-- v1.1.0/
              |
              +-- …

Mercurial의 구성 요소 및 아키텍처

Mercurial은 다음과 같은 주요 구성 요소로 이루어져 있다:

  1. 저장소(.hg 디렉토리):
    • 기능: 프로젝트의 모든 이력과 메타데이터 저장
    • 역할: 로컬 작업 및 이력 관리의 기반 제공
  2. 스토어(Store):
    • 기능: 파일 데이터 및 이력 정보의 물리적 저장
    • 역할: 효율적인 델타 압축과 저장 제공
  3. 리비전 로그(Revlog):
    • 기능: 파일 변경 이력 관리
    • 역할: 델타 압축을 사용한 효율적인 이력 저장
  4. 디렉토리 매니페스트(Manifest):
    • 기능: 각 리비전의 디렉토리 구조 추적
    • 역할: 프로젝트 상태의 스냅샷 제공
  5. 클라이언트(hg 명령줄 도구, TortoiseHg 등):
    • 기능: 사용자 인터페이스 제공
    • 역할: 저장소 조작 명령 실행
  6. 확장 시스템(Extensions):
    • 기능: 추가 기능 및 사용자 정의 확장 제공
    • 역할: 기본 기능 확장 및 워크플로우 맞춤화
  7. 네트워크 레이어:
    • 기능: 저장소 간 통신 제공
    • 역할: HTTP, SSH 등의 프로토콜을 통한 푸시/풀 지원

Mercurial 아키텍처 다이어그램:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[로컬 저장소]
+---------------------------+
| 작업 디렉토리             |
+---------------------------+
              |
              v
+---------------------------+
| .hg 디렉토리 (저장소)     |
+---------------------------+
        |           |
        v           v
+--------------+  +--------------+
| 체인지셋 DB  |  | 매니페스트 DB |
+--------------+  +--------------+
        |           |
        v           v
+--------------+  +--------------+
|  파일 리비전 |  |  태그/브랜치 |
|    로그     |  |     정보     |
+--------------+  +--------------+
              |
              v
+---------------------------+
| 네트워크 레이어           |
+---------------------------+
              |
              v
[다른 저장소와의 상호작용]

Mercurial 핵심 기능 및 CLI

Mercurial(hg)의 핵심 기능과 주요 명령줄 인터페이스(CLI) 명령어는 다음과 같다:

핵심 기능

  1. 분산 버전 관리:
    • 모든 개발자가 전체 저장소 복사본을 로컬에 보유
    • 네트워크 연결 없이도 대부분의 작업 수행 가능
  2. 체인지셋 기반 관리:
    • 변경 사항이 원자적 체인지셋으로 관리됨
    • SHA-1 해시로 각 체인지셋 고유하게 식별
  3. 강력한 병합 지원:
    • 자동화된 3-way 병합 알고리즘
    • 브랜치 간 원활한 병합 지원
  4. 확장 시스템:
    • Python으로 작성된 확장 모듈 추가 가능
    • 기본 기능 확장 및 사용자 정의 워크플로우 구성
  5. 이름 공간 기반 브랜치:
    • 네임드 브랜치: 이름이 있는 장기 브랜치
    • 익명 헤드: 이름 없는 임시 개발 라인
  6. 푸시/풀 모델:
    • 저장소 간 변경 사항을 푸시하거나 풀하는 메커니즘
    • HTTP, HTTPS, SSH 등 다양한 프로토콜 지원
  7. 효율적인 저장 구조:
    • 리비전 로그(revlog) 기반 델타 압축 저장
    • 파일 이름 변경 및 복사 자동 감지
  8. 웹 인터페이스:
    • 내장된 웹 서버로 저장소 브라우징 가능
    • 그래프 형태의 이력 시각화

주요 CLI 명령어

  1. 저장소 생성 및 복제:
    • hg init: 새 저장소 생성
    • hg clone: 원격 저장소 복제
  2. 변경 사항 관리:
    • hg status: 작업 디렉토리 상태 확인
    • hg diff: 변경 사항 확인
    • hg add: 파일을 버전 관리에 추가
    • hg remove: 파일 제거
    • hg commit 또는 hg ci: 변경 사항 커밋
  3. 이력 조회:
    • hg log: 커밋 이력 조회
    • hg summary: 저장소 상태 요약
    • hg annotate: 파일의 각 라인 작성자 표시
    • hg grep: 이력에서 패턴 검색
  4. 원격 저장소 상호작용:
    • hg pull: 원격 저장소에서 변경 사항 가져오기
    • hg push: 로컬 변경 사항을 원격 저장소로 보내기
    • hg incoming: 수신 예정 변경 사항 확인
    • hg outgoing: 발신 예정 변경 사항 확인
  5. 브랜치 및 병합:
    • hg branch: 현재 브랜치 표시 또는 새 브랜치 생성
    • hg branches: 브랜치 목록 표시
    • hg merge: 다른 브랜치 병합
    • hg update 또는 hg up: 특정 리비전으로 작업 디렉토리 업데이트
    • hg resolve: 병합 충돌 해결
  6. 태그 관리:
    • hg tag: 태그 생성
    • hg tags: 태그 목록 표시
  7. 작업 되돌리기:
    • hg revert: 작업 디렉토리 변경 사항 되돌리기
    • hg backout: 이전 커밋 효과 취소하는 새 커밋 생성
    • hg strip: 커밋 제거(확장 필요)
  8. 고급 기능:
    • hg bisect: 이진 검색으로 버그 도입 시점 찾기
    • hg graft: 특정 커밋 체리픽
    • hg shelve: 작업 중인 변경 사항 임시 저장(확장 필요)
    • hg purge: 추적되지 않는 파일 제거(확장 필요)

실무에서 효과적으로 적용하기 위한 고려사항 및 주의할 점

고려사항설명
협업 모델SVN은 중앙 집중형, Mercurial은 분산형 협업에 적합합니다.
브랜치 전략Mercurial은 브랜치와 머징이 용이하므로, 복잡한 브랜치 전략에 유리합니다.
접근 제어SVN은 중앙 서버에서 접근 제어가 용이합니다.

최신 동향과 앞으로의 전망, 주목해야 할 기술들

2025년 기준으로 Git은 버전 관리 시스템 시장의 93% 이상을 차지하며, SVN은 약 20%, Mercurial은 5% 미만의 사용률을 보이고 있다.
SVN의 현재 위치: SVN은 대용량 코드베이스, 대형 바이너리 파일, 중앙 집중식 관리가 필요한 특정 산업(제조업, 반도체 설계, 게임 개발 등)에서 여전히 활발히 사용됨
Mercurial의 상태: 2020년 Bitbucket의 Mercurial 지원 중단 이후 사용률이 크게 감소했으며, 주로 소수의 특정 프로젝트에서만 사용되고 있음


용어 정리

용어설명
원자적 커밋여러 파일의 변경 사항이 하나의 단위로 처리되어 전체가 성공하거나 전체가 실패하는 특성
리비전 로그저장소의 변경 이력을 저장하는 Mercurial의 핵심 데이터 구조
작업 복사본SVN에서 중앙 저장소의 파일을 로컬에 복사하여 작업하는 공간
체인지셋Mercurial에서 프로젝트 상태의 스냅샷과 메타데이터를 포함하는 불변의 단위
FSFSSVN에서 사용하는 파일 시스템 기반 저장소 백엔드, Berkeley DB를 대체
매니페스트Mercurial에서 각 버전의 디렉토리 구조를 추적하는 파일
병합 추적이전 병합 작업을 기억하여 중복 병합이나 충돌을 줄이는 기능
충돌 해결동일 파일에 대한 서로 다른 변경 사항이 충돌할 때 이를 해결하는 프로세스
후크 스크립트특정 이벤트(커밋, 업데이트 등) 발생 시 자동으로 실행되는 스크립트
샌드박스버전 관리 시스템에서 격리된 환경에서 변경을 테스트할 수 있는 공간

참고 및 출처