Bạn có thể "bỏ qua" một tệp trong Perforce không?


101

Đôi khi tôi sử dụng tính năng 'Hòa giải công việc ngoại tuyến ...' được tìm thấy trong P4V IDE của Perforce để đồng bộ hóa bất kỳ tệp nào mà tôi đang làm việc khi bị ngắt kết nối khỏi kho P4. Nó khởi chạy một cửa sổ khác thực hiện một 'Folder Diff'.

Tôi có các tệp mà tôi không bao giờ muốn đăng ký để kiểm soát nguồn (như những tệp được tìm thấy trong thư mục bin chẳng hạn như DLL, đầu ra được tạo mã, v.v.) Có cách nào để lọc các tệp / thư mục đó khỏi xuất hiện dưới dạng "mới" có thể không thêm. Chúng có xu hướng làm lộn xộn danh sách các tệp mà tôi thực sự quan tâm. Liệu P4 có tương đương với tính năng 'bỏ qua tệp' của Subversion không?


Bạn có thể cung cấp một ví dụ về kết quả CVS để chúng tôi có thể hiểu ý bạn muốn nói không và tại sao các câu trả lời được đưa ra không làm theo ý bạn?
Greg Whitfield 19-08

2
Tại diễn đàn ý tưởng của Perforce, bạn có thể bỏ phiếu cho một đề xuất cho danh sách bỏ qua kiểu Git p4ideax.com/ideas/15/ignore-support
Colonel Panic

Nhấn "Điều chỉnh công việc ngoại tuyến", bỏ chọn "Tệp cục bộ không có trong kho", nhấn "Điều chỉnh". Miễn là bạn không thêm tệp thì đó có lẽ là cách giải quyết nhanh nhất.
làn

Câu trả lời:


59

Kể từ phiên bản 2012.1, Perforce hỗ trợ P4IGNOREbiến môi trường. Tôi đã cập nhật câu trả lời của mình cho câu hỏi này về việc bỏ qua các thư mục với giải thích về cách hoạt động của nó. Sau đó, tôi nhận thấy câu trả lời này, mà bây giờ tôi đoán là thừa.


Giả sử bạn có một ứng dụng khách tên là "CLIENT", một thư mục có tên "foo" (nằm ở gốc dự án của bạn) và bạn muốn bỏ qua tất cả các tệp .dll trong cây thư mục đó, bạn có thể thêm các dòng sau vào dạng xem không gian làm việc của mình để hoàn thành điều này:

- // depot / foo / *. dll //CLIENT/foo/*.dll
- // depot / foo /.../*. dll //CLIENT/foo/.../*.dll

Dòng đầu tiên xóa chúng khỏi thư mục "foo" và dòng thứ hai xóa chúng khỏi tất cả các thư mục con. Bây giờ, khi bạn 'Hòa hợp Công việc Ngoại tuyến ...', tất cả các tệp .dll sẽ được chuyển vào các thư mục "Tệp Loại trừ" ở cuối thư mục hiển thị khác. Họ sẽ không theo dõi bạn, nhưng vẫn có thể xem và thao túng họ nếu bạn thực sự cần.

Bạn cũng có thể thực hiện theo cách khác, điều này sẽ giảm thư mục "Tệp bị Loại trừ" của bạn xuống chỉ còn một, nhưng bạn sẽ không thể thao tác bất kỳ tệp nào trong đó vì đường dẫn sẽ bị hỏng (nhưng nếu bạn chỉ muốn xóa chúng theo cách của bạn, nó không quan trọng).

- // depot / foo ... / *. dll //CLIENT/foo.../*.dll

30
Mặc dù điều này hoạt động nhưng nó không hữu ích lắm vì bạn sẽ phải đưa những dòng này vào mọi không gian làm việc mà bạn từng tạo.
dgrant

6
Lưu ý: điều này không hoạt động đối với công việc ngoại tuyến điều hòa bình thường từ p4v. "Các tệp bị loại trừ" dường như chỉ nằm trong cửa sổ điều chỉnh "nâng cao" ...
Catskul

6
Bộ lọc loại trừ không hoạt động bên trong Reconcile Offline Workhộp thoại. Nó hoạt động nếu bạn mở nó bên trong Advanced Reconcile...nhưng điều này là vô ích vì trong 99,9% thời gian bạn không cần hoặc không muốn sử dụng hộp thoại nâng cao.
sorin

12
@raven: 1) (Ví dụ:) Một số dự án sử dụng thư mục bin / obj trong mỗi dự án thay vì đặt chúng ở vị trí trung tâm. (Kết luận tổng quát :) Giả định của Perforce rằng tất cả các tệp trung gian được đặt ở một vị trí không gian làm việc dễ bị loại trừ là một thiết kế hạn chế không cần thiết đối với VCS. 2) Một số dự án liên quan đến bộ nhớ cache cục bộ và / hoặc các tệp khác do mỗi người dùng tạo trong cấu trúc thư mục (ví dụ: bộ nhớ cache * .ncb IntelliSense). Việc không thể loại trừ chúng như một chính sách thông thường làm suy yếu nghiêm trọng các tính năng của Thư mục Khác biệt và Công việc Ngoại tuyến đối chiếu.
Sam Harwell

6
Vấn đề đặc biệt này đang giết chết tôi.
Warren P

47

Đúng nhưng.

Perforce phiên bản 2012.1 đã thêm một tính năng được gọi là p4ignore , lấy cảm hứng từ Git. Tuy nhiên, các nhà phát triển Perforce đã thực hiện một thay đổi đối với hành vi, mà không cần biện minh, điều đó sẽ làm cho tính năng này trở nên ít hữu ích hơn rất nhiều.

Trong khi Git lấy các quy tắc từ tất cả .gitignorecác tệp, Perforce không biết phải tìm ở đâu cho đến khi bạn chỉ định tên tệp trong một biến môi trường P4IGNORE. Tự do này là một lời nguyền. Bạn không thể hack vào hai kho lưu trữ sử dụng các tên khác nhau cho các tệp bỏ qua của chúng.

Ngoài ra, tính năng bỏ qua của Perforce không hoạt động tốt. Bạn có thể thiết lập nó đủ dễ dàng cho chính mình, nhưng những người khác không được lợi trừ khi họ chọn tham gia một cách rõ ràng. Người đóng góp có thể vô tình bintạo ra các tệp không mong muốn (ví dụ: một thư mục được tạo bởi một kịch bản xây dựng).

Tính năng bỏ qua của Git rất tuyệt vời vì nó hoạt động hiệu quả. Nếu các .gitignoretệp được thêm vào kho lưu trữ ( mọi người đều làm điều này ), chúng sẽ hoạt động tốt cho mọi người. Không ai vô tình công bố khóa riêng tư của họ.

Thật thú vị, tài liệu Perforce hiển thị '.p4ignore' làm ví dụ về quy tắc bỏ qua, quy tắc này ngược lại! Nếu các quy tắc hữu ích, chúng nên được chia sẻ như một phần của kho lưu trữ.


Perforce vẫn có thể làm tốt tính năng này. Ví dụ: chọn một quy ước cho tên tệp p4ignore.txtđể tính năng hoạt động hiệu quả. Bỏ P4IGNOREbiến môi trường, nó phản tác dụng. Chỉnh sửa tài liệu để khuyến khích các nhà phát triển chia sẻ các quy tắc hữu ích. Cho phép người dùng viết các quy tắc cá nhân trong một tệp trong thư mục chính của họ, giống như Git .

Nếu bạn biết bất kỳ ai tại Perforce, vui lòng gửi email cho họ bài đăng này.


2
Cảm ơn đã làm rõ. Tôi đã thử sử dụng .p4ignore với P4VS nhưng giải pháp được cho là bị bỏ qua của tôi đã không bị bỏ qua. Đầu tiên tôi nghĩ mình đã làm sai. Bây giờ tôi biết rõ hơn.
Michael S.

1
@gentlesea, kể từ Perforce 2013.1, tính năng bỏ qua cuối cùng cũng hoạt động trong ứng dụng đồ họa.
Colonel Panic

2
Thảo luận 'Làm cho tính năng bỏ qua hoạt động tốt' tại p4ideax.com/ideas/17856/…
Colonel Panic

1
Đối với các biến cấu hình khác nhau dựa trên không gian làm việc bạn đang sử dụng, hãy thử sử dụng tệp P4CONFIG. Sau đó, bạn có thể có tệp P4CONFIG của mình chỉ định một giá trị P4IGNORE khác khi bạn di chuyển từ không gian làm việc sang không gian làm việc.
Bryan Pendleton

2
Perforce không biết cách xây dựng phần mềm phù hợp, thậm chí họ còn không nắm được những điều cơ bản. Đó là lý do tại sao tất cả những ai mắc kẹt với lực lượng ảo đều mơ về việc chuyển sang git.
Pavel P

22

Điều này hoạt động kể từ Perforce 2013.1, cơ chế P4IGNORE mới lần đầu tiên được thêm vào trong bản phát hành 2012.1, được mô tả trên blog Perforce tại đây:

https://www.perforce.com/blog/new-20121-p4ignore

Như nó hiện được mô tả, bạn đặt biến môi trường "P4IGNORE" thành tên tệp chứa danh sách các tệp cần bỏ qua.

Vì vậy, bạn có thể kiểm tra nó để xem làm thế nào bạn thích nó.


1
Bạn cũng có thể bao gồm tên thư mục, không chỉ tên tệp.
ashes999,

Như đã đề cập trước đây: thật không may, bạn PHẢI đặt P4IGNORE.
Technophile

1
Tôi đã sửa liên kết @DerMike - Tôi đoán Perforce đã thay đổi URL blog của họ.
svec

7

Nếu bạn muốn một giải pháp áp dụng cho tất cả các vùng làm việc mà không cần sao chép xung quanh, bạn (hoặc sysadmin của bạn) có thể từ chối gửi các loại tệp đó thông qua sử dụng các dòng như bên dưới trong bảng bảo vệ p4:

write user * * -//.../*.suo
write user * * -//.../*.obj
write user * * -//.../*.ccscc

Tôi nhớ đã làm điều này trước đây, nhưng tôi không có quyền cần thiết để kiểm tra điều này ở đây. Xem hướng dẫn Sysadmin của Perforce và dùng thử


3
Thật không may, điều này gây ra lỗi khi gửi thay vì bỏ qua chế độ xem điều hòa. Vì vậy, nó có thể giữ một số tệp nhất định ra khỏi kho lưu trữ, nhưng nó không thể giúp người dùng của bạn không thấy nhiễu.
Warren P

6

Perforce Streams làm cho việc bỏ qua các tệp dễ dàng hơn nhiều, kể từ phiên bản 2011.1. Theo tài liệu, bạn có thể bỏ qua một số tiện ích mở rộng hoặc một số đường dẫn nhất định trong thư mục của mình.

Từ p4 help stream

Ignored: Optional; a list of file or directory names to be ignored in
                 client views. For example:

                     /tmp      # ignores files named 'tmp'
                     /tmp/...  # ignores dirs named 'tmp'
                     .tmp      # ignores file names ending in '.tmp'

                 Lines in the Ignored field may appear in any order.  Ignored
                 names are inherited by child stream client views.

Điều này về cơ bản thực hiện những gì câu trả lời của @ raven chỉ định, nhưng được thực hiện dễ dàng hơn với các luồng, vì nó tự động truyền đến mọi không gian làm việc bằng cách sử dụng luồng đó. Nó cũng áp dụng cho bất kỳ luồng nào kế thừa từ luồng mà bạn chỉ định các loại bỏ qua.

Bạn có thể chỉnh sửa luồng qua p4 stream //stream_depot/stream_name hoặc nhấp chuột phải vào luồng trong chế độ xem luồng của p4v.

Và như @svec đã lưu ý, khả năng chỉ định tệp bỏ qua cho mỗi không gian làm việc sắp ra mắt và trên thực tế là trong phiên bản beta P4 2012.1.


Có, điều này hoạt động để tôi chia sẻ cài đặt "bỏ qua" trong một nhóm (tôi đang sử dụng p4 2013.2). Lưu ý rằng nó chỉ hoạt động trong kho hỗ trợ luồng. (Nếu bạn có thể truyền bá P4IGNORE = .p4ignore biến môi trường trên nhóm của bạn mà có thể là giải pháp tốt nhất.)
yoyo

1
Lưu ý rằng trường Đã bỏ qua cho luồng có thể được sử dụng để bỏ qua một thư mục, tệp hoặc phần mở rộng tệp cụ thể, nhưng hỗ trợ ký tự đại diện bị hạn chế và không có cách nào để bỏ qua toàn bộ thư mục và sau đó "hủy bỏ qua" các tệp hoặc thư mục con cụ thể. (Tính đến p4 máy chủ phiên bản 2013,2)
yoyo

3

Đề xuất .p4ignorechỉ sử dụng của Will dường như hoạt động với plugin WebSphere Studio (P4WSAD). Tôi vừa thử nó trên hộp cửa sổ cục bộ của mình và mọi tệp và thư mục mà tôi liệt kê đều không bị bỏ qua.

Đề xuất của Raven về việc sửa đổi thông số kỹ thuật khách hàng của bạn là cách chính xác theo Perforce. Việc tổ chức đúng mã / dữ liệu / tệp thực thi của bạn và các tệp đầu ra đã tạo sẽ giúp quá trình loại trừ tệp khỏi bị kiểm tra dễ dàng hơn nhiều.

Là một cách tiếp cận hà khắc hơn, bạn luôn có thể viết trình kích hoạt gửi sẽ từ chối gửi danh sách thay đổi nếu chúng chứa một tệp nhất định hoặc các tệp có phần mở rộng nhất định, v.v.


15
Tôi hoàn toàn không đồng ý với toàn bộ tuyên bố "Tổ chức thích hợp mã của bạn ...". Thực tế của vấn đề là, tuân theo quy ước chỉnh sửa không gian làm việc của Perforce yêu cầu mọi người dùng phải thực hiện thay đổi. Trong khi đó, tệp .p4ignore đúng sẽ chỉ được tạo / quản lý một lần.
Mike

9
Ồ, và chưa kể, bạn muốn phân nhánh mã của mình? Chúc may mắn duy trì không gian làm việc của bạn cho từng chi nhánh. Nghe có vẻ như thú vị!
Mike

2

CÂU TRẢ LỜI LỊCH SỬ - không còn đúng nữa. Vào thời điểm ban đầu điều này được viết ra là đúng;

Bạn không thể viết và kiểm tra tệp mà máy chủ sẽ sử dụng để thực hiện các quy tắc bỏ qua; bỏ qua mẫu tệp global hoặc regexp trong perforce.

Các câu trả lời khác có cấu hình máy chủ toàn cầu là chung (và không phải trên mỗi thư mục). Các câu trả lời khác hiển thị những thứ có thể phù hợp với bạn, nếu bạn muốn một dòng trong chế độ xem của mình trên mỗi thư mục nhân với số phần mở rộng bạn muốn bỏ qua trong thư mục đơn lẻ đó hoặc cung cấp khả năng này chỉ trong các plugin WebSphere Studio hoặc cung cấp khả năng cho máy chủ quản trị viên, nhưng không có sẵn cho người dùng.

Tóm lại, tôi thấy Perforce thực sự yếu trong lĩnh vực này. Mặc dù tôi đánh giá cao rằng những người sử dụng Plugin Eclipse có thể sử dụng .p4ignorevà tôi nghĩ điều đó thật tuyệt vời, nhưng điều đó khiến những người trong chúng ta không sử dụng được, sẽ bị khuất phục.

CẬP NHẬT: Xem câu trả lời được chấp nhận cho khả năng P4IGNORE mới được thêm vào giữa năm 2012.


1

Tôi thấy dễ dàng nhất để điều chỉnh công việc ngoại tuyến bằng cách sử dụng tập lệnh BASH như sau:

#!/bin/bash
# reconcile P4 offline work, assuming P4CLIENT is set
if [ -z "$P4CLIENT" ] ; then echo "P4CLIENT is not set"; exit 1; fi
unset PWD # confuses P4 on Windows/CYGWIN

# delete filew that are no longer present
p4 diff -sd ... | p4 -x - delete

# checkout files that have been changed.  
# I don't run this step.  Instead I just checkout everything, 
# then revert unchanged files before committing.
p4 diff -se ... | pr -x - edit

# Add new files, ignoring subversion info, EMACS backups, log files
# Filter output to see only added files and real errors
find . -type f \
 | grep -v -E '(\.svn)|(/build.*/)|(/\.settings)|~|#|(\.log)' \
 | p4 -x - add \
 | grep -v -E '(currently opened for add)|(existing file)|(already opened for edit)'

Tôi đã điều chỉnh điều này từ bài viết Cơ sở kiến ​​thức Perforce này .


Đó là bảy năm trước, tôi không ngạc nhiên. Tôi ngạc nhiên khi có ai đó vẫn đang sử dụng Perforce.
kevin cline

... không phải do lựa chọn: '(
DerMike 19/10/18

0

Tôi cũng đang tìm kiếm một giải pháp .p4ignore like (và không phải một giải pháp gắn với một IDE cụ thể). Cho đến nay, thứ gần nhất mà tôi tìm thấy là p4delta. Có vẻ như nó sẽ làm chính xác những gì người đăng ban đầu yêu cầu, mặc dù thông qua một lớp hướng dẫn khác.

http://p4delta.sourceforge.net

Thật không may, mặc dù điều này dường như tạo ra danh sách tệp thích hợp, nhưng tôi không thể làm cho "p4delta --execute" hoạt động ("Không thể sửa đổi chuỗi bị cố định") và dự án đã không được cập nhật trong năm. Có lẽ những người khác sẽ gặp may mắn hơn.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.