MKS 무결성 저장소를 GIT로 가져올 수 있습니까?
-
19-09-2019 - |
문제
나는 소스 트리와 그 역사 만 필요합니다. 나는 지금 요구 사항/문제를 신경 쓰지 않습니다. 나는 트렁크와 일부 개발 경로에 대한 변경 패키지 목록을 얻을 수 있는지 알아 내기 위해 명령 줄을 약간 재생했습니다. 나는 모든 변경 패키지에 대해 Diff를 추출하고 GIT에서 첫 번째 커밋 이후 모든 변경 사항을 재생하는 데 사용하는 것이 가능하다고 생각했습니다. 이 같은:
- 먼저 커밋하고 git에 추가하십시오
- 다음 CP를 얻으십시오
- CP에 대한 Diff를 얻으십시오
- git 작업 dir에 Diff를 적용하십시오
- git에 변경 사항을 추가하고 커밋합니다
- 마지막 CP까지 (2)로 반복하십시오
Checkpoint로 변경 패키지를 교체 할 수도 있습니다 (나에게 충분할 것입니다).
더 간단한 방법은 CP를 체크 아웃하고 git에 추가/커밋하는 것입니다. 그러나 Add, Remove, Move 및 Relame의 트랙을 느슨하게 할 수 있습니다.
"SI Diff"와 통일 된 차이를 얻는 방법을 아는 사람이 있습니까? 그것은 이미 많은 도움이 될 것입니다.
어떤 아이디어?
edit2 :
내가 실제로 마이그레이션을 어떻게했는지 보여주는 답을 추가했습니다 ...
해결책
문제 MKS 무결성 그들의 독특한 저장소입니다 모든 것 거주 :
- 요구 사항,
- 시험 계획,
- 테스트 사례,
- 특징,
- 개발자 작업,
- 배포 요청
이러한 데이터는 자체 속도로 독립적으로 진화 할 수 있으므로 한 git 저장소로 가져 오는 것은 나쁜 생각입니다. 복제 할 수 있습니다. 모두 git repo의 내용 (해당 클론의 깊이를 제한 할 수 있다고해도).
즉, 코드에 관심이 있지만 모든 문서를 얻을 수 있습니다.
MKS 무결성 내보내기는 다음과 같은 많은 git 리포지토리를 정의하는 것을 의미합니다. 하위 모듈.
나는 소스 트리와 그 역사 만 필요합니다.
평소와 같이, 나는 가져 오는 것이 좋습니다.
- 주요 레이블 (1 년 이상 또는 편안하다고 느끼는 기간이 너무 오래 되었기 때문에 검사를 완전히 필요로하지 않습니다).
- 지난 몇 년간의 모든 라벨 (주요 및 미성년자).
그리고 나는 모두 가져 오지 않을 것입니다 하나 모든 출처가 하나 시스템 (그리고 독립적으로 개발 된 몇 가지 "모듈이 아님)으로 개발 된 시스템
더 간단한 방법은 CP를 체크 아웃하고 git에 추가/커밋하는 것입니다.
그것은 진행하는 방법 일 것입니다.
그러나 Add, Remove, Move 및 Relame의 트랙을 느슨하게 할 수 있습니다.
다른 팁
나는 내 시간에 그것을하지 않았기 때문에 내가 쓴 실제 프로그램을 게시 할 수 없습니다. 그러나 내가 한 방법을 게시 할 수 있습니다. 스크립팅 언어로 쉽게 다시 할 수 있어야합니다. 내가 쓴 도구는 한 번에 하나의 지점 만 마이그레이션했습니다. 나는 내가 원하는 지점 (예 : 1.21.1)과 지점의 시작 및 종료 개정 (예 : 4 및 78은 1.21.1.4에서 1.21.1.78에서 1.21.1.78까지 모든 개정을 마이그레이션 할 것입니다. 하나의 repo에 모든 분기를 갖기 위해서는 가져 오기에 사용할 .git 디렉토리를 제공합니다.
- 개정 시작에서 종료 개정으로 루프를 시작하십시오
- currentrev = branch.loopcounter
- Repo 디렉토리를 만듭니다
- .git dir를 Repo 디렉토리로 이동하십시오
- .gitignore 파일을 Repo 디렉토리로 이동하십시오
- Repo 디렉토리에 chdir
- "si createandbox -p mks_project_path---y-projectrevision = currentrev를 통해 Repo dir 내부에서 mks 샌드 박스 만들기
- "SI ViewProjecThistory ---rfilter = 범위 : CurrentRev-CurrentRev"를 통해 개정 설명을 가져 오십시오. 캡처 출력!
- 추출 사용자, 날짜, 레이블, 이전 출력의 주석
- "Git Add."
- 위의 파이프 추출 정보 위에서 "git commit -qf-"(체크 포인트 주석과 같은 여러 줄을 원한다면 할 수 없음)
- "Si Dropsandbox -yes Index.pj"를 통해 샌드 박스를 드롭
- .git 및 .gitignore를 저장 장소로 이동하십시오 (다음 반복을 위해)
- 샌드 박스 디렉토리에서 남은 모든 파일을 삭제하십시오
- Parent Dir (..)로 이동
- 샌드 박스/repo dir를 삭제합니다
- 최종 git dir를 만듭니다
- .git 및 .gitignore를 최종 Git Dir로 이동하십시오
- "git 리셋 -하드 헤드"
완료.
MKS는 문자열을 위해 일종의 ASCII 인코딩을 사용하고 GIT는 일반적으로 UTF-8을 사용하므로 메타 데이터를 GIT (사용자 이름, 댓글, 태그 등)로 가져올 때 문제를 조심하십시오.
더 많은 지점의 경우 다음을 수행합니다.
- GIT 디렉토리 체크 아웃에서 지점이 시작하고 분기를 만들어야하는 개정판 ( "Git Checkout -B NewBranchName")
- 이제 .git 및 .gitignore를 저장 장소로 이동하고 전체 딥을 삭제하십시오.
한 가지 더 : "SI"는 MKS 명령 줄 도구입니다. 따라서 완전한 경로를 지정하거나 경로를 검색 경로로 넣어야합니다.
FWIW, SI DIFF 슬프게도 현재 Unified Diff를 지원하지 않습니다. 변경 요청이 있지만, 그 기능을 요구하는 고객은 아직 너무 많지 않았습니다.
면책 조항 : PTC (MKS를 인수 한 사람)에서 일합니다.
이것은 체크 포인트에 대해 작동합니다 ...
https://gist.github.com/2369049
불행히도, 체크 포인트는 MKS-> git에서 실제로 의미가있는 유일한 것 같습니다. 체크 포인트는 실제로 Git이 커밋이라고 부르는 "스냅 샷"에 가장 가까운 것이기 때문입니다.
MKS는 양립 할 수없는 개념 (파일 버전 추적 당, git 브랜치, 체크 포인트 등과 같은 분기)을 가지고 있습니다.이 모든 것은 서로 독립적으로 진화 할 수 있습니다. 아마도 그것을하는 방법에는 여러 가지가 있으며 다음과 같은 것보다 더 "올바른"것은 없습니다.
즉, 좋은 아이디어를 듣고 싶습니다. :)
파일당 버전을 현명한 방식으로 캡처하는 솔루션을보고 싶습니다. 일부 토론에서 우리는 커밋 타임이나 무언가로 파일당 MKS 파일을 정렬하려는 아이디어를 중심으로 던졌습니다. 그렇게하면 여러 파일의 변경 사항이 포함 된 커밋을 통해 진화하는 "Repo"의 개념을 공식화 할 수 있습니다.
이 도구를 사용하여 MKS에서 Mercurial으로 변경 패키지를 가져 오면 GIT로 가져 오는 것이 매우 유사해야합니다. 또는 먼저 Mercurial으로 가져 와서 GIT 도구를 사용하여 다음에 Mercurial을 가져올 수 있습니다.
https://github.com/arsane/py-mks2hg.git
지정된 프로젝트에 따라 모든 변경 패키지를 찾아서 새로운 수은 저장소에 순서대로 노력할 것입니다.