ioerror

merge - 파일 병합 및 3-way 병합 수행 본문

OS

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

 

반응형
Comments