ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Git 교과서 05 (배포와 태그)
    Git Github 2021. 12. 16. 19:08

    배포

     

    프로그램을 개발한 후에 결과물을 최종사용자에게 전달하는 과정을 배포라고 한다.완성된 형태로 배포하기 위해선 코드를 정리하는 추가 작업이 필요하다. 테스트 메시지나 불필요한 주석들을 정리한다.

     

     

    버전

     

    배포 이후에 코드를 수정해야 하는 경우가 많다. 즉, 코드는 개발을 완료한 후에도 계속 수정된다. 코드를 수정했다면 개발자 또는 최종 사용자가 이를 확인하고 구별할 수 있어야 한다. 이러한 차이를 구별할 수 있게 하는 것이 버전(version)이다. 보통 숫자를 사용하여 식별한다. 숫자가 클수록 최근에 수정된 코드이다. 버전업(version up)은 오래된 버전의 프로그램을 최신 버전의 코드로 변경하는 것을 의미한다.

     

    업계규칙

    기본적인 번호는 단일 번호 하나로 구성되어 있다. 단일 번호는 큰 기능을 변경했을 때 바뀐다. 첫 자리가 0으로 시작하면 아직 초기 개발 중인 제품이라는 의미다. 정식 버전은 1부터 시작한다. 이를 메이저 버전이라고 한다. 메이저 번호를 변경하면 하위 버전과 호환성이 낮아질 수도 있다. 메이저 버전 다음으로 작은 코드의 변화는 점(.)을 사용하여 구분한다. ex) 두 자리 : 1.0  ,  세 자리 : 2.1.4

     

    보통 두 번째 자리는 메이저 버전에 기능을 추가하거나 변경 사항이 있을 때 바꾼다. 마이너 번호라고도 한다. 세 번째 자리는 버그 수정 등 미미한 변화가 있을 때 바꾼다. 패치라고도 한다.이처럼 세 자리 숫자 형태로 표기하는 버전을 SemVer(semantic versioning) 방식이라고 한다.

     

     

     

     

    태그

     

    깃에서는 코드 배포를 관리하려고 정리된 커밋을 배포할 수 있도록 특수한 포인터를 제공하며, 특정 커밋을 가리키는 포인터로 버전을 관리한다. 그리고 이 포인터를 태그라고 한다. 즉, 태그는 특정 커밋의 해시 값을 가리키는 꼬리표를 의미한다. 

     

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

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

     

     

    tag 명령어로 태그 목록을 확인한다. (옵션은 -l 또는 --list 을 같이 사용한다.)

    $ git tag

     

     

    - Annotated 태그

    Annotated 태그를 생성할 때는 커밋의 해시 값뿐 아니라 추가로 생성자 정보를 같이 넣을 수 있다. Annotated 태그를 생성하려면 tag 명령어 뒤에 -a 옵션을 사용한다.

    $ git tag -a 버전

     

    Annotated 태그를 생성할 때는 메시지를 작성해야 한다. 작성할 태그 정보가 간단하다면 vi 에디터를 사용하지 않고, -m 옵션으로 대체 가능하다. 

     

    깃에 등록된 태그 이름은 유일해야 한다. 태그는 같은 이름으로 중복해서 생성할 수 없다

     

     

    -d 명령어로 태그를 삭제할 수 있다. 태그 목록에서 삭제된 태그 이름은 이후에 다시 사용할 수 있다.

    $ git tag -d 태그이름

     

     

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

    $ git show 태그이름

     

     

     

    - Lightweight 태그

     

    Lightweight 태그는 가장 기본적인 태그다. Annotated 태그와 달리 버전 이름만 있다.Annotated 태그와 달리 부가적인 정보가 없고 커밋의 체크섬만 갖고 있다. (-a, -m 같은 옵션 사용 불가능)


     

     

    특정 커밋 태그

     

    tag는 기본적으로 현재 HEAD가 가리키는 커밋을 기준으로 생성한다. 현재 HEAD 포인터가 가리키는 커밋이 아닌 해시 값을 통해 특정 커밋을 직접 지정하여 태그를 생성할 수 있다. 

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

     

     

     

    태그를 사용한 체크아웃

     

    태그를 사용하여 특정 커밋으로 체크아웃할 수 있다. 체크아웃할 때 브랜치 이름 대신 태그 이름을 입력하면 된다.

    $ git checkout 태그이름

     

    브랜치처럼 추가로 커밋을 작성할 수는 없다. 태그는 브랜치와 달리 단순한 포인터이기 때문이다. 추가 커밋 작업이 필요하면 태그를 기반으로 새 브랜치를 생성한다. 

     

     

     

    태그 공유

     

    태그는 불특정 다수에게 최종 소스의 커밋 정보를 알리려고 공유하는 것이다. 즉, 태그를 공유하는 것은 최종 코드를 배포하는 것과 같다. 

     

    원격 저장소(Github)에서 repository를 생성하면 배포를 의미하는 releases 탭에서 확인 가능하다.원격 저장소에 커밋을 전송하면 태그 정보는 전송에서 제외된다. 태그는 별도로 전송해야 한다. 태그 정보가 자동으로 공유된다면 테스트 중인 태그 버전과 혼동될 수 있기 때문이다.태그 전송도  push를 사용한다. 브랜치 이름 대신 태그 이름을 입력한다.

    $ git push 태그이름

     

    --tags 옵션을 사용하여 로컬 저장소의 모든 태그를 한꺼번에 원격 저장소로 보낼 수 있다.

    $ git push origin --tags

     

    원격 저장소로 공유된 태그를 삭제할 때에도 push 명령어를 사용한다.

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

     

     

    태그는 저장소 간 자동으로 동기화되지 않는다. 전송된 태그 이름을 변경하고 싶을 땐 원격 저장소의 태그와 로컬 저장소의 태그를 모두 삭제한다. 그리고 로컬 저장소에 다시 새로운 태그를 생성한 후 원격 저장소로 생성된 태그를 재전송하면 된다. 반대로 원격 저장소의 태그 목록을 가져올 때는 pull 명령어를 사용한다. (clone 명령어를 사용해서 복제할 때는 태그 정보도 같이 가져온다.)

     

    콜론을 사용하여 로컬 저장소의 태그 이름과 원격 저장소의 태그 이름을 다르게 지정할 수 있다.

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

     

     

     

     

     

     

     

     

    'Git Github' 카테고리의 다른 글

    Git 교과서 06 (서브모듈)  (0) 2021.12.16
    Git 교과서 04 (복귀)  (0) 2021.12.15
    Git 교과서 03 (병합과 충돌)  (0) 2021.12.15
    Git 교과서 02 (임시처리)  (0) 2021.12.15
    Git 교과서 01  (0) 2021.12.13
Designed by Tistory.