Skip to content
isdnetworks
Go back

커밋에 남의 파일이 딸려 갔다

내가 고친 파일 하나를 올렸는데 커밋 목록에 파일이 여섯 개 찍혔다. 나머지 다섯은 내가 안 건드린 화면 파일이었다.

Table of contents

Open Table of contents

커밋 목록에 여섯 개가 찍혔다

개발용 서버 한 대에 작업 사본이 하나만 있었고 그 한 벌을 여러 명이 동시에 열어 고치고 있었다.

svn commit 에 경로를 안 적었다. 경로를 생략하면 현재 디렉터리를 재귀로 훑어 바뀐 것 전부가 대상이 된다. 내가 바꾼 것이 아니어도 원본과 다르면 대상이다.

svn commit -m "상품 목록 정렬 수정"

도구는 소유자를 모른다

SVN 은 누가 고쳤는지를 모른다. 작업 사본의 .svn 안에 있는 원본과 다른지만 본다. 소유자 정보라는 것이 애초에 없다.

딸려 간 다섯 개는 아직 작업 중이었다. 반쯤 고친 JSP, System.out.println 이 남아 있는 파일, 저장만 하고 열어 보지도 않은 것이 섞여 있었다.

커밋 메시지는 상품 목록 정렬 수정인데 내용은 화면 다섯 개 변경이다. 기록만 보면 내가 그 화면들을 고친 것으로 남고, 나중에 그 부분에서 문제가 나면 이력을 따라가다 내 커밋에 닿는다.

되돌리기가 간단하지 않았다

되돌리려니 걸리는 것이 있었다. svn merge -c -142 . 로 역머지하면 되는데, 그 파일들은 아직 작업 중이라 작업 사본과 어긋난다. 그쪽에서 svn update 하는 순간 방금 쓴 내용이 덮인다.

어느 파일이 내 것인지 구분할 방법도 없었다. 커밋 시점에는 여섯 개가 그냥 바뀐 파일일 뿐이다. 결국 svn diff 로 파일 하나씩 대조해 가려냈다. 작업 사본을 공유한 대가였다.

svn commit ProductList.jsp -m "..." 처럼 경로를 적으면 그것만 대상이 된다. 여러 개면 나열해야 해 귀찮아 보이지만 무엇이 올라갈지가 명령에 보인다. 올리기 전에 svn status 를 한 번 보는 것도 넣었다. 변경 표시가 붙은 것 중에 내가 안 건드린 것이 있으면 그 자리에서 드러난다.

공유하고 있던 것들

근본 원인은 명령이 아니라 구조였다. 한 벌을 공유하면 누가 무엇을 바꿨는지가 파일 상태에 안 남는다. 각자 자기 작업 사본을 갖고 있으면 내 사본에서 바뀐 파일은 전부 내가 바꾼 것이 된다.

작업 사본만 공유물이 아니었다. MySQL 도 한 벌이었다. 한쪽에서 ALTER TABLE 을 치면 다른 쪽 화면이 그때 깨진다. 코드는 각자 것인데 스키마는 공유라 어긋나는 것이다.

공유하는 것을 적어 보니 SVN 작업 사본과 MySQL 과 업로드 폴더 셋이었다. 셋 다 누가 언제 바꿨는지가 안 남는 자리다.

정리


Share this post on:

Previous Post
라이브러리가 권한을 늘렸다
Next Post
한꺼번에 바꿨더니 문의가 들어왔다