흔히들 이야기하는 소스 형상관리(version control) 툴 이라고 하면 svn 과 git 을 떠올리게 됩니다. 두 가지 툴이 가장 많이 사용되는 것 같고, 저 역시 두 가지를 다 사용하고 있습니다. 복수의 다른 개발자들과 협업하고 소스를 안전하게 보관하는 목적으로 사용하기 때문에 특징적인 기능들에 대해서는 잘 알지 못한 채, 다운 받고 다시 업로드 하는 일이 주된 과정으로 인식되게 됩니다.
사실 제가 생까하는 git의 강력한 기능은 두 가지 입니다. 하나는 branch 관리 기능이고, 다른 하나는 tag 입니다. (물론 tag는 svn 에도 있습니다) 여기서는 그 중에서 tag에 대해서 조금 알아보도록 하겠습니다.
여기서는 branch에 대한 개념이나 의미는 완전히 배제하고 글을 적겠습니다. 그에 대한 개념은 따로 정리하도록 하겠습니다.
tag 의미 & 사용하는 이유
tag 는 그야말로 “꼬리표” 입니다. 소스를 개발하는 과정 중에 특정 시점마다 꼬리표를 붙여 두는 것입니다.
예를 들어 보겠습니다. 만약 일주일에 한 번씩 Weekly build 를 하고 minor 버전을 하나씩 내보낸다고 가정하면, 각 버전을 빌드하는 시점, 그러니까 소스코드를 임시로 freezing 하는 시점에 tag를 생성합니다. (tag를 긋는다고도 표현합니다)
이렇게 되어 그 다음주에 개발을 하다가, 완전 잘못된 방향으로 2주간 개발을 해왔다는 것을 깨닫거나, 혹은 아키텍쳐가 변경되어, 2주전부터 다시 개발해야 하는 상황이라면, 해당 태그로 이동하여 개발을 다시 해나갈 수 있습니다.
혹은 이미 배포되어 운영중인 시스템이 있다면, 운영 서버로 이관한 버전에 대해서 tag를 생성하고, 추후에 유지보수가 필요한 상황이 되면 그 때의 버전을 내려받아, 디버깅(debugging)을 할 수 있습니다.
물론 단순하게 예로 든 것 뿐이고 branch 를 생성해 두어도 됩니다. 특정 시점별로 branch 를 생성해 두어도 조금 보기 싫겟지만, 해당 버전을 백업하고 관리할 수 있는 것입니다.
tag 사용법
tag 사용에 대해서 팁을 주자면, tag 든 branch 든 원래는 특정 버전을 빌드한 시점, 혹은 개발을 완료한 시점에 그어주는 것이 맞지만, 다음 버전을 생성(빌드)하기 직전에 이전 버전에 대한 tag 를 생성하기도 합니다. 이는 그저 프로젝트 관리 측면에서 상이한 것이고 일반적이지는 않은 방법이지만, 실무에서는 더러 사용되는 방법이기도 합니다.
현재 repository 의 tag 리스트 확인
git tag
명령러를 입력하면 현재의 repository 에 대한 tag 목록을 확인할 수 있습니다. 단, editor 같은 형태로 열리고 수정 등이 되지 않는 형태이기 때문에 q
를 입력하여 빠져나와야 합니다. (모를때는 Ctrl + c
로도 빠져나와지지 않아 애먹었습니다.)
$ git tag
tag 생성
이제 태그를 생성하 보려고 합니다. tag 생성 명령어는 git
명령어에 option으로 tag
를 주고, tag 에 대한 파라미터로 tag name
을 주면 됩니다.
$ git tag {tag name}
이렇게 입력하면 아무런 문구 없이 명령 프롬프트가 그냥 남아있는데, 그래도 태그가 잘 생성된 것입니다.
push 하기
이제 앞서 생성한 tag 를 원격 git 서버에 올리는 방법을 보겠습니다. git 명령어로 생성한 tag 를 서버에 반영하는 것이므로 git push
명령어를 사용합니다.
특정 tag 명에 대해서 올리려면 아래와 같이 입력합니다.
$ git push origin {tag name}
로컬 개발환경에 존재하는 모든 태그들을 원격 저장소에 모두 올리려면 아래와 같이 입력합니다. 실질적으로는 이 명령어를 가장 많이 사용하는 것 같습니다.
$ git push --tags
tag 삭제하기
특정 tag를 삭제하려면 아래와 같이 입력합니다.
git이나 svn 같은 협업 툴에서 어떤 버전이나 revision 등을 삭제하는 것은 많은 문제를 안고 있습니다. 따라서 commit / push 등을 하기 이전에 충분히 확인하고 진행하여 삭제하는 일을 일으키지 않는 것이 가장 중요합니다.
git tag -d {tag name}
만약 github와 같은 원격 저장소에 push 했던 tag 를 삭제하려면 아래 명령어로 삭제하면 됩니다. (delete 가 아닌, :{tag name} 으로 push 하는 개념)
git push origin :{tag name}
Leave a comment