contrib/ 디렉터리에 있는 라이브러리입니다.
빌드 옵션에 따라 일부 라이브러리는 컴파일되지 않았을 수 있으므로, 해당 기능을 런타임에서 사용할 수 없을 수도 있습니다.
예시
서드파티 라이브러리 추가 및 유지 관리
contrib/ 디렉터리 아래에 있는 전용 디렉터리에 있어야 합니다.
라이브러리 디렉터리에 외부 코드 사본을 그대로 넣지 마십시오.
대신 외부 업스트림 리포지토리에서 서드파티 코드를 가져오는 Git 서브모듈을 생성하십시오.
ClickHouse에서 사용하는 모든 서브모듈은 .gitmodule 파일에 나열되어 있습니다.
- 라이브러리를 그대로 사용할 수 있다면(일반적인 경우), 업스트림 리포지토리를 직접 참조할 수 있습니다.
- 라이브러리에 패치가 필요하다면 GitHub의 ClickHouse organization에 업스트림 리포지토리의 포크를 만드십시오.
ClickHouse/ 접두어를 가진 브랜치를 만드십시오. 예를 들어 ClickHouse/2024_2(브랜치 2024_2의 경우) 또는 ClickHouse/release/vX.Y.Z(태그 release/vX.Y.Z의 경우)입니다.
업스트림 개발 브랜치인 master/ main / dev를 그대로 따라가지 마십시오(즉, 포크 리포지토리에서 ClickHouse/master / ClickHouse/main / ClickHouse/dev 같은 접두어 브랜치를 만들지 마십시오).
이러한 브랜치는 계속 변경되므로 올바른 버전 관리를 더 어렵게 만듭니다.
“접두어 브랜치”를 사용하면 업스트림 리포지토리에서 포크로 pull하더라도 사용자 지정 ClickHouse/ 브랜치는 영향을 받지 않습니다.
contrib/의 서브모듈은 포크된 서드파티 리포지토리의 ClickHouse/ 브랜치만 추적해야 합니다.
패치는 외부 라이브러리의 ClickHouse/ 브랜치에만 적용해야 합니다.
이를 수행하는 방법은 두 가지입니다.
- 포크된 리포지토리의
ClickHouse/접두어 브랜치에 새 수정 사항을 추가하려는 경우입니다. 예를 들어 sanitizer 수정이 이에 해당합니다. 이 경우 수정 사항을ClickHouse/접두어가 붙은 브랜치(예:ClickHouse/fix-sanitizer-disaster)로 push하십시오. 그런 다음 새 브랜치에서 사용자 지정 추적 브랜치로 PR을 생성하십시오. 예:ClickHouse/2024_2 <-- ClickHouse/fix-sanitizer-disaster. 이후 PR을 머지하십시오. - 서브모듈을 업데이트하면서 이전 패치를 다시 적용해야 하는 경우입니다. 이 경우 예전 PR을 다시 만드는 것은 과도합니다. 대신 이전 커밋을 새
ClickHouse/브랜치(새 버전에 해당)에 체리픽하면 됩니다. 여러 커밋으로 이루어진 PR이라면 커밋을 자유롭게 squash해도 됩니다. 가장 이상적인 경우는 사용자 지정 패치를 이미 업스트림에 기여해 두어, 새 버전에서는 해당 패치를 생략할 수 있는 경우입니다.