git worktree를 활용해서 일하기
지난 몇 달(6? 12?) 사이의 프로그래밍 작업은 아래와 같은 식으로 주로 진행했다.
- 새로운 작업에 대해서
git worktree
로 작업 공간을 준비한다.git worktree add -b feature-foo-1 ../feature-foo-1 origin/main
- 새 작업 공간에서 작업을 수행한다.1 해당 작업 공간은
feature-foo-1
branch 에 해당하고, 여기서 필요한 수정/테스트를 진행한다. - 새 작업 공간에서 한 작업을 mainline에 반영한다.
- 1에서 만든 작업 공간을 제거한다:
git worktree remove --force ../feature-foo-1
2
이 작업 방식이 꽤 잘 맞았는데,
git worktree list
로 동시에 진행하고 있는 작업을 바로 알 수 있다. 예를 들어 hotfix-bar를 작업하다가 feature-foo로 되돌아가는게 별 지장없이 이루어지더라.- 저장소에 있는 코드가 아닌, 빌드 시간에 생성하는 코드 때문에 겪는 문제가 없다. Branch를 오가면 이 코드도 새로 생성해야하는데, 이로 인한 문제를 피할 수 있다.3 특히나 파일 변경 시간 기준으로 코드 생성 여부를 처리하는 도구를 쓴다면, 이런 문제가 더 쉽게 생기더라.
- 수정 사항이 의도치 않은 branch에 적용되거나 하는 일이 없더라. 하나의 작업 공간에서 여러 branch를 오가면 작업하면 종종 문제를 겪게 되더란.
- 임시 파일 관리. 작업 하다가 임시 파일이 생기면
git clean -d -f -- {sub directory}
같은 명령으로 정리하곤 하는데,git wortree remove ...
면 신경쓸게 없다.
이전에는 주로 어떻게 했었나? git clone
을 로컬 저장소에 대해서 실행하면
새로 복제한 저장소는 pack파일을 공유하고, 이 결과 추가적인 용량 증가가 거의
없는 상태에서 새 작업 공간을 만들 수 있었다. 다만 이 경우엔 branch나 commit
들을 여러 복제된 저장소 간에 공유하지 않기 때문에, 일부 작업 간에 commit을
cherry-pick 하거나 할 때 불편하다.
-
사족을 달자면 VScode의 Peacock 확장 기능을 잘 써먹고 있다. 이걸로 작업 공간마다 다른 색을 써서 구분이 가게 해놓고 쓴다. 특히나 “Peacock: Surprise Me with a Random Color” 명령이 아주 유용하다. ↩︎
-
간단한 스크립트를 만들어서 이 작업을 크게 신경쓰지 않고 처리하고 있다. ↩︎
-
여러가지 코드 생성기로 작성한 코드를 넣을지 말지는 의견이 분분하다. 내가 일하는 환경에선 종류에 따라서 들어가는 것도 있고, 그렇지 않은 것도 있다. ↩︎