2013-04-23 23 views
7

Có cách nào tốt trong Perforce để di chuyển các thay đổi chưa được gửi đến luồng khác trước khi gửi chúng (tương đương git stash, git checkout otherbranch, git stash pop)?Perforce: di chuyển các thay đổi chưa được gửi đến một luồng khác

Tôi hiện có các tệp được kiểm tra cục bộ (không độc quyền) và được chỉnh sửa. Tôi đã cố gắng đặt chúng và sau đó cố gắng để unshelve chúng vào dòng mục tiêu, nhưng tôi nhận được "tập tin (s) không ở chế độ xem khách hàng". Khi tôi xem danh sách thay đổi (được bỏ qua hay không), tất cả các tệp đều có đường dẫn bao gồm luồng gốc.

Luồng mục tiêu của tôi là luồng mà tôi vừa tạo, đã bỏ qua luồng gốc. Tôi đang sử dụng P4V. Phiên bản của Perforce Visual Components tôi đã cài đặt là 123.57.9578, và khi tôi chạy p4 từ dòng lệnh, nó nói "Server 2012.2/551823". Tôi có thể thêm thông tin nếu cần.

Trả lời

1

Tôi tin rằng kỹ thuật xếp/unshelve yêu cầu máy chủ 2013.1 chứ không phải máy chủ 2012.2. Bạn nên xác nhận điều này với Perforce Technical Support.

+0

Cảm ơn câu trả lời. Thật không may có vẻ như tôi phải chờ đến tuần tới trước khi chúng tôi có thể xác nhận điều này, vì "Vua lực lượng" của chúng tôi hiện đang ở - đoán xem hội nghị Perforce là gì: P – entheh

+0

Kệ hoạt động trên các phiên bản cũ hơn của lực lượng. Tuy nhiên, bạn chỉ có thể unshelve đến cùng một đường dẫn, bao gồm root branch, vì vậy bạn không thể unshelve trong branch khác. –

5

Bạn có thể sử dụng lệnh p4 unshelve để sửa lại các tệp được gắn trong danh sách thay đổi sang luồng khác bằng tùy chọn -S. Ví dụ:

p4 unshelve -s <changlist#-with-shelved-files> -S //depot/streamname 

Bạn không chắc chắn điều này chỉ khả dụng ở một phiên bản nhất định hay cao hơn hay không. Tuy nhiên, chúng tôi không thể tìm ra cách để làm điều đó thông qua P4V.

1

Nếu bạn vì lý do nào đó thoải mái hơn khi sử dụng P4V so với dòng lệnh, giải pháp mà az2tonez đưa ra có thể được thực hiện bằng GUI, ít nhất là trong P4V 2014.2.

  1. Kệ thay đổi của bạn và đảm bảo bạn không có tệp nào khác được kiểm tra trong không gian làm việc.
  2. Trong tab 'Luồng', kéo biểu tượng không gian làm việc từ luồng hiện tại tới luồng bạn muốn di chuyển các thay đổi đến và nhận các thay đổi mới nhất.
  3. Bỏ mười hai tệp trong tab 'Đang chờ xử lý'. Trong các tùy chọn, chọn 'Ánh xạ các tệp chưa được phân loại' và chọn luồng bạn muốn di chuyển các thay đổi từ và nhấn 'Unshelve'.
  4. Giải quyết tệp bằng nguồn.
  5. Gửi thay đổi của bạn và voilá! Thay đổi của bạn bây giờ sẽ ở trong luồng khác.
3

Các câu trả lời khác ở đây là chính xác, nhưng họ không cảnh báo bạn rằng bạn không thể chỉ dừng lại từ bất kỳ luồng nào và bỏ sót bất kỳ luồng không liên quan nào. Đặc biệt, các poster ban đầu hỏi về thông báo lỗi "tập tin (s) không ở chế độ xem khách hàng" là thông báo lỗi mà P4V hiển thị khi bạn chưa chọn ánh xạ thích hợp. Đây là mẹo để tìm ánh xạ thích hợp: luồng unshelve của bạn phải có mối quan hệ cha/mẹ trực tiếp với luồng được xếp chồng và bạn phải chọn thông số luồng mô tả mối quan hệ đó trong "Ánh xạ các tệp chưa được vá bằng cách sử dụng luồng .. "một phần của hộp thoại. Điều này có nghĩa là có thể mất nhiều bước nhảy để lấy từ luồng được gắn ban đầu đến luồng mục tiêu.

Dưới đây là ví dụ cụ thể: Giả sử bạn có tệp được xếp vào Dev-1 mà bạn muốn di chuyển đến Dev-2. Hai luồng Dev này là cả hai con trực tiếp của Main.Bạn không thể hủy bỏ các tệp của Dev-1 trực tiếp thành Dev-2, trước tiên bạn phải bỏ mười hai và tạm thời đặt lại vào Main, vì thông số kỹ thuật của luồng Dev mô tả mối quan hệ của chúng theo số Main và không phải với nhau.

Vì vậy, bạn unshelve Dev-1 files 's vào Main với 'Bản đồ các file unshelved sử dụng dòng Dev-1' vì thông số này mô tả các mối quan hệ được đi qua. Sau đó, đặt các tệp vào Main và sau đó chuyển vùng làm việc của bạn thành Dev-2. Bây giờ, bạn có thể hủy bỏ phiên bản Main của các tệp được gắn với "Bản đồ các tệp chưa được vá bằng luồng Dev-2", vì thông số đó mô tả mối quan hệ trực tiếp từ Main đến Dev-2.

Với nhiều bước nhảy, bạn có thể truy cập bất kỳ luồng nào được kết nối khác trong mạng của mình. Điều này không dễ như git stashgit stash pop, nhưng hãy nhớ rằng Git giả định rằng tên tệp không thay đổi giữa các nhánh git, trong khi Perforce cho phép mỗi hop tùy ý thay đổi ánh xạ tệp và thư mục.

+1

Cảm ơn câu trả lời. Tôi thực sự không thể bình luận như tôi đã chuyển sang và không còn sử dụng Perforce nữa, nhưng chỉ muốn nói Git xử lý đổi tên và di chuyển các tệp rất tốt trong kinh nghiệm của tôi trong các trường hợp như thế này. Tất nhiên Perforce có điểm mạnh riêng của nó (một phần lượt xem cụ thể), nhưng điều này dường như không phải là một trong số chúng! – entheh