원격저장소로 부터 로컬 프로젝트와 컴포넌트에 변동사항들을 가져올 수 있다. 업데이트 할 때는 크게 두 가지 응용 시나리오가 있다.
Scenario 1. 최신버전으로 업데이트하기.
Scenario 2. 지정버전으로 업데이트하기, 버전은 해시(revision hash) 또는 라벨(tag)이름으로 지정한다.
각 시나리오에는 두 가지 경우가 있다.
Case1. Dirty 업데이트: 업데이트하고 로컬의 변경사항을 유지한다.
Case2. Clean 업데이트: 업데이트하고 로컬의 변경사항을 남기지 않는다.
여러 mxos Cube 명령과 마찬가지로 mxos update는 현재 디렉터리를 작업컨텍스트(work context)로 사용한다.
즉, mxis update 명령을 사용하기 전에 현재의 경로를 업데이트하려는 디렉터리로 변경해야 한다.
예를 들어, mxos-os를 업데이트하는 경우 업데이트를 시작하기 전에 경로를 mxos-os로 먼저 변경한다.
⊕ 컴포넌트 링크 동기화
업데이트를 시작하기 전에 프로젝트에 대한 모든 변경사항을 동기화 해야 한다.
mxos sync 명령을 사용하면 필요한 컴포넌트의 의존성 디스크립션파일들을 자동으로 갱신하고, 무효한 디스크립션파일들을 제거한다.
♦ 로컬 변경사항 덮어쓰기 방지
만약 업데이트 명령을 실행했을 때 로컬의 변경사항이 덮어쓰기가 될 수 있는 경우에 업데이트 명령은 바로 에러를 발생 시킨다.
이것은 mxos Cube에서 의도한 설계로 로컬의 변경사항이 아직 커밋(commit)되지 않은 상태에서 변경사항이 덮어쓰기 되거나 손실 되는 것을 방지하기 위한 것이다.
따라서 업데이트를 실행할 때 오류가 발생하면 로컬 변경사항을 점검하여 적절하게 처리한 후 업데이트를 다시 실행하도록 한다. .
1. 로컬저장소를 원격저장소로 업데이트하기
이 절에서는 프로젝트 업데이트와 컴포넌트 업데이트에 대한 설명을 하고 있다. .
♦ 프로젝트 업데이트(원격저장소 → 로컬저장소)
로컬저장소의 프로젝트를 원격저장소의 버전으로 업데이트 하려면 먼저 프로젝트루트디렉터리로 이동하여 다음을 실행한다.
프로젝트루트디렉터리> mxos update [branch|tag|revision]
이 명령은 원격 저장소로부터 개정(revision)을 읽고 현재의 프로젝트를 지정된 분기(branch), 태그 또는 개정으로 업데이트한다.
만약 옵션을 지정하지 않으면 현재 분기에서 최신개정으로 업데이트한다.
이러한 업데이트 명령은 재귀적으로 수행되며 신규버전의 프로젝트에 있는 모든 종속성 과 하위종속성을 동기적으로 업데이트된다.
♦ 컴포넌트 업데이트
작업디렉터리를 업데이트할 컴포넌트 폴더로 변경하고 컴포넌트와 함께 그 종속성들을 업데이트한다.
명령은 mxos update를 사용한다.
이때 업데이트는 버전이 명시된 부모(parent) 프로젝트의 디스크립션에 의존하지 않는다.
이렇게 하면 부모 프로젝트나 상위 컴포넌트를 변경할 필요 없이 원래의 프로젝트 트리에서 명시되지 않은 버전을 시험해 볼 수 있다.
2. 업데이트 예제
다음 예제들을 통해 mxos Cube에서 사용할 수 있는 다양한 업데이트 옵션을 이해할 수 있을 것이다..
Case1. 지정되거나 또는 현재 분기(branch)에서 최신버전의 프로젝트나 컴포넌트로 업데이트하기
♦ 커밋되지 않은 로컬 변경사항을 보존하고 싶은 경우(Dirty Update) → 아래 명령을 사용
작업디엑터리> mxos update [branch]
버전관리툴(Git 또는 Mercurial)에서 업데이트로 로컬 변경 내용을 덮어 쓰는 오류가 발생하면,
먼저 변경 사항에 대해 git commit 또는 git stash를 사용하여 커밋 하거나 숨겨야(stasch) 할 수도 있다.
♦ 커밋되지 않은 변경사항을 모두 버리고자 할 경우(Clean Update) → 아래 명령을 사용
작업디렉터리>mxos update [branch] –clean
mxos upate 명령에 대한 브랜치를 지정하면 해당 브랜치만 체크하고, 원격 또는 업스트림 브랜치에 대해 자동병합(automatically merge) 이나 fast-forward 동작을 하지 않는다.
mxos update를 사용하여 로컬브랜치를 최신 원격브랜치와 병합(fast-forward) 할 수 있다. Git에서는 git pull를 사용할 수 있다.
⊗ clean 옵션은 MiCO Cube에게 프로젝트 또는 컴포넌트와 그 의존성을 업데이트하고 모든 로컬의 변경사항을 무시하도록 지시한다.
이 작업은 실행 취소 할 수 없으므로 주의하여 사용하기를 권장한다..
Case2. 프로젝트와 컴포넌트를 지정한 버전이나 라벨(tag)으로 업데이트하기
♦ 커밋되지 않은 로컬 변경사항을 보존하고 싶은 경우(Dirty Update) → 아래 명령을 사용
작업디렉터리>mxos update <tag_name|revision>.
변경사항이 최신버전과 충돌하는 경우 변경사항을 git commit 이나 git stash를 사용하여 커밋하거나 숨겨야(stash) 할 수도 있다.
♦ 커밋되지 않은 변경사항을 모두 버리고자 할 경우(Clean Update). → 아래 명령을 사용
작업디렉터리> mico update <tag_name|revision> –clean
♦ 게시되지 않은 로컬컴포넌트가 있는 경우
게시되지 않은 로컬컴포넌트를 처리하는 방법에는 다음 세 가지 추가 옵션의 명령을 사용할 수 있다.
◊ 작업디렉터리> mxos update –clean-deps
현재 프로젝트 또는 라이브러리 및 해당 종속성을 업데이트하고, 게시되지 않은 모든 로컬저장소를 삭제한다.
백업 사본이 없으면 공개되지 않은 로컬저장소를 복원 할 수 없으므로 주의해서 사용한다. .
◊ 작업디렉터리> mxos update –clean-files
현재 프로젝트나 컴포넌트와 그 의존성을 업데이트하고 배포(release)되지 않은 모든 로컬 저장소를 삭제한다.
이 옵션 명령은 백업 복사본이 없는 경우 배포되지 않은 로컬저장소를 복원 할 수 없으므로 주의해서 사용하도록 한다.
◊ 작업디렉터리> mxos update –ignore
현재 프로젝트나 컴포넌트 및 그 종속성을 갱신하고, 배포되지 않은 모든 로컬 변경사항들을 버리며 배포되지 않은 모든 저장소를 무시한다.
이 명령은 저장소를 삭제하거나 수정하지 않으며 단지 무시한다.
♦ 업데이트 옵션들의 결합
다음 시나리오에서 와 같이 이상에서 설명했던 옵션들을 결합하여 사용할 수도 있다.
◊ 작업디렉터리> mxos update –clean –clean-deps –clean-files
현재 프로그램이나 라이브러리 및 해당 종속성을 업데이트하고 +
게시되지 않은 모든 컴포넌트를 버리고 + 커밋되지 않은 로컬 변경 사항을 삭제하고 + 추적 되지 않거나 무시 된(untracked or ignored) 모든 파일을 제거한다.
이렇게 하여 로컬프로젝트와 컴포넌트에 대한 모든 변경사항을 버리고, 프로젝트의 레이아웃을 복원한다.
◊ 작업디렉터리> mxos update –clean –ignore
현재 프로그램이나 라이브러리 및 그 의존성을 갱신하지만 모든 배포되지 않은 로컬 저장소를 무시한다.
mxos Cube는 원격의 공개저장소에서 가능한 모든 것을 업데이트한다.
커밋되지 않은 변경 사항 및 게시되지 않은 라이브러리는 복원 할 수 없으므로 주의해서 사용하도록 한다.