육감적 코딩

[Git교과서]10장. 배포 관리와 태그 본문

정리/Git

[Git교과서]10장. 배포 관리와 태그

감감감감감감 2021. 12. 13. 18:15

10.1 배포

인터넷이 발달하면서 과거의 물리적인 배포 대신 온라인으로 배포합니다.

배포 프로세스가 빨라지면서 코드를 안정적으로 유지하고 테스트하는 것이 더 중요해졌습니다.

배포를 잘하려면 코드를 깔끔하게 정리할 수 있는 환경이 필요합니다. 또 사용자가 파일을 쉽게 내려받을 수 있게 해야 합니다.

이러한 이유로 깃은 코드를 배포하는 데도 많이 사용합니다.

10.2 버전

코드는 개발을 완료한 후에도 계속 수정됩니다.

코드를 수정했다면 이러한 차이를 구별할 수 있게 하는 것이 바로 버전(version) 입니다.

버전업(version up)은 오래된 버전의 프로그램을 최신 버전의 코드로 변경하는 것을 의미합니다.

기본적인 버전은 단일 번호 하나로 구성되어 있습니다.

0은 초기 개발 중인 제품이라는 의미입니다.

정식 버전은 1부터 시작합니다. 이를 메이저(major) 버전이라고 합니다. 메이저 번호를 변경하면 하위 버전과 호환성이 낮아질 수도 있습니다.

작은 코드의 변화는 점(.)을 사용하여 구분 합니다. 보통 두 자리 또는 세자리 형태의 숫자로 작성합니다.

  • 두 자리 : 1.0
  • 세 자리 : 2.1.4

두 번째 자리는 메이저 버전에서 기능을 추가하거나 변경 사항이 있을 때 바꿉니다.

마이너(minor) 번호라고도 합니다.

세 번째 자리는 버그 수정 등 미미한 변화가 있을 때 바꿉니다. 다른 말로 패치(patch) 버전이라고 합니다.

세 자리 숫자 형태로 표기하는 버전을 SemVer(Semantic Versioning) 방식이라고 합니다.

버전용어

  • RC : 정식 버전이 아닌 베타 버전을 의미. 안정적인 동작을 보장하지 않는 임시 제품
  • GA : 테스트가 완료된 정식 릴리스 버전을 의미. 안정된 버전
  • M : 테스트 버전을 의미. 기능들을 구현할 때마다 테스트하여 피드백을 받는 버전.

10.3 태그

깃은 정리된 커밋을 배포할 수 있도록 특수한 포인터를 제공하며, 특정 커밋을 가리키는 포인터로 버전을 관리합니다.

이 포인터를 태그라고 합니다.

태그는 특정 커밋의 해시 값을 가리키는 꼬리표를 의미합니다.

최종 사용자는 개발자가 부여한 태그를 사용하여 코드 버전을 구별합니다.

태그는 추가 정보를 보유하는지 여부에 따라 두 가지로 구분됩니다.

  • Annotated : 태그 이름 + 정보 포함
  • Lightweight : 태그 이름만 포함

10.4 태그 목록

tag 명령어는 단독으로 실행할 수도 있고, 옵션을 추가할 수도 있습니다.

$ git tag          -- 옵션으로 -l 또는 --list 를 사용합니다.

10.5 Annotated 태그

10.5.1 태그 생성

Annotated 태그를 생성할 때는 커밋의 해시 값뿐 아니라 추가로 생성자 정보를 같이 넣을 수 있습니다. 이메일, 날짜, 메시지 등 정보.

Annotated 태그를 생성하려면 tag 명령어 뒤에 -a 옵션을 사용합니다.

$ git tag -a <버전>

태그는 현재의 마지막 커밋을 기준으로 생성되며, 이 커밋은 HEAD 포인터와 일치합니다.

10-1

$ git tag    ---- 태그 목록

10-2

로그기록 확인

$ git log --decorate  --- 로그 확인

10-3

커밋에 꼬리표처럼 태그가 연결되어 있습니다.

10.5.2 간단한 메시지

Annotated 태그를 생성할 때는 메시지를 작성해야 합니다.

간단한 메시지는 -m 옵션으로 만들 수 있습니다. 커밋 명령어의 -m 옵션과 유사합니다.

$ git tag -a <버전> -m "<태그 메시지>"

10.5.4 태그는 중복해서 생성할 수 없다

태그는 같은 이름으로 중복해서 생성할 수 없습니다.

10.5.5 태그 삭제

태그 삭제 명령어는 -d 옵션을 주면 됩니다.

$ git tag -d <태그이름>

태그 목록에서 삭제된 태그 이름은 이후에 다시 사용할 수 있습니다.

10.5.6 태그의 상세 정보 확인: show 명령어

태그의 상세 정보를 확인하려면 show 명령어를 사용해야 합니다.

$ git show <태그이름>

10.6 Lightweight 태그

가장 기본적인 태그입니다. Annotated 태그와 달리 버전 이름만 있습니다.

10.6.1 체크섬

Lightweight 태그 방식은 커밋의 체크섬만 가지고 있습니다. -a, -m 같은 옵션은 사용할 수 없습니다.

$ git tag <태그이름>

10.6.2 태그의 상세 정보 확인

Lightweight 태그와 Annotated 태그 둘다 동일하게 show 명령어로를 사용합니다.

10.7 특정 커밋 태그

현재 HEAD 포인터가 가리키는 커밋이 아닌 특정 커밋을 직접 지정하여 태그를 생성할 수 있습니다.

$ git tag -a <태그버전> <커밋ID>

지정된 커밋 해시 값을 기준으로 새로운 태그를 생성합니다.

10.8 태그를 사용한 체크아웃

태그는 특정 커밋을 가리키는 포인터 입니다.

따라서 태그를 사용하여 특정 커밋으로 체크아웃할 수 있습니다.

$ git checkout <태그이름>

10.8.1 태그 브랜치

태그를 사용하여 체크아웃할 때는 추가 커밋을 작성할 수 없습니다.

추가 커밋 작업이 필요하다면 태그를 기반으로 새 브랜치를 생성합니다.

$ git checkout -b <브랜치이름> <태그이름>

10.9 태그 공유

태그를 원격 저장소로 공유하는 것은 최종 코드를 배포하는 것과 같습니다.

태그를 사용하여 사용자는 최종 코드를 내려받을 수 있습니다.

10.9.2 태그 동기화

태그 정보는 원격 저장소로 자동 전송되지 않으므로 직접 동기화 해야합니다.

$ git push <브랜치이름>

10-4

원격 저장소로 커밋을 전송했지만, 태그 정보는 전송에서 제외됩니다. 태그는 별도로 전송해야 합니다.

$ git push <태그이름>

10-5

사용자는 태그가 가리키는 커밋의 최종 소스도 내려받을 수 있습니다.

10.9.3 전체 태그 동기화

태그를 1개씩 지정하여 전송하는 것은 불편합니다.

한꺼번에 전송할 수도 있습니다.

$ git push origin --tags

10.9.4 원격 저장소의 태그 수정과 삭제

원격 저장소에서 태그를 수정할 수도 있습니다.

원격 저장소의 태그도 삭제할 수 있습니다. 로컬 저장소의 태그를 삭제할 때는 tag 명령어를 사용합니다. 하지만 원격 저장소로 공유된 태그를 삭제할 때는 push 명령어를 사용해야 합니다.

$ git push --delete <서버이름> <태그이름>

push 명령어로 원격 저장소의 태그를 삭제했지만, 로컬 저장소의 2.0.0 태그는 삭제되지 않고 남아 있습니다. 로컬 저장소의 태그도 삭제합니다.

태그는 저장소 간 자동으로 동기화되지 않습니다.

반대로 원격 저장소의 태그 목록을 가져올 때는 pull 명령어를 사용합니다.

참고로 clone 명령어를 사용해서 복제할 때는 태그 정보도 같이 가져옵니다.

10.9.5 원격 저장소에 로컬과 다른 이름으로 태그 전송

$ git push origin <태그이름> : <원격저장소의태그이름>

콜론(:) 을 사용하여 로컬 저장소의 태그 이름과 원격 저장소의 태그 이름을 지정할 수 있습니다.

'정리 > Git' 카테고리의 다른 글

[Git 교과서]11장. 서브모듈  (0) 2021.12.20
[Git 교과서]9장. 복귀  (0) 2021.12.12
[Git 교과서]8장. 병합과 충돌  (0) 2021.12.12
[Git 교과서]7장. 임시 처리  (0) 2021.11.30
[Git 교과서]6장. 브랜치  (0) 2021.11.23
Comments