2009-08-21 20 views
10

Tôi chỉ cần cây nguồn và lịch sử của nó. Tôi không quan tâm đến các yêu cầu/vấn đề hiện tại. Tôi chơi một chút witth dòng lệnh để tìm ra nếu tôi có thể nhận được một danh sách các gói thay đổi cho thân cây và một số đường dẫn dev. Tôi nghĩ rằng nó có thể trích xuất một diff cho mỗi gói thay đổi và sử dụng để phát lại tất cả các thay đổi kể từ lần commit đầu tiên trong git. Một cái gì đó như thế này:Có thể nhập kho lưu trữ toàn vẹn MKS vào git không?

  1. được cam kết đầu tiên và thêm nó vào git
  2. được CP tiếp theo
  3. được diff cho CP
  4. áp dụng diff git làm việc dir
  5. add và cam kết thay đổi để git
  6. lặp lại bằng (2.) cho đến CP cuối cùng

Bạn cũng có thể thay thế gói thay thế bằng c heckpoint (sẽ đủ tốt cho tôi).

Cách đơn giản hơn là chỉ cần thanh toán CP và thêm/cam kết git. Nhưng sau đó bạn sẽ mất dấu các hoạt động thêm, xóa, di chuyển và đổi tên.

Có ai biết cách nhận được sự khác biệt thống nhất từ ​​"si diff" không? Điều đó đã giúp rất nhiều.

Bất kỳ ý tưởng nào?

Edit2:
Added một câu trả lời cho thấy làm thế nào tôi thực sự đã làm sự di cư ...

+3

Tôi lấy nó là bạn mệt mỏi vì phải xem/hiểu những thứ như "bản sửa đổi 1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.3.1.1.1" mỗi khi ai đó kết hợp một gói thay đổi? Chúc bạn may mắn thoát khỏi MKS. – Roboprog

+3

Nó còn hơn thế nữa. Nếu bất cứ ai nghĩ rằng SCM của họ là chậm họ đã không cố gắng MKS. Tôi thực sự thích các yêu cầu/tích hợp theo dõi lỗi, nhưng nguồn gốc không tốt ... – EricSchaefer

+0

Chỉ cần hoàn thành câu trả lời của tôi với quy trình nhập được đề xuất, để trả lời nhận xét của bạn. – VonC

Trả lời

7

Vấn đề với MKS Integrity là kho lưu trữ duy nhất của họ, trong đó tất cả mọi thứ cư trú:

  • yêu cầu ,
  • kế hoạch kiểm tra,
  • trường hợp kiểm tra,
  • tính năng,
  • nhiệm vụ phát triển,
  • triển khai yêu cầu

Vì các dữ liệu có thể phát triển một cách độc lập với người khác ra, theo tốc độ của riêng mình, nhập khẩu tất cả trong một kho Git sẽ là một ý tưởng tồi: bạn chỉ có thể sao chép tất cả nội dung của repo Git (ngay cả khi bạn có thể giới hạn độ sâu của bản sao đó).
Điều đó có nghĩa là bạn sẽ nhận được tất cả tài liệu, ngay cả khi bạn chỉ quan tâm đến mã.
Xuất Mrity Integrity sẽ ngụ ý xác định nhiều kho lưu trữ Git đầu tiên hoạt động như submodules.


Tôi chỉ cần cây nguồn và lịch sử của nó.

Như thường lệ, tôi sẽ khuyên bạn nên chỉ nhập khẩu:

  • nhãn chính (đối với bất cứ điều gì lớn hơn một năm, hoặc bất cứ khoảng thời gian bạn cảm thấy thoải mái, bạn sẽ không cần kiểm tra đầy đủ bởi vì nó là quá cũ)
  • tất cả các nhãn (chính và trẻ vị thành niên) trong những năm qua.

Và tôi sẽ không nhập khẩu tất cả trong kho một Git trừ khi bạn tự tin rằng tất cả các nguồn của bạn đại diện một hệ thống phát triển như một tất cả (và không phải một số "modules" phát triển một cách độc lập)

Cách đơn giản hơn là chỉ cần thanh toán CP và thêm/cam kết git.

Đó sẽ là cách để tiếp tục.

Nhưng sau đó bạn sẽ mất dấu các hoạt động thêm, xóa, di chuyển và đổi tên.

Không! Bạn sẽ không! Git sẽ infer those operations.
Đó là lợi thế của việc là tệp Content VCS.

+0

Tôi sẽ chỉ cần cây nguồn và lịch sử của nó. Tôi không quan tâm đến các vấn đề/mục/công việc dòng công việc. Có lẽ tôi sẽ mở rộng câu hỏi ... – EricSchaefer

+1

Tôi quên mất rằng git sẽ nhận ra tên gọi vv. Mô hình tinh thần của tôi về điều này vẫn còn quá nhiều ảnh hưởng bởi cvs, svn và mks. Cảm ơn, tôi sẽ thử nó ngay bây giờ. Có khoảng 3 năm lịch sử và tôi nghĩ rằng tôi sẽ nhận được tất cả các điểm kiểm tra trên thân cây (60 hoặc 70) và chỉ mới nhất của các chi nhánh vì chúng thực sự ngắn. Có lẽ tôi thậm chí có thể tự động hóa nó một chút với các công cụ dòng lệnh si. – EricSchaefer

+0

Chỉ cần nhập 62 điểm kiểm tra từ mks vào git với một chương trình nhỏ nhanh chóng và bẩn. Đó là một chút khó khăn để trích xuất thời gian cam kết, các nhãn checkpoint và các ý kiến, nhưng nó đã được giá trị nó. Ngày mai tôi sẽ thử một dự án khác với một số nhánh lớn hơn. Cảm ơn ... – EricSchaefer

9

Tôi không thể đăng chương trình thực tế tôi đã viết, bởi vì tôi đã không làm điều đó vào thời gian của riêng tôi. Tuy nhiên, tôi có thể đăng bài như thế nào tôi đã làm nó. Nó sẽ dễ dàng làm lại nó với bất kỳ ngôn ngữ kịch bản. Công cụ tôi đã viết chỉ di chuyển một nhánh tại một thời điểm. Tôi sẽ nói với chi nhánh nào tôi muốn (ví dụ 1.21.1) và bản sửa đổi bắt đầu và kết thúc trong chi nhánh (ví dụ 4 và 78 sẽ di chuyển tất cả các sửa đổi bắt đầu từ 1.21.1.4 đến 1.21.1.78). Để có tất cả các chi nhánh trong một repo, tôi sẽ cung cấp thư mục .git để sử dụng để nhập vào.

  • bắt đầu vòng lặp từ khi bắt đầu sửa đổi để kết thúc sửa đổi
    • CURRENTREV = BRANCH.loopcounter
    • tạo thư mục repo
    • di chuyển các .git dir vào thư mục repo
    • di chuyển các tập tin .gitignore vào thư mục repo
    • chuyển vào thư mục repo
    • tạo mks sandbox bên trong thư mục repo ia "si createdandbox -P MKS_PROJECT_PATH --yes --projectRevision = CURRENTREV
    • tìm nạp mô tả sửa đổi qua" si viewprojecthistory --rfilter = range: CURRENTREV-CURRENTREV ", kết xuất chụp!
    • trích xuất người dùng, ngày, nhãn, nhận xét từ lần xuất trước đó
    • "git add."
    • ống thông tin chiết xuất từ ​​trên vào "git commit -qF -" (không thể làm -m nếu bạn muốn nhiều dòng như những nhận xét trạm kiểm soát)
    • thả sandbox qua "si dropsandbox --yes index.pj"
    • di chuyển .git và.gitignore đến một nơi lưu (đối với phiên bản kế tiếp)
    • xóa tất cả các file còn lại trong thư mục sandbox
    • di chuyển để dir mẹ (..)
    • xóa sandbox/repo dir
  • tạo thức git dir
  • di chuyển .git và .gitignore vào git thức dir
  • "git reset --hard ĐẦU"

Đỗ ne.

MKS sử dụng một số loại mã hóa ASCII cho chuỗi và git thường sử dụng UTF-8 để xem ra vấn đề khi nhập dữ liệu meta vào git (tên người dùng, nhận xét, thẻ, v.v.).

Đối với chi nhánh hơn làm điều này:

  • trong thanh toán thư mục git sửa đổi nơi chi nhánh nên bắt đầu và tạo ra một chi nhánh ("git checkout -b NEWBRANCHNAME")
  • bây giờ di chuyển .git và. gitignore để cứu địa điểm và xóa toàn bộ thư mục
  • bây giờ làm điều tương tự như trên

hơn Một điều: "si" là công cụ dòng lệnh MKS. Vì vậy, bạn cần phải xác định đường dẫn đầy đủ của nó hoặc đặt đường dẫn của nó vào đường dẫn tìm kiếm.

3

này làm việc cho trạm kiểm soát ...

https://gist.github.com/2369049

Thật không may, các điểm kiểm tra là dường như điều duy nhất mà thực sự làm cho bất kỳ ý nghĩa từ MKS -> GIT, như một trạm kiểm soát thực sự là điều gần nhất với " ảnh chụp nhanh "mà GIT gọi là cam kết.

MKS có rất nhiều khái niệm không tương thích (theo dõi phiên bản tệp, các chi nhánh không có gì giống như nhánh GIT, điểm kiểm tra, v.v.), tất cả đều có thể phát triển độc lập với nhau, thật khó để biết cách di chuyển lịch sử hợp lý GIT. Có lẽ có nhiều cách để làm điều đó và không ai trong số họ "chính xác" hơn tiếp theo.

Điều đó nói rằng, tôi rất muốn nghe một số ý tưởng hay. :)

Tôi rất muốn xem giải pháp ghi lại phiên bản từng tệp theo cách hợp lý. Trong một số cuộc thảo luận, chúng tôi đã đưa ra ý tưởng cố gắng xếp hàng các phiên bản MKS cho mỗi tệp theo thời gian cam kết hoặc một cái gì đó. Bằng cách đó, chúng ta có thể xây dựng khái niệm "repo" phát triển thông qua một cam kết chứa các thay đổi trong nhiều tệp.

6

FWIW, si diff sadly hiện không hỗ trợ khác biệt thống nhất. Có một yêu cầu thay đổi để làm điều đó, nhưng chưa có quá nhiều khách hàng yêu cầu tính năng đó.

KHUYẾN CÁO: Tôi làm việc cho PTC (người đã mua MKS).

+2

Chúng tôi yêu cầu các tính năng như vậy ở đâu? – RedX

0

Tôi sử dụng công cụ này để nhập các gói thay đổi từ MKS vào Mercurial, nhập nó vào git nên khá giống nhau; hoặc bạn có thể nhập vào Mercurial trước và sử dụng công cụ git để nhập Mercurial tiếp theo.

https://github.com/arsane/py-mks2hg.git

Nó sẽ cố gắng tìm hiểu tất cả các gói thay đổi đó theo dự án chỉ định, và cam kết kho Mercurial mới theo thứ tự.

Các vấn đề liên quan