refactoring을 하다보면 AAA라는 클래스를 지우고, BBB라는 클래스를 AAA로 바꾸고 싶을 때가 있다. eclipse의 refactoring 기능을 사용하면 이러한 refactoring은 매우 자연스럽고 쉽게 수행할 수 있다. 하지만, commit할 때가 문제다. 다음은 이를 시도할 때 subclipse (정확히는 subversion) 에서 발생하는 에러다.
delete --force AAA.java
D AAA.java
move BBB.java AAA.java
Entry already exists
svn: 'AAA.java' is scheduled for deletion; it must be committed before it can be overwritten
subclipse의 문제가 아니라 file 이름 기반으로 entry들을 관리하는 subversion 자체의 문제로 보인다. 물론 해결하는 방법이야 존재한다. 가장 간단하게는 deletion과 rename을 따로 commit하는 것이 바로 그것이다. 하지만, 항상 code repository에는 working version 만을 넣겠다는 rule을 깨뜨려야하기도 하다.
아아 이 글을 쓰시느라 고민하신 거군요! 글을 보니 문제가 정확히 이해되었어요. 그러고보니 화분 물 주면서 제가 한 얘기는 오해로 인한 헛소리…