2009-12-11 24 views
13

Giả sử tôi đã tạo một nhánh trong lực lượng mã hóa của chúng tôi. Dưới đây là spec chi nhánh:Tích hợp các tệp được di chuyển theo lực lượng

//depot/code/main/... //depot/code/branch/... 

Sau đó, tại các chi nhánh, nói rằng tôi di chuyển file a.txt nhánh -> b.txt sử dụng

p4 integrate //depot/code/branch/a.txt //depot/code/branch/b.txt 
p4 delete //depot/code/branch/a.txt 

Bây giờ, giả sử một số thay đổi được thực hiện để a.txt trong chính mà tôi muốn tích hợp vào b.txt trong chi nhánh

Khi tôi cố gắng tích hợp bằng cách sử dụng thông số chi tiết ban đầu, nó không phản ánh các thay đổi được thực hiện đối với a.txt trong chính lên b .txt - có cách nào để có các thay đổi được thực hiện trong hiển thị chính trong tệp được đổi tên không?

Thông số chi nhánh khá lớn (hàng trăm thay đổi) và một vài tệp đã được đổi tên trong nhánh, vì vậy tôi muốn có cách tự động để thực hiện việc này. Hãy cho tôi biết nếu tôi có thể làm rõ bất cứ điều gì ở đây - nó sẽ giúp để có một bảng trắng;)

Cảm ơn! Sam

Trả lời

3

Perforce 2009.1 có các đổi tên thích hợp, điều này có thể giúp ích cho điều này - có thể và trong mọi trường hợp chỉ để đổi tên trong tương lai. Xem Perforce 2009.1 release notes, cụ thể:

#177023 * ** 
    The new 'p4 move' command allows for better support for 
    renaming files. A file must be already opened for 'edit' 
    or 'add' in order to be moved. Moved files can be synced, 
    resolved and diffed against the repository just like files 
    opened for 'edit'. See 'p4 help move' for more info. 

Bạn có thể thêm tên vào thông số chi nhánh. Sau đó, ít nhất tích hợp sẽ tự động - ngay cả khi thông số kỹ thuật chi nhánh sẽ còn dài hơn và phức tạp hơn.

+3

Theo tôi hiểu, lợi ích * duy nhất của di chuyển p4 là bạn có thể di chuyển và chỉnh sửa một tệp trong một danh sách thay đổi nguyên tử duy nhất và cho đến khi bạn kiểm tra trong đó danh sách thay đổi tiếp tục đồng bộ sẽ tuyên truyền thay đổi từ nguồn đến đích. * Sau khi * bạn đã kiểm tra nó, nó hoạt động giống như một nhánh, một chỉnh sửa và một hành động xóa trừ khi chúng không thể tách rời. Nó không giúp đỡ với việc tích hợp các bước chuyển từ nhánh này sang nhánh khác. Nó không được gọi là "đổi tên lớp đầu tiên" trong các hệ thống kiểm soát nguồn khác. – Weeble

+0

Tôi nghĩ bạn có thể đúng - có vẻ như vậy - mặc dù, với siêu dữ liệu được ghi lại trong cơ sở dữ liệu, Perforce có thể thêm xử lý thích hợp trong tương lai? Trước đây, không thể phân biệt chi nhánh với việc đổi tên. –

+0

Không, ngay cả với một 'p4 di chuyển' thích hợp, tích hợp sẽ không hoạt động như nó cần. –

1

Tôi không tin như vậy. Vì không có trực tiếp p4 rename, bạn phải tích hợp và xóa - khi bạn đã thực hiện điều đó, tích hợp từ một chi nhánh khác không còn đi đến tệp bên phải nữa. Ít nhất đó là kinh nghiệm của tôi.

+0

Cảm ơn - Đã cập nhật để hiển thị những lệnh nào đã được phát hành - thực tế tôi đã sử dụng p4v để thực hiện. – SamBeran

+0

Tôi tin rằng năm 2009.1 thêm tên đổi tên thích hợp - không giúp ích gì với lịch sử –

3

Cách duy nhất tôi biết để Perforce xử lý việc này cho bạn là sử dụng đặc tả chi nhánh để ánh xạ tệp cũ trong tệp gốc sang tệp mới trong nhánh. Có lẽ điều đó đã thay đổi với lệnh di chuyển mới trong các phiên bản Perforce gần đây, nhưng không phải là tôi đã trải nghiệm.

+0

Nhưng điều này có hiệu quả khi bạn đệ quy đổi tên và toàn bộ thư mục? Tôi có cần phải tạo một thông số chi nhánh cho tất cả các tệp từng cái một không? Dường như việc tạo một thông số chi nhánh trên thư mục không hoạt động. – Calmarius

+0

@Calmarius, nếu bạn đổi tên thư mục và tệp trong thư mục, bạn cần cả hai. Nếu chỉ có thư mục thay đổi, bạn có thể làm điều đó chỉ với thư mục. Nếu các tên thay đổi theo cách nhất quán, bạn có thể sử dụng các ký tự đại diện để đơn giản hóa thông số. –

2

Bạn có thể tạo tập lệnh tạo thông số chi tiết để xử lý các tệp đã di chuyển bằng đầu ra của p4 fstat.

Sử dụng sau đây như là một điểm khởi đầu:

ROOT_PATH="//depot/books/..." 
FIRST_CHANGE=91212 

p4 fstat -Os -T headChange -F "headAction=move/* headChange>$FIRST_CHANGE" $ROOT_PATH|grep headChange | sort -u|while read DUMMY1 DUMMY2 change; do p4 describe $change; done|grep "moved from"|sed 's/\.\.\./\t/g; s/\#[0-9]*//g; s/ moved from//g;' 

này sẽ tìm thấy tất cả các file trong // depot/sách/... đã được chuyển đổi trong 91.212 hay muộn

Đối với chúng tôi, các sản lượng này trông giống như

//depot/books/bar.txt //depot/books/foo.txt

Sử dụng nó cho việc tạo một spec chi nhánh.

10

Bạn có thể thêm công tắc '-3' để sử dụng công cụ mới để tích hợp, sẽ phát hiện các tệp đích đã được di chuyển trước đó bằng 'di chuyển p4' và tự động 'nhắm mục tiêu lại' để theo dõi các hoạt động di chuyển đó .

p4 integrate -3 //depot/code/main/... //depot/code/branch/... 

sẽ tích hợp các thay đổi của bạn trong //depot/code/main/a.txt vào //depot/code/branch/b.txt.

Đây là tính năng 'hoàn tác' trong bản phát hành 2010.2 hiện tại, nhưng sẽ là hành vi mặc định trong 2011.1 sắp tới.

+0

+1 Cũng được phát hiện! Điều đó làm các trick. –

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