문제

나는 소스 트리와 그 역사 만 필요합니다. 나는 지금 요구 사항/문제를 신경 쓰지 않습니다. 나는 트렁크와 일부 개발 경로에 대한 변경 패키지 목록을 얻을 수 있는지 알아 내기 위해 명령 줄을 약간 재생했습니다. 나는 모든 변경 패키지에 대해 Diff를 추출하고 GIT에서 첫 번째 커밋 이후 모든 변경 사항을 재생하는 데 사용하는 것이 가능하다고 생각했습니다. 이 같은:

  1. 먼저 커밋하고 git에 추가하십시오
  2. 다음 CP를 얻으십시오
  3. CP에 대한 Diff를 얻으십시오
  4. git 작업 dir에 Diff를 적용하십시오
  5. git에 변경 사항을 추가하고 커밋합니다
  6. 마지막 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의 트랙을 느슨하게 할 수 있습니다.

아니! 당신은 그렇지 않을 것입니다! git 미루다 그 작업.
그것이 파일이라는 이점입니다 콘텐츠 VCS.

다른 팁

나는 내 시간에 그것을하지 않았기 때문에 내가 쓴 실제 프로그램을 게시 할 수 없습니다. 그러나 내가 한 방법을 게시 할 수 있습니다. 스크립팅 언어로 쉽게 다시 할 수 있어야합니다. 내가 쓴 도구는 한 번에 하나의 지점 만 마이그레이션했습니다. 나는 내가 원하는 지점 (예 : 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

지정된 프로젝트에 따라 모든 변경 패키지를 찾아서 새로운 수은 저장소에 순서대로 노력할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top