Programming/Development Story

Plastic SCM Repository 를 Git 과 Sync 하기

Yuno.org 2021. 5. 17. 14:58
반응형

 

Plastic SCM에 대해서는 할말이 은근히 많고, Plastic SCM, SVN, GIT, Perforce를 간단하게 비교 하는 포스팅도 조만간 올릴거지만.. 그 전에 지는 몇 주 동안 나를 스트레스 받게 만들었던 Plastic SCM 저장소를 Git과 연동 하는 문제에 대해서 이야기를 해보고자 한다.

 

Changeset의 정보를 다 가져가고자 한다면 Plastic SCM 에서 Git으로 이동/연동 하는 방법은 기본적으로 4가지 정도가 있다. 

 

1. Plastic SCM의 GUI Client 에서 진행 하는 방법.

 

일반적으로 제일 많이 알려져 있고, Plastic SCM 가이드 문서에도 나와 있다. Client의 Main Actions 탭에서 sync를 원하는 branch를 선택하고 팝업 메뉴를 띄운뒤에 push/pull 메뉴에서  Sync with Git을 선택 하고 정보를 입력 하며 된다.

 

2. Plastic SCM의 CLI Client에서 진행 하는 방법.

 

역시 가이드 문서에 써 있는 내용인데, cm 을 이용해서 직접 커맨드 라인에서 호출 하는 방법.

 

3. Fast Export 를 이용하는 방법.

 

Fast Export 라는 오래된 기능이 있다. 저장소를 Git에서 사용하는 별도의 파일로 추출 하는 것. 이건 1회성으로 작동 하므로 지속적으로 싱크를 맞춰야 하는 경우에는 적절하지 않다. 물론, 다른 옵션과 달리 이 기능은 changeset 의 구간을 입력 가능한 것으로 보여서 직접 구현하면 원하는 용도로 쓸 수 있을 것 같기는 하다.

 

4. Plastic SCM의 Git Server 기능을 활성화 시키고 Git에서 미러링 해가기.

 

PSCM 서버는 Git Server의 아주 기본적인 기능은 제공 하고 있어서, 이 녀석을 활성화 시키면 불안정 하지만 Git Client로 접근이 가능하다. 같은 방법으로 몇몇 Git 서버들의 미러링 기능으로 자료를 pull 해갈 수 있다. (예를 들면 Gitlab EE 기능에 해당 기능이 있다)

 

그런데 이제 몇가지 제약 사항들이 나온다.

 

1. HTTP/HTTPS의 경우 Timeout이 있다. 따라서 Changeset의 용량이 크거나, 저장소의 용량이 크거나, 내보내야 하는 Changeset의 양이 많은 경우 모든 데이터를 Git 서버로 전송 하지 못하고 connection이 작별을 고한다. 그러면 모두 도루묵.. 따라서 작은 크기의 경우 http/https 프로토콜을 이용해도 상관 없으나, 크면 다시 생각해보자. 지금은 가능해도 시간이 지나면 사이즈가 커져서 더 이상 연동이 안되는 지옥이..

 

2. SSH를 이용하면 용량 제한 관계 없이 올릴 수 있다. 다만, SSH Timeout 은 존재한다. 무슨 의미냐면 SSH로 데이터 전송을 시작만 하면 크기에 관계 없이 전송이 가능한데 문제는 Plastic SCM Git Sync 기능은 최초에 접속 하고, 필요한 데이터를 추출/아카이빙 할 때까지 아무런 데이터 전송을 하지 않는다. 따라서 역시 사이즈가 크면 중간에 끊어진다.

그래서 ssh client conig 를 수정해서 client 대기 시간을 늘리고 keepalive 가 가능한 상태를 만들어 줘야 한다.

 

3. SSH를 이용하면, 포트가 고정 된다. 놀랍게도 Plastic SCM은 포트 변경 기능 따위는 무시하고 있다. 무조건 22번 포트를 사용한다. 주소에 어떤 포트 번호를 넣던지 무시하고 22번에 접속 한다. 이 것 역시 강제로 config 에서 hostname으로 강제 설정해서 회피 할 수 있다.

 

4. SSH를 이용하면 중간에 문제가 생겨도, 잘 알려주지 않는다. Plastic SCM으로 SSH 를 이용해서 Git과 연동 할 경우, 애시당초 서버에 접근 실패 하거나, 접속이 끊겼거나 해도 메세지만 표시 될 뿐 그냥 진행이 된다. 마치 Exception Handling 을 하고 있는 것 마냥.. 사용하는 저장소가 40GB가 넘어서 한번 Sync 돌리면 보통 짧으면 6시간 길면 10시간 정도 돈다. 그런데, 한참 돌고 난 뒤 Git에 가보면 아무런 파일이 올라가 있지 않은.. 황당한 경우를 겪었는데 알고보니 SSH 연결 상태를 이녀석은 신경 쓰지 않고 작업을 한다. (대체 그 시간 동안 뭘 하는거지..?)

 

그나마, CLI를 쓰면 Log message로 유추라도 되지만 일반적으로 사용하는 GUI 사용하면 메세지 조차 없다. 

 

따라서 만약에 저장소가 크고, ssh 포트를 별도로 변경해서 사용중인 git으로 sync 하고자 하면 ssh config에 관련 정보를 직접 넣어서 처리 하도록 하자.

 

 

반응형