git tag 일괄 삭제

hotbreakb·2024년 2월 7일
0

saas

목록 보기
2/5
post-thumbnail
post-custom-banner

배경

  • repo를 둘러보다, 갑자기 알아차린 git tag 덩어리. tag push로 배포를 하고 있는데, 깔끔하게 지운 적이 없다.
  • tag push가 되면 GitKraken에서 tag 이름 아래 branch 이름이 보여서 브랜치의 위치를 파악하기 불편했다.
  • tag 위치에서 build 파일을 만들어 bitbucket에 저장해둬도, 2주 후면 사라져서 어차피 다시 tag push 해야 한다. 즉, 오래된 tag는 필요없다는 것.
  • 배포가 끝나면 내가 push한 걸 지웠다. 하나씩 지우려니 여기에 시간 쓰는 게 아까우면서도, 그렇다고 이 작업이 시간이 오래 걸리는 건 아니라 라이브러리를 찾아볼 생각을 안 했다.
  • 지우는 게 필수적이지 않은 데다 여러 명이 한 레포에 태그 푸시를 하다 보니 이 지경까지 왔다.

공유

태그를 삭제해도 슬랙에 알림이 간다. 여러 개 레포에 있는 걸 오늘 오전 몰아서 지웠더니, 지금까지 688개.

방법

입력

  1. git-delete-tag 라이브러리 global 설치
  2. 태그 삭제할 repository를 열고 .git이 있는 위치로 간다.
  isGitProject() {
    if (!fs.existsSync(path.join(this.cwd, '.git'))) {
      throw new Error(
        logger.error('Current working directory is not a git project!')
      )
    }
    return true
  }
  1. readme에 적힌 대로 태그 삭제
    • local과 remote에서 각각 삭제해야 한다.

대기

누적된 게 많아서 이 글을 쓰고 있는 와중에도 태그를 삭제하고 있다. 기다리면서 코드를 봤는데 js파일이 100줄로 깔끔하게 떨어진다.

deleteTag(tags, options) {
    const matched = matcher(this.getTag(options), tags) // '여기에 적힌 문구'와 맞는 걸 가져온다

    matched.forEach(tag => {
      const spinner = ora(`Deleting${this.text(tag)}`) // 찾아보니 스피너 보여줄 때 쓰는 라이브러리였다
      spinner.start() // 빙글빙글
      const args = this.isRemotes
        ? ['push', options.scope, `:refs/tags/${tag}`] // 리모트 푸시된 거
        : ['tag', tag, '-d'] // local에 있는 거
      const ps = spawn.sync('git', args)
      if (ps.status === 0) {
        spinner.succeed(`Deleted${this.text(tag)}`) // 스피너에서 체크 모양으로 바뀐다
      }
    })
  }

코드에 나와있는 ora spinner

결과

614개 > 87개

규칙

  1. prd 태그는 삭제하지 않는다
  2. 전날을 제외한 dev, stg tag를 삭제한다
profile
글쟁이 프론트 개발자, 헬렌입니다.
post-custom-banner

0개의 댓글