svnserve를 흉내내는 git 저장소를 만들 수 있을까?
git 저장소 (혹은 git 호환 구현체)에서 svn 서버인척하려면 필요한 걸 리스팅 하는 중.
최근에 알게된 dulwich 프로젝트 덕분에 svn 프로토콜 일부를 구현하면 아마 기존 저장소를 git으로 옮기고, svn 클라이언트 쓰는 사람들에겐 ‘여전히 svn 저장소로 보이도록’ 만드는게 가능하지 않을까 싶다.
일단 떠오르는 것만 간단히. 잘못된 부분이나 추가할 사항 있으면 댓글로 좀.
svn은 revision 번호가 존재함. git에서 (내부적으로) 적당히 tag달아서 그걸 기준으로 해석해서 보내주면 되려나? (클라이언트 동작이긴하지만 git svn을 생각하면 어렵지 않을듯)
svn은 몇 가지 (미리 정해놓은) svn:...
형식의 프로퍼티를 지원한다. 이걸 어떻게 흉내낼까? link 가 없다고 가정하면 상당히 쉬울 것 같긴한데.
(물론 여기서도 svn:externals 문제가 생길 거 같긴 하다)
executable mode야 별도로 처리하니까 (파일 퍼미션은 별도로 저장하긴하니까) svn:executable
은 처리해줄 수 있고, svn:ignore
도 .gitignore
나 .git/info/exclude
생각하면 어찌 되겠지. (.gitignore에 가깝군)
svn:keywords
같이 서버 수준에서 처리하는 기능은 GG. 이건 어찌 해볼 도리가 없다.
svn branch (copy?)를 어떻게 처리할까? git 브랜치 처럼 처리하면 망하지 않을까?
MIME 타입 처리? http://stackoverflow.com/questions/3537575/can-git-store-the-mime-type-of-a-file-like-svn-does-for-browsing-html 로 보아서는 잘 안될듯하다.
svn은 (대부분의 응답으로) unified diff를 보낸다. git에서 diff를 딸 때 unified diff로 따는 게 있었던 것 같으니 이건 큰 문제가 안될 것 같다.
svn은 저장소를 재귀적으로 정의한다. git은 저장소를 ‘하나로’ 본다. svn의 서브 디렉터리 요청이 오면 이걸 잘 처리할 방법이 필요한 듯. git에 이런 명령어(혹은 object 접근 방법)이 있던가?; log 랑 diff는 적당히 제한할 수 있었던 것 같으니 큰 문제 아닌가?
SVN 에서 서버 접근할 때 일반적으로 쓰는 명령이 뭐가 있을까?
update, commit, ls, copy, move, rm, … 정도인가?