거의 악몽같은 일을 하나 당했다. 일단 회사에서 작업하는 환경은 Win32 or Win32-x64 다.
생각없이
git add SomeDirectory/*.cpp
했는데,
저 디렉토리가 Somedirectory 더라고(…).
그리고 저걸 깨달았을 때는 이미 git commit; git svn dcommit 후(…………)
결과: SVN 에 대소문자가 다른 디렉토리가 생겨버렸다!
지금 작업하는 OS는 Win32 -_-; 당연히 나 혼자 작업하는 SVN이 아니니, SVN 개발자들이 절대 사용하지 말란 방법으로 롤백했다. (다른 좋은 롤백 방법을 알면 좀 알려주십시다;;; )
편의상 현재 rev를 1000, 되돌아갈 녀석을 999라 칩시다. 덤으로 SVN 저장소가 있는 실제 디렉토리를 SVN_ROOT라고 치면,
일단 SVN 서버를 내린 후.
- SVN_ROOT/db/current 파일을 열어 현재 리비젼을 롤백할 버젼으로(999로) 바꾼다
- SVN_ROOT/db/revs/ 디렉토리의 1000 파일을 지운다(이름 바꾸는 쪽을 추천)
- SVN_ROOT/db/revprops/ 디렉토리의 1000 파일을 지운다(돌아갈게 998이라면 999도 지워야 한다; 역시 이름 바꾸는걸 추천).
이렇게 한 담에 trac-admin resync를 걸어놓았다.
그 사이에 일단 기존 소스랑 내가 바꾼거랑 diff를 뜨고(…), 이걸 새로 받은 999번 rev에 적용해서 다시 커밋해놨다.
일단 억지로 해결하긴 했는데, 혹시 이런 일 당해보신 분? -_-;; 뭔가 좋은 해결책 없을라나요(…)
여튼 3줄 요약.
- Windows 에서 소스 컨트롤 쓸 때는 대소문자 조심 ((*nix 기반툴 뿐만 아니라 대부분의 소스 컨트롤이 대소문자를 구분한다. 보통은 이걸 챙겨주지만 문자열을 binary byte stream으로 해석하는 git은 -_-;;; ))
- SVN 저장소 고치는 건 집에서 일하는 곳에서 절대로 따라하지 맙시다(…)
- diff/patch만 잘 쓸 줄 알아도 도망갈 구멍은 있더라.
대소문자를 검사하는 후크 스크립트를 걸어두셔야지용~ *.~
그러게요-_-;; SVN 훅을 하나도 안 쓰고 있긴하네요;;;
적용해봐야겠네요 :)
Repo-browser로 Delete 해버리는 걸론 부족한가? ;
그런것도 가능하겠네(…). 근데 좀 급해서(?) 일단 생각나는데로 처방을 했지비
1. 아하, 후크 스크립트도 가능하군요. 그건 몰랐습니다.
2. 비슷한 일이 있었는데 똑같은 방법으로 해결했습니다. 저 같은 경우는 Repo-browser로 지우는 정도로는 되지도 않던 상황이어서, 롤백하는 수밖에 없었어요.
그냥 리포브라우져로 안되는건 한 리비젼씩 무조건 끌고가는 툴이 Win32 위에서 돌 때 뿐이지 않을까?(…) 아님말고(…)
여튼 훅을 좀 제대로 써봐야할듯(…)