2010-10-15 41 views
16

Tôi có nhiệm vụ di chuyển nhóm của mình & nguồn từ git sang Perforce và tôi đang tìm ý tưởng về cách di chuyển lịch sử git thành p4.Di chuyển từ git sang Perforce

Tôi sẽ chỉ vui khi di chuyển nhánh chính. Tuy nhiên, ngay cả điều đó cũng chứng minh vấn đề.

Tôi đang sử dụng công cụ git-p4 tuyệt vời. Tôi tạo một vùng đích trong không gian làm việc p4 của tôi và sử dụng git p4 clone //depot/StuffFromGit để bắt đầu theo dõi nó trong git-p4. Tôi ghép tất cả các thay đổi của kho git vào bản sao git-p4. Sau đó tôi có thể git p4 submit và được thực hiện, tất cả các thay đổi được đẩy tới p4.

Nó hoạt động tuyệt vời khi lịch sử git trông như thế này, đẹp và tuyến tính:

A---B---C---D 

Vấn đề đi kèm với nhiều người làm việc trên dự án. Mặc dù họ đang làm việc trên chủ, mà vẫn tạo ra các chi nhánh tách và hợp nhất. Tuy nhiên, git-p4 đã mạnh dạn xử lý này:

A---B---C---E 
    \--D--/ 

git p4 đi qua OK, cam kết ABCDE theo thứ tự (hoặc lịch sử ABDCE, một trong hai người đầu tiên).

Sự cố xảy ra khi, ví dụ, C và D đều thay đổi cùng một tệp và E là một sự hợp nhất thành thật. git p4 rebase không thành công ở đây; nó sẽ tua lại các cam kết, nhưng trong khi phát lại nó sẽ áp dụng C đầu tiên, sau đó thử D và tìm một xung đột. Sau đó nó sẽ dừng lại, yêu cầu tôi hợp nhất. Vâng, E chứa sự hợp nhất nhưng nó yêu cầu tôi hợp nhất tay! 'git p4 submit' sẽ không thành công theo cách tương tự, chỉ bây giờ là p4 từ chối thay đổi trước khi hợp nhất.

 
Using index info to reconstruct a base tree... 
Falling back to patching base and 3-way merge... 
Auto-merging main.cpp 
CONFLICT (content): Merge conflict in main.cpp 
Failed to merge in the changes. 
Patch failed at 0005 Changing main 

Vì vậy, bây giờ tôi bị kẹt. Có cách nào để khử trùng lịch sử git hay để git-p4 hiểu nó không? Đó là bực bội vì sự hợp nhất đang có.

Suy nghĩ tôi đã có:

  • Sử dụng git filter-branch để loại bỏ tất cả đề cập đến các tập tin mâu thuẫn nhau. Tôi muốn nhận được các bình luận lịch sử, mặc dù thiếu nhiều thay đổi tập tin. Với khoảng 3000 cam kết trong lịch sử, tôi sẽ loại bỏ tất cả lịch sử của tệp (bận). Vào cuối quá trình nhập tệp đã lọc, tôi sẽ thêm lại các tệp bị thiếu bằng cách thực hiện cam kết cuối cùng của HEAD.
  • Dump lịch sử, thực hiện một cam kết p4 đơn lẻ của HEAD (đơn giản nhưng buồn).
  • Không chuyển sang p4: Tôi đã thực hiện ý tưởng đó càng lâu càng tốt.

Không ai trong số đó thực sự tuyệt vời. Bất kỳ ý tưởng nào về cách git 'gt p4 rebase' hoặc 'git p4 submit' để hoạt động?

+14

Với lịch sử của git, đó là một hướng vui nhộn khi di chuyển. –

+2

Âm thanh như git-p4 đang cố gắng hợp nhất C, D ** và ** E và dĩ nhiên là không thành công. Bạn đã kiểm tra rằng bạn đang chạy git-p4 mới nhất và nếu có một số bản vá lỗi hoặc những người khác đã nhìn thấy cùng một vấn đề? –

+16

Chà, anh bạn, tôi xin lỗi. Có vẻ như bạn đang di chuyển từ 10-15 năm về sau. – Jonathan

Trả lời

6

Tùy chọn "vứt bỏ lịch sử cũ" không tệ như âm thanh: bạn chỉ có thể giữ lại git repo bên cạnh nó mãi mãi, trong trường hợp ai đó cần đào qua những thứ cũ. Thật không may, không có cách nào để thể hiện quan điểm phức tạp của git về lịch sử trong các hệ thống tuyến tính kiểu cũ như svn và p4.

Lý do chính để nhìn lại lịch sử cũ là những thứ như 'git annotate' (tôi giả sử p4 có công cụ tương tự).Nếu đó là tất cả những gì bạn muốn, thì có lẽ những gì bạn thực sự muốn làm là squash tất cả các hợp nhất của bạn cam kết xuống chỉ một trong các bậc cha mẹ của họ (vì vậy họ trông giống như một cam kết duy nhất thay vì hợp nhất). Điều đó giống như những gì svn và p4 sẽ ghi lại trong mô hình lịch sử của riêng chúng, nơi mà các kết hợp trông giống như một cam kết đơn lẻ trong luồng tuyến tính. Bạn có thể làm điều này với git-filter-branch hoặc tương tự. Tất nhiên, điều này sẽ mất tất cả lịch sử đã xảy ra trên các chi nhánh ... nhưng người dùng p4 được sử dụng để không có thông tin đó.

+0

Perforce thường không sử dụng phụ -branches, nhưng nó có thể nếu bạn muốn quản lý các chi nhánh. Sau đó, thông tin là có. –

-2

Tôi nghĩ bạn nên thử với Tortoise SVN và sau đó Hg xem xét cập nhật chi nhánh đơn lẻ hoặc bạn có thể nói di chuyển. Hãy chắc chắn rằng bạn có tất cả các bản sao được nhân bản để được ở bên an toàn. Chúc may mắn!

2

Bạn đã xem công cụ "thợ may" chưa? Nó được xây dựng để đồng bộ hóa các VCS khác nhau: es. Nó được cho là có hỗ trợ Perforce.

Như một lưu ý phụ, phản ứng đầu tiên của tôi là nghiêm túc đặt câu hỏi về quyết định, nhưng tôi đoán bạn đã làm điều đó.

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