(Git) 배포 전략 / .gitignore 수정이 적용되지 않는 문제 해결

이동훈·2023년 3월 30일

이번에 이야기하고자 하는 주제는 크게 두 가지다.

  1. 배포를 위한 git branch 전략
  2. jar 파일 업로드를 위해 gitignore등을 수정할 일이 생겼을때, 파일을 변경하였음에도 제거되지 않는 문제 해결

1. 배포를 위한 release-branch

통상의 git flow의 branch 전략은 이러할 것이다.

하지만 공통 프로젝트때, 자동화 배포를 한 개의 job으로 배포하는 것은 업무적으로 매우 비효율적이라고 느껴졌다.
하여 이번 특화 프로젝트에선, client와 server를 각각의 pipeline을 만들어 배포를 하자고 제안, 진행하였다.

브랜치 이름은 release-server, release-client 되시겠다.

  1. release-client와 release-server 브랜치는 main base가 아닌 dev base로 구성했다. 직관적인 이해를 위해 그림을 옆으로 빼었다.
  2. 해당 브랜치는 dev에는 존재하지 않는, release 브랜치에만 존재하는 Dockerfile과 Jenkinsfile을 보유한다.
  3. 이는 Webhook으로 Jenkins와 연결되어 push event 발생 시 자동으로 CI/CD가 진행된다.
  4. 이 프로젝트에서 참가 구성원들은 dev로 merge하며 작업을 진행하다가,
  5. be leader / fe leader의 판단 하에 필요에 따라 해당 브랜치에서 dev를 pull하여 merge 혹은 rebase를 진행하면 된다.

잘 돌아간다!


2. gitignore 수정이 적용되지 않는 문제 (git rm)

우리 프로젝트의 백엔드 배포는, 가동 중지 시간을 보다 줄이기 위하여 jar 파일을 미리 build하여, ec2에 git clone을 시킨 후 jar 파일을 실행시키는 방식으로 계획되었다.

그렇기에, build/lib 디렉토리 하에 생성되는 jar 파일을 gitignore에서 해제시켜줄 필요가 있었다.

기본적으로 gitignore.io에서 생성되는 .gitignore 파일에는 build 패키지가 제외되어 있다. (Java/IntelliJ)

그런데 수정한게 적용이 안된다!

build/, /build, /build/, build/** 모든게 다 적용이 안되더라. 화가 났다.
그리고 약간의 시행착오 끝에 이유와 방법을 찾아냈다.

이유: git이 기존에 추적되고 있던 것이 남아있어, gitignore가 적용되지 못했다.

기존에 git에서 관리되고 있던 커밋이 남아서 일어난 일이었다.

그래서, 해결법은 간단했다.

해결: git -rm 경로

이렇게 명령어를 입력하면, 해결이 된다.

다른 방법으로는 널리 알려진 방법으로 git -rm --cached 명령어가 있던데,
이 명령어를 입력했더니, 모든 커밋이 날아가는 것처럼 보여서 식겁하고 그냥 git 하드리셋 해버리고 다른 방법을 찾았더랬다.

profile
Fool Snack Developer

1개의 댓글

comment-user-thumbnail
2023년 3월 30일

release 브랜치를 야무지게 사용중이시군요 하나 배워갑니다 ~~

답글 달기