팀에서 SVN을 쓰고 있었다. 그전까지는 파일을 압축해서 주고받았다.
Table of contents
Open Table of contents
남의 것이 없어졌다
svn commit을 하고 나니 다른 사람이 고친 부분이 사라졌다는 이야기를 들었다.
확인해 보니 내가 올리면서 덮은 것이었다. 내가 svn checkout한 뒤에 그 사람이 올린 변경이 있었는데, 내 작업 폴더에는 그게 없으니 옛 상태가 다시 올라갔다.
충돌 표시가 나왔다
그 뒤로 svn update를 먼저 하게 됐다. 그러니 이번에는 파일이 넷으로 늘었다. 원본 옆에 .mine과 .r141·.r142가 생겼다.
<<<<<<< .mine
int limit = 20;
=======
int limit = 50;
>>>>>>> .r142
처음에는 파일이 깨진 줄 알았다. 문서를 보니 .mine은 표시 없는 내 판, .r141은 내가 받았던 판, .r142는 서버에서 방금 받은 판이었다. 원본에는 세 표시가 들어간다.
어느 쪽이 맞는지는 코드만 봐서는 몰라 그 사람에게 물었다. 표시를 지우고 하나만 남긴 뒤 svn resolved를 해야 커밋이 된다. 딸린 파일 셋도 그때 함께 지워진다.
자주 받으면 충돌이 작다
며칠 만에 update하면 충돌이 여러 파일에서 나고 각각 덩어리가 컸다. 아침마다 받으면 하나도 안 나거나 나도 몇 줄이었다.
같은 파일을 둘이 만지고 있으면 미리 말하는 편이 빨랐다. 도구가 아니라 순서의 문제였다.
저장소에 올리지 않을 것
svn status에 ? 표시가 잔뜩 나왔다. .class 파일, Eclipse의 .settings 폴더, 로컬 DB 설정이었다.
svn propset svn:ignore로 뺐다. 빌드 결과물과 개인 설정은 올리지 않는다는 것을 그때 배웠다.
DB 접속 정보를 올렸다가 뺀 적도 있는데, 저장소 이력에는 남아 있다. 그것을 어떻게 지우는지는 아직 모른다.
정리
commit전에update를 안 하면 남의 변경을 덮는다- 충돌이 나면 원본 옆에
.mine·.r<이전>·.r<최신>셋이 생긴다 - 원본에는
<<<<<<<·=======·>>>>>>>표시가 들어간다 - 표시를 정리한 뒤
svn resolved를 해야 커밋되고 딸린 파일이 지워진다 - 어느 쪽이 맞는지는 코드로 안 되고 사람에게 물어야 한다
- 자주 받으면 충돌 덩어리가 작다
- 빌드 결과물과 개인 설정은
svn:ignore로 뺀다 - 한 번 올린 것은 이력에 남는데 지우는 법은 아직 모른다