기능 하나를 다시 만들자는 얘기가 나왔다. 예전에 시도하다 만 것이 있다고 했다. 주 경로를 뒤졌는데 없어서 없다고 답했다.
Table of contents
Open Table of contents
증상 — 다른 경로에 있었다
저장소 구조를 다시 봤다.
$ svn ls http://svn/repo/
branches/
tags/
trunk/
branches/ 아래를 봤다.
$ svn ls http://svn/repo/branches/
coupon-v2/
mobile-ui/
report-refactor/
coupon-v2 가 그 작업이었다. 두 달 전에 만들고 병합 안 한 채로 있었다.
주 경로만 보면 다른 경로의 작업을 못 본다. 내가 없다고 답한 것은 trunk 에 없다는 뜻이었는데 그렇게 전달되지 않았다.
어디를 봤는지 밝히지 않으면 그 답은 전체에 대한 답으로 읽힌다. 없다고 말하려면 무엇을 봤는지 함께 말해야 했다.
목록을 만들어 상태를 봤다
경로별로 마지막 변경 시각과 커밋 수를 봤다.
for b in $(svn ls http://svn/repo/branches/); do
info=$(svn info "http://svn/repo/branches/$b" | grep "Last Changed Date")
cnt=$(svn log -q "http://svn/repo/branches/$b" | grep -c "^r")
echo "$b $cnt건 $info"
done
coupon-v2/ 18건 2014-07-14
mobile-ui/ 3건 2014-03-02
report-refactor/ 42건 2014-09-19
mobile-ui 는 3건이고 반년 전이라 시작만 하고 만 것이다. report-refactor 는 최근까지 활발해서 진행 중이다.
svn log 의 커밋 수와 svn info 의 Last Changed Date 두 숫자로 상태가 갈린다. 목록이 있으니 무엇을 확인해야 하는지가 정해졌다.
주 경로와 얼마나 다른지 봤다
각 경로가 주 경로에서 얼마나 떨어져 있는지 확인했다.
svn log --stop-on-copy http://svn/repo/branches/coupon-v2 | tail -5
--stop-on-copy 를 주면 그 경로를 만든 svn copy 리비전에서 로그가 끊긴다. 언제 갈라졌는지가 나오는데 두 달 전이었다.
svn diff http://svn/repo/trunk http://svn/repo/branches/coupon-v2 | grep "^Index:" | wc -l
바뀐 파일이 24개였다. 아직 안 합쳐진 리비전은 svn mergeinfo --show-revs eligible 로 나온다.
그동안 주 경로에 들어간 변경과 겹치는 부분이 있어서 그냥 병합하면 충돌한다. 세 가지를 놓고 봤다.
병합한다 충돌을 풀어야 한다. 두 달치라 양이 많다
참고만 하고 새로 만든다 그 코드를 보면서 다시 짠다
버린다 필요 없으면 지운다
coupon-v2 는 두 번째로 했다. 그때와 요구가 달라져 그대로 병합해도 안 맞았다. mobile-ui 는 3건이고 내용이 없어 버렸고 report-refactor 는 진행 중이라 그대로 뒀다.
버리기로 한 것도 바로 지우지 않았다.
svn move http://svn/repo/branches/mobile-ui \
http://svn/repo/tags/abandoned/mobile-ui-20140909 \
-m "미완성 브랜치 보관. 3건, 2014-03 이후 변경 없음"
svn delete 대신 svn move 로 보관 자리에 옮겼다. SVN 은 이동도 이력에 남는 복사라 나중에 그 리비전으로 다시 꺼낼 수 있다.
쌓이지 않게 만든 기준
앞으로 안 쌓이게 기준을 뒀다.
활성 최근 2주 내 변경 그대로
정체 2주~2개월 무변경 담당자에게 확인
방치 2개월 이상 무변경 보관 또는 삭제
한 달에 한 번 목록을 뽑아 확인했다.
./tools/branch-status.sh
이걸 만들고 나서 오래된 것이 쌓이지 않았다.
만들 때 규칙도 정했다. 이름에 용도와 대상이 드러나게 하고 목적을 커밋 메시지에 적게 했다.
svn copy http://svn/repo/trunk http://svn/repo/branches/coupon-v2 \
-m "쿠폰 기능 재작성. 담당: ○○, 예상 완료: 2014-08"
예상 완료를 적으니 지났을 때 확인 대상이 된다. --stop-on-copy 로 그 한 줄만 뽑으면 되니 목록에 붙이기도 쉬웠다.
정리
- 주 경로만 보면 다른 경로의 작업을 못 본다
- 없다고 답할 때 어디를 봤는지 함께 말한다
svn log커밋 수와svn info의 마지막 변경 시각으로 상태를 가른다svn log --stop-on-copy로 갈라진 리비전을 본다svn diff로 다른 파일 수를 세고svn mergeinfo --show-revs eligible로 안 합친 것을 본다- 병합과 참고 후 재작성과 폐기 중에 고른다. 오래됐으면 그대로 병합이 안 맞을 수 있다
- 버릴 것도
svn delete말고svn move로 보관 자리에 옮긴다 - 멈춘 기간으로 기준을 정하고 주기적으로 목록을 확인한다
svn copy커밋 메시지에 목적과 예상 완료를 적는다