본문 바로가기
Git

[git] core sparse-checkout 기능 사용했다가 롤백한 이야기

by 지구 2022. 12. 22.

사건의 전말

1. apple, banana, chocolate 디렉토리가 있는 레포지토리가 있음
2. apple 디렉토리는 A 서버에서 운영되고
3. banana 디렉토리는 B 서버에서 운영되고
4. chocolate 디렉토리는 C 서버에서 운영되고 있음
5. A, B, C 서버는 각각 서로 바라보지도 않는 다른 디렉토리를 가지고 있음


5번이 맘에 들지 않은게 시작이었습니다..

구글링을 해보니 git 의 sparse-checkout 기능을 사용하면 원하는 디렉토리만 형상관리가 가능한 것 같더라구요. 제대로 알고 쓰는게 아니라 불안했지만 일단 사용해보았습니다.

##
$ git init

## configuration
$ git core.sparse-checkout true

## 
$ git remote add origin -f https://....

## 어떤 디렉토리만 가져올건지 설정
$ echo "apple/" >> .git/info/sparse-checkout

##
$ git checkout -t origin/master

## 현재 브랜치가 master 가 맞는지, master 의 최신 commit 을 바라보고 있는지 확인
$ git branch -v

##
$ git pull

 

A서버에서 작업을 해보니 설정한 "apple" 디렉토리만 잘 들어가더라구요. 그래서 잘 되는 줄 알았습니다.

그런데 "banana" 디렉토리에 수정사항이 발생한 뒤에 A서버에서 git pull 을 하면 "apple" + "banana"(변경된 파일만 있음) 구조가 되어버리더라구요? 여기서부터 아차 싶었습니다.

생각해보면 sparse-checkout 은 애초에 레포지토리 자체를 가지고 있다가 설정 값과 diff 해서 변경사항들을 보여주는 것 같습니다. (가져오다 x)

결국은 "형상관리를 잘하고자 했던게 시간이 지날수록 오히려 형상관리가 엉킨 것 처럼 보이겠다" 싶어서 롤백을 하게 되었습니다.

 

 

sparse-checkout 기능은 특정 모듈만을 형상관리하고자 한다면 사용하지마시고, 특정 '시간(commit)' 이후의 변경점만을 관리하고 싶을 때 사용하는 게 맞지 않을까 합니다.

적용하고 롤백했을 때 사용한 리소스를 생각해보면 역시나 동작원리를 제대로 이해하지 않은채로 무언갈 적용하는 것은 예쁜 독약과도 같네요.. 오늘도 삽질을 하며 교훈을 얻어갑니다.

 

 


아웃사이더님께서도 이와 비슷한 글을 남기셨길래 함께 첨부합니다.
적용 전 꼭 읽어보고 이해하고 적용하시길 바랍니다 :)
https://blog.outsider.ne.kr/734

반응형

댓글