사건의 전말
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
'Git' 카테고리의 다른 글
[Git/GitHub] 어? 커밋을 했는데 잔디밭이 안생겼네 ?! (0) | 2021.07.07 |
---|---|
한 프로젝트를 GitHub로 다같이 형상관리하는 방법 (0) | 2018.07.07 |
Git 기본개념 (0) | 2018.05.14 |
댓글