이 방식은 커널 개발자들이 자주 사용하는 워크플로로, Git의 버전 관리와 quilt의 패치 관리 장점을 함께 활용할 수 있다.
1. Git 브랜치 준비
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
git checkout -b my-feature
- 새로운 기능이나 수정 작업을 위한 브랜치를 만든다.
my-feature브랜치에서 패치 작업을 진행한다.
2. quilt 초기화
quilt init
.pc/디렉터리와patches/디렉터리가 생성된다.series파일이 패치 순서를 관리한다.
3. Git과 quilt 연동 설정
export QUILT_PATCHES=patches
export QUILT_SERIES=series
- 환경 변수를 설정해
quilt이 패치 파일을 저장할 위치를 명시한다. .bashrc나.zshrc에 추가해두면 매번 설정할 필요가 없다.
4. 새 패치 생성 및 수정
quilt new fix-driver-logging.patch
quilt add drivers/net/ethernet/intel/e1000/e1000_main.c
vi drivers/net/ethernet/intel/e1000/e1000_main.c
quilt refresh
- 수정할 파일을 추가하고, 변경 후
refresh로 패치를 저장한다. patches/fix-driver-logging.patch파일이 생성된다.
5. Git에 패치 파일 커밋
git add patches/series patches/fix-driver-logging.patch
git commit -m "Add patch: fix-driver-logging"
quilt이 만든 패치 파일을 Git에 커밋한다.- 이렇게 하면 Git은 패치 파일 자체를 추적하고,
quilt은 실제 코드 변경을 관리한다.
6. 패치 적용/해제 테스트
quilt pop -a
quilt push -a
- 패치가 정상적으로 적용되고 되돌릴 수 있는지 확인한다.
- 문제가 생기면
quilt edit으로 수정 후 다시refresh한다.
7. Git과 quilt 병행 관리
- 새로운 패치를 추가할 때마다
quilt new→add→refresh→git commit순서로 반복한다. - Git은 패치 파일의 버전을 관리하고,
quilt은 패치의 적용 순서와 내용을 관리한다.
8. 최종 패치 세트 생성
quilt pop -a
quilt push -a
quilt series
- 모든 패치가 적용된 상태를 확인한 뒤,
patches/디렉터리의 패치 세트를 그대로 배포하거나 메일로 제출할 수 있다.
9. 메일용 패치 생성 (선택)
quilt mail -m "Fix driver logging issue"
- 커널 메일링 리스트에 보낼 수 있는 형식의 패치를 생성한다.
- 또는
git format-patch를 사용해 Git 커밋 기반으로 메일을 만들 수도 있다.