CVS 사용 중 질문 - 진행 중이던 작업을 나중에 저장소에 넣고 난 후의 문제, 버전관리 이용하던 중 추가된 파일을 인지못하는 문제
1. 버전관리 없이 진행중이던 작업을 버전관리하기로 결정하고 저장소에 import하고 co할 때 생기는 성가시고 위험할 수도 있는 부분에 대해
버전관리 없이 진행하던 작업을 import시켜서 저장소에 집어넣었습니다. 그 상태에서 원래 진행하던 작업 폴더에 버전관리가 작용하려면 어떻게 해야 깔끔한가요?
무슨 말인고 하니, proj라는 폴더에서 버전관리 없이 작업을 하다가 그 폴더를 통째로 import시켜서 저장소에서 관리되게 만듭니다. 그 다음에 방금 넣은 프로젝트를 지금까지 작업해오던 proj 폴더로 체크아웃(co)하면 충돌(colflict)이 발생합니다. 그래서 체크아웃할 때 다른 폴더로 지정해서 받은 다음에 그 파일들(에서 중요한 건 폴더마다 있는 CVS 숨김폴더에 있는 메타데이터겠지요)을 작업하던 폴더에 덮어씌웁니다. 그러면 원래 작업하던 폴더도 버전관리를 지속적으로 할 수 있게 되지요.
이 부분이 영 석연치 않습니다. 수동으로 덮어씌우는 작업 자체가 매우 깨지기 쉬운 작업이라 생각되고, 혼자할 때는 그렇다쳐도 버전관리를 하지 않던 2인 이상의 작업을 버전관리를 하기로 결정하면서 저장소 하나로 통합할 때 특히 문제가 생길 것 같습니다.
이클립스의 CVS 플러그인에서는 팀 기능에서 저장소에 공유(share)하면서 import하고 다시 co해서 메타데이터를 채우는 부분까지를 알아서 처리해주는 것 같습니다. 이클립스에서 하는 작업들은 이렇게 되니까 상관없지만(정확히 기억나진 않지만, 2인이상의 작업을 통합할 때도 꽤 잘 처리가 됐던듯), 다른 독립적인 작업들은 WinCVS를 클라이언트로 써서 관리하는데 이렇게 깔끔하게 처리할 방법을 모르겠더군요.
이런 경우 어떻게들 하고 계시나요? 인터넷이나 다른 레퍼런스를 쉽게 참고할 수 없는 환경에서 개발중이라 부득이 질문을 올립니다.
2. 버전관리를 통해 작업을 하다가 나중에 저장소에 추가한 서브폴더나 파일들을 다른 사용자의 CVS 클라이언트에서 인지 하지 못함.
개발자는 이클립스로 작업을 하며 CVS 플러그인을 이용해 저장소와 동기화를 합니다. 개발자가 테스트를 끝내면 서버에서 WinCVS를 클라이언트로 써서 코드를 체크아웃해서 서비스 코드에 적용합니다. 그런데 개발자가 초기부터 작업하던 폴더구조와 파일들을 체크아웃한 것에 대해서는 갱신(update) 확인이 됩니다(서버쪽 WinCVS에서 알아챕니다. 당연하게도). 그런데, 개발자가 나중에 저장소에 추가한 새로운 서브 폴더나 파일들은 서버에서 코드 업데이트 확인할 때 알아채지를 못합니다. 뒤져보면 서버측의 각 CVS 폴더의 Entries에는 방금 저장소에 추가된 파일들의 항목이 없기 때문에 체크 자체가 안되는게 아닌가 추측이 됩니다.
구체적인 상황을 예로 설명하자면, /solong 이라는 프로젝트를 버전관리해서 작업하고 있는데, 개발자가 /solong/feature/search 라는 폴더를 나중에 추가했을 경우, 그전까지 계속 업데이트 확인을 하던 서버쪽에서는 /solong 을 업데이트 확인해도 추가된 feature 이하의 폴더와 파일들을 인식하지 못합니다. 추가된 서브 폴더 뿐 아니라 루트에 파일이 추가되도, 그러니까 /solong/lib.php가 추가 되었다고 해도 자동으로 인식하지를 못합니다. /solong/CVS/Entries에 없는 항목이어서 그런 것인지. 이 상황을 해결하는 방법은 지금은, CVS 클라이언트(WinCVS)에서 수동으로 /solong/feature(또는 /solong/lib.php)를 체크아웃(업데이트가 아니라!) 해옵니다. 그러면 그다음부턴 /solong/CVS/Entries에도 해당 항목이 생기고 파일들의 갱신 여부를 확인을 할 수가 있습니다. 업데이트 확인할 때 로컬 영역에 있는 Entries와 저장소에 있는 Entries도 당연히 비교를 해야할 것 같은데, 왜 이러는지 이해가 안 됩니다.
첫번째 질문은...
첫번째 질문은... 통상 import 한 다음에는 import한 데이터들은 다 지웁니다.
그다음에 다른 팀원들은 물론 import 한 사람도 모두 checkout 합니다. 이때부터 CVS를 통한 작업이 시작되죠.
그리고 님이 말씀하신 다른곳에 checkout 하신 경우에는 checkout한곳 내에서 작업하셔야 합니다.
프로젝트 파일들 내에 생성된 .cvs 디렉토리를 import한 데이터로 옮기는 것은 가능하나 디렉토리가
많을 경우 엄청난 노가다가 될 수 있습니다. 그리고 cvs 매뉴얼에서도 .cvs와 그 아래 파일들에
대해서는 건드리지 않는 것을 권장하고 있습니다. checkout하면 님이 import한 자료는 물론
메타데이터까지 그 디렉토리 구조 그대로 생성되니 그걸 쓰시면 됩니다.
그리고 두번째 질문의 경우
파일 추가한 개발자가 파일을 Add로 추가하였더라도 저장소에 바로 안들어갑니다.
해당 개발자가 commit을 해줘야 저장소로 올라가고 그때부터 다른 사람들이 update하면 목록에 나옵니다.
요새는 subversion만 써서 cvs가 그다지 익숙치 않게 됐네요.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
댓글 달기