개요

Yocto 프로젝트는 임베디드 리눅스 배포판을 구축하는 데 사용되는 오픈 소스 프로젝트이다. 여러 개발자가 협업하여 다양한 빌드 환경과 패키지를 유지보수할 때는 버전 관리 시스템이 필수적이다. 이를 위해 주로 사용되는 도구가 바로 Git이다. Git을 활용하면 코드 변경 사항을 추적하고, 버전을 관리하며, 여러 개발자가 동시에 프로젝트에 기여할 수 있다.

Git의 기본 개념

저장소 초기화

Yocto 프로젝트를 시작하려면 먼저 Git 저장소를 초기화해야 한다. 저장소를 생성하거나 기존의 원격 저장소를 클론한다.

git init

또는

git clone <repository-url>

기초 명령어

Yocto 프로젝트를 Git으로 관리하기 위해 알아야 할 기본 명령어는 다음과 같다.

git status
git add <file>
git commit -m "커밋 메시지"
git push origin <branch>
git pull origin <branch>

Yocto 프로젝트 구조와 Git

Yocto 레이어와 Git

Yocto 프로젝트는 여러 레이어로 구성되어 있다. 각 레이어는 독립적인 기능을 제공한다. 레이어마다 별도의 Git 저장소로 관리하는 것이 일반적이다.

각 레이어는 독립적으로 관리할 수 있으며, 프로젝트에 필요한 레이어를 선택하여 포함시킬 수 있다.

Yocto 프로젝트의 복잡성을 줄이기 위해 각 레이어마다 별도의 브랜치 및 태그를 사용하여 관리를 하는 것이 좋다. 예를 들어, 특정 레이어에만 기능을 추가하려면 해당 레이어에 브랜치를 생성하여 개발할 수 있다.

Git을 이용한 브랜치 관리

Yocto 프로젝트에서는 여러 개발자가 동시에 작업을 하고 있다. 따라서 브랜치 관리가 매우 중요하다.

브랜치 생성

새로운 브랜치를 생성하여 독립된 작업 공간을 만든다.

git checkout -b <new-branch>

브랜치 병합

작업이 완료되면 브랜치를 병합하여 메인 브랜치에 변경 사항을 반영한다.

git checkout <main-branch>
git merge <feature-branch>

충돌 해결

병합 중 충돌이 발생하면 직접 해결해야 한다. Git은 충돌된 파일을 표시해 주며, 이를 수정한 후 커밋하면 된다.

git add <resolved-file>
git commit -m "충돌 해결"

태그를 이용한 릴리즈 관리

태그는 특정 커밋을 식별하고, 이를 통해 릴리즈 버전을 관리하는 데 유용하다. 릴리즈마다 고유의 태그를 만들어 나중에 해당 버전으로 쉽게 돌아갈 수 있다.

태그 생성

새로운 태그를 생성한다.

git tag -a <tagname> -m "릴리즈 설명"

태그를 원격 저장소에 푸시한다.

git push origin <tagname>

태그 목록 보기

현재 저장소에 존재하는 태그들을 확인한다.

git tag

특정 태그 체크아웃

특정 태그를 사용 중인 상태로 전환한다. 과거의 특정 릴리즈 상태로 돌아가 작업할 때 유용하다.

git checkout <tagname>

Git을 사용한 협업

Pull Request와 코드 리뷰

Pull Request(PR)는 변경 사항을 메인 브랜치에 병합하기 전에 다른 개발자들이 리뷰할 수 있도록 하는 기능이다. GitHub, GitLab, Bitbucket 등 대부분의 Git 호스팅 서비스에서 지원한다.

  1. 브랜치 생성 및 작업: 먼저, 새로운 브랜치를 생성하고 작업을 완료한다.
git checkout -b feature-branch
  1. 브랜치 푸시: 변경 사항을 원격 저장소에 푸시한다.
git push origin feature-branch
  1. Pull Request 생성: 호스팅 서비스의 웹 인터페이스에서 Pull Request를 생성한다. 변경 사항을 설명하고 리뷰 요청을 보낸다.

  2. 코드 리뷰: 다른 개발자들이 변경 사항을 검토하고 피드백을 남깁니다. 필요한 경우 수정을 거친 후 다시 푸시한다.

  3. 병합: 리뷰가 완료되면 변경 사항을 메인 브랜치에 병합한다.

협업 시 주의 사항

git pull origin main

CI/CD와의 통합

지속적 통합(Continuous Integration, CI) 및 지속적 배포(Continuous Deployment, CD) 시스템은 Yocto 프로젝트의 품질을 유지하고 배포 프로세스를 자동화하는 데 유용하다. Git과 CI/CD 시스템을 연동하면 코드가 변경될 때마다 자동으로 빌드 및 테스트가 수행된다.

CI/CD 설정

stages:
  - build
  - test

build_job:
  stage: build
  script:
    - ./build-script.sh

test_job:
  stage: test
  script:
    - ./test-script.sh