| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- JavaScript
- 리눅스
- UnixCommand
- 유닉스
- 명령어
- 유닉스명령어
- 터미널
- cups
- shell
- Unix명령어
- coreutils
- 사용자관리
- 파일시스템
- terminal
- 정규표현식
- environment
- PackageManagement
- bash
- sysadmin
- 시스템관리
- 리눅스명령어
- php
- Solaris
- linuxcommand
- linux
- 자바스크립트
- js
- UNIX
- 쉘스크립트
- tcsh
Archives
- Today
- Total
ioerror
merge - 파일 병합 및 3-way 병합 수행 본문
반응형

merge - Three-Way File Merge
파일의 변경 사항을 다른 파일에 3-way 방식으로 병합하는 명령어이다. 주로 버전 관리 시스템의 파일 충돌을 수동으로 해결하거나 원본 파일, 수정본 파일, 공통 조상 파일 간의 차이점을 결합할 때 사용된다. 명령어 실행 결과 두 파일의 변경 내용이 대상 파일에 자동으로 통합되며, 충돌이 발생할 경우 파일 내에 충돌 마커가 삽입된다. 일반적인 유닉스 및 리눅스 환경에서 사용이 가능하다.
1. 명령어 용도
- 오픈소스 프로젝트나 팀 단위 개발 중 동일한 소스코드 파일을 여러 사람이 수정하여 충돌이 예상될 때 안전하게 변경 사항을 병합하는 용도로 사용된다.
- 상황 예시: original.txt를 기반으로 mine.txt와 yours.txt라는 두 개의 수정본이 존재할 때, 세 파일을 비교하여 mine.txt에 모든 변경 사항을 통합하고자 하는 경우이다.
merge mine.txt original.txt yours.txt
# mine.txt 파일에 original.txt 기준 yours.txt의 변경 사항이 병합된다.
# 충돌이 없다면 성공적으로 병합이 완료되고, 충돌 시 파일 내에 마커가 표시된다.
2. 명령어 서식
merge [options] file1 file2 file3
3. 명령어 옵션
| 옵션 | 설명 | 사용가능 OS 및 쉘 |
| -A | # 등의 주석 기호를 사용하여 충돌 마커를 보다 명확하게 표시한다. | [Linux] [GNU] |
| -E | 충돌 발생 시 덜 상세한 정보만 표시하며, 기존 겹치는 스타일을 유지한다. | [Linux] [GNU] |
| -e | 충돌이 발생하더라도 경고 메시지를 출력하지 않는다. | |
| -L label | 충돌 마커에 표시될 파일 이름 대신 사용자 정의 라벨을 지정한다. (최대 3번 사용 가능) | |
| -m | 병합 방식을 강제로 선택하는 옵션이다. | |
| -p | 병합된 결과를 file1에 저장하지 않고 표준 출력(stdout)으로 보낸다. | |
| -q | 충돌이 발생해도 조용히 처리하며 오류 상태를 반환하지 않는다. | |
| -V | rcs/merge 명령어의 버전을 출력한다. |
# 병합 결과를 원본 파일에 덮어쓰지 않고 터미널 화면으로 먼저 확인하는 예시
merge -p mine.txt original.txt yours.txt
# [출력 결과]
# 병합된 텍스트 내용이 화면에 연속으로 출력됨
# 충돌 발생 시 아래와 같이 표시됨:
# <<<<<<< mine.txt
# 나의 수정 내용
# =======
# 상대방의 수정 내용
# >>>>>>> yours.txt
# 충돌 마커에 기본 파일명 대신 원하는 라벨을 붙여 병합하는 예시
merge -L "내코드" -L "원조" -L "네코드" mine.txt original.txt yours.txt
# 충돌 시 <<<<<<< 내코드 ======= >>>>>>> 네코드 형태로 마킹됨
4. 명령어 특이사항(유의사항)
- merge 명령어는 file1 자체를 직접 수정하여 결과를 저장하므로 실행 전 file1의 백업본을 만들어 두는 것이 안전하다.
- StackOverflow에서 가장 많이 질문되는 부분은 충돌(overlap) 발생 시 반환되는 종료 코드(Exit Status)이다. 충돌이 없으면 0, 충돌이 발생하면 1, 시스템 에러가 발생하면 2를 반환하므로 쉘 스크립트 작성 시 이 반환 값을 조건문으로 체크해야 한다.
- Git이나 SVN 같은 모던 버전 관리 도구 내부에서도 이와 유사한 3-way merge 알고리즘을 사용하지만, merge 명령어는 별도의 저장소 권한 없이 단일 파일들을 로컬에서 급히 병합할 때 유용하다.
https://ioerror.tistory.com/entry/UNIX-Linux-Command-Reference
UNIX & Linux Command Reference
유닉스 / 리눅스 명령어 표유닉스와 리눅스 환경에서 자주 사용되는 필수 명령어들을 완벽하게 정리한다. 서버 관리, 프로그래밍, 일상적인 시스템 운영 등 어떤 목적이든 터미널 환경을 능숙하
ioerror.tistory.com
반응형
'OS' 카테고리의 다른 글
| mkdir - 디렉터리 생성 (0) | 2026.06.01 |
|---|---|
| mesg - 터미널 메시지 수신 여부 설정 (0) | 2026.06.01 |
| manpath - 매뉴얼 페이지 탐색 경로 확인 및 설정 (0) | 2026.06.01 |
| man - 온라인 매뉴얼 페이지 참조 (0) | 2026.06.01 |
| make - 지정된 규칙에 따라 프로그램을 자동으로 빌드하고 관리하는 도구 (0) | 2026.06.01 |
Comments