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?
Với lịch sử của git, đó là một hướng vui nhộn khi di chuyển. –
Â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 đề? –
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