git(on svn)이 대소문자만 다른 디렉토리를 커밋해버렸다

거의 악몽같은 일을 하나 당했다. 일단 회사에서 작업하는 환경은 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만 잘 쓸 줄 알아도 도망갈 구멍은 있더라.
Jinuk Kim
Jinuk Kim

SW Engineer / gamer / bookworm / atheist / feminist

Articles: 935

6 Comments

  1. 1. 아하, 후크 스크립트도 가능하군요. 그건 몰랐습니다.
    2. 비슷한 일이 있었는데 똑같은 방법으로 해결했습니다. 저 같은 경우는 Repo-browser로 지우는 정도로는 되지도 않던 상황이어서, 롤백하는 수밖에 없었어요.

    • 그냥 리포브라우져로 안되는건 한 리비젼씩 무조건 끌고가는 툴이 Win32 위에서 돌 때 뿐이지 않을까?(…) 아님말고(…)

      여튼 훅을 좀 제대로 써봐야할듯(…)

Leave a Reply