Patch
Patch
patch를 사용하는 모습의 스크린샷 | |
| 원저자 | 래리 월 |
|---|---|
| 개발자 | 폴 에거트, 웨인 데이비슨, 데이비드 매켄지, 안드레아스 그륀바허 |
| 발표일 | 1985년 5월 24일 |
| 운영 체제 | 유닉스 및 유닉스 계열, 플랜 9, MSX-DOS, 마이크로소프트 윈도우 |
| 플랫폼 | 교차 플랫폼 |
| 종류 | 명령어 |
patch는 패치 파일이라 불리는 별도의 파일에 담긴 지침에 따라 텍스트 파일을 업데이트하는 셸 명령어이다. 패치 파일은 입력 파일과 원하는 내용 사이의 차이점을 나열한 텍스트 파일이다. 이 명령어는 diff를 통해 생성된 패치 파일을 지원하도록 설계되었다. 사용자는 파일의 두 버전(원본과 대상)에 대해 diff를 실행하여 패치 파일을 생성하며, 이 패치 파일은 나중에 patch가 원본 파일에 패치 파일의 내용을 더해 대상 파일을 생성하는 데 사용된다. 패치라는 용어는 패치를 적용한다는 뜻의 동사로도 쓰인다.
프로그래머가 다른 프로그래머를 위해 개발한 patch는 소스 코드를 최신 버전으로 업데이트하는 데 자주 사용되었다. 이로 인해 많은 사람이 패치를 소스 코드와 연관 지어 생각하게 되었지만, 사실 패치는 모든 텍스트에 적용할 수 있다. 패치된 파일에는 불필요한 텍스트가 쌓이지 않는데, 이는 단어의 영어적 의미를 바탕으로 일부 사람들이 오해하는 부분이다. patch는 텍스트를 추가하는 것만큼이나 제거하는 데에도 능숙하다.
여기서 설명하는 패치는 바이너리 패치와 혼동해서는 안 된다. 바이너리 패치는 개념적으로는 비슷할 수 있으나, 프로그램을 구성하는 바이너리 파일을 새 릴리스로 업데이트하기 위해 배포되는 것이다.
최초의 patch 컴퓨터 프로그램은 래리 월(이후 펄 프로그래밍 언어를 만든 인물)이 작성하여 1985년 5월 mod.sources[1](이후 comp.sources.unix가 됨)에 게시하였다. patch는 XPG4에 추가되었고, 이는 나중에 POSIX가 되었다.[2] 래리 월의 코드는 OpenBSD,[3] FreeBSD,[4] schilytools[5]에서 제공하는 "patch" 프로그램의 기반으로 남아 있다. 오픈 그룹으로 합병된 개방 소프트웨어 재단이 파생 버전을 유지 관리했다고 알려져 있다. GNU 프로젝트/자유 소프트웨어 재단은 래리 월 버전에서 분기된 patch를 유지 관리한다. 저장소는 GNU diffutils의 저장소와 다르지만, 문서는 함께 관리된다.[6] 원래 유닉스용으로 작성되었지만, 이 명령어는 윈도우(GnuWin32 및 UnxUtils 경유)와 다른 많은 플랫폼으로 포팅되었다. 구현체 중 하나는 아스키의 MSX-DOS 버전 2용 MSX-DOS2 도구에 포함되어 있다.[7]
사용
패치 파일은 텍스트이므로 품질 검토 및 텍스트 편집기를 통한 수정과 같은 과정에 사용할 수 있다.
diff 명령어 외에도 Subversion, CVS, RCS, Mercurial, Git과 같은 다른 프로그램으로도 패치 파일을 생성할 수 있다.
패치는 CVS를 포함한 많은 소스 코드 관리 시스템의 핵심 구성 요소였다.
고급 diff
더 고급 diff를 사용하면 패치와 충돌하지 않는 한, 그사이에 수정된 파일에도 패치를 적용할 수 있다. 이는 각 변경 사항을 전후 문맥(변경된 부분 직전과 직후의 텍스트)으로 둘러싸는 "문맥 diff"와 "통합 diff"(unidiff라고도 함)를 사용하여 구현된다. 그러면 patch는 이 문맥을 사용하여 패치할 영역의 위치를 찾을 수 있는데, diff에 포함된 줄 번호를 시작점으로 사용하므로 파일 앞부분의 변경으로 인해 위치가 바뀌었더라도 패치를 적용할 수 있다. 이러한 특성 때문에 문맥 및 통합 diff는 많은 소프트웨어 프로젝트에 제출하기 위한 패치 형식으로 선호된다.
위의 기능들 덕분에 diff와 patch는 오픈 소스 소프트웨어의 수정 사항을 교환하는 데 매우 대중적으로 사용된다. 외부 개발자는 공개된 최신 소스 코드를 다운로드하여 수정하고, diff 형식으로 개발 팀에 보낼 수 있다. 개발 팀은 diff를 사용하여 패치를 적용하기 전에 효과적으로 검토할 수 있으며, 외부 개발자가 접근했던 것보다 더 새로운 코드 베이스에 패치를 적용할 수 있다.
예시
다음 명령어는 oldFile로부터 newFile을 생성하는 방법을 인코딩한 패치 파일인 patchFile을 생성한다. -u 옵션은 통합 diff 형식으로 출력하도록 선택한다.
$ diff -u oldFile newFile > patchFile
다음 명령어는 patchFile에 식별된 파일에 변경 사항을 적용한다.
$ patch < patchFile
하위 디렉터리에 있는 파일을 패치하려면 추가적인 -pnumber 옵션이 필요한데, 여기서 number는 소스 트리의 기본 디렉터리가 diff에 포함되어 있으면 1, 아니면 0이다.
패치는 -R 옵션을 사용하여 취소하거나 되돌릴 수 있다.
$ patch -R < patchFile
원본으로 사용된 파일이 실제 원본 파일과 크게 다르면 패치를 깔끔하게 적용할 수 없다. 예를 들어, 텍스트 줄이 맨 앞에 삽입되면 패치에서 참조하는 줄 번호가 올바르지 않게 된다. patch는 주변 줄을 살펴 패치할 텍스트의 위치를 다시 찾아 이를 복구할 수 있다. 또한 문맥 줄(문맥 및 통합 diff의 경우)이 변경된 경우에도 복구하는데, 이를 퍼즈(fuzz)라고 한다.
같이 보기
각주
- ↑ Wall, Larry (1985년 5월 8일). “patch version 1.3”. 뉴스그룹: mod.sources. 2023년 4월 4일에 원본 문서에서 보존된 문서. 2024년 7월 14일에 확인함.
- ↑ – 명령어와 유틸리티 오픈 그룹의 단일 유닉스 규격, Issue 7 참고
- ↑ http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/patch/ 보관됨 2017-06-07 - 웨이백 머신 OpenBSD patch source
- ↑ – 리눅스 사용자 명령어 매뉴얼 페이지
- ↑ “Schilytools”. 2023년 5월 8일에 원본 문서에서 보존된 문서. 2023년 5월 8일에 확인함.
- ↑ “Patch.c\SRC - patch.git - GNU patch”. 2023년 5월 8일에 원본 문서에서 보존된 문서. 2023년 5월 8일에 확인함.
- ↑ MSX-DOS2 Tools User's Manual by ASCII Corporation
외부 링크
- GNU tools for Win32 - Win32 port of tools, including diff and patch
- diffstat - show statistics from output of diff
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.