2008-09-10 41 views
96

Đôi khi tôi sử dụng tính năng 'Hòa hợp công việc ngoại tuyến ...' được tìm thấy trong IDE P4V của Perforce để đồng bộ hóa bất kỳ tệp nào mà tôi đã làm việc trong khi 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 'Folder Diff'.Bạn có thể "bỏ qua" một tệp trong Perforce không?

Tôi có các tệp mà tôi không bao giờ muốn kiểm tra để kiểm soát nguồn (như các thư mục đượ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ông xuất hiện dưới dạng "mới "có thể được thêm vào. Họ có xu hướng lộn xộn lên danh sách các tập tin 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?

+0

Bạn có thể cung cấp ví dụ về đầu ra CVS để chúng tôi có thể xem ý bạn là gì và tại sao các câu trả lời được đưa ra không làm những gì bạn muốn? –

+1

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

+0

Nhấn "Reconcile Offline Work", untick "Local file not in depot", đẩy "Hòa hợp". Miễn là bạn không thêm tệp thì đó có thể là giải pháp nhanh nhất. – lane

Trả lời

58

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


Giả sử bạn có một khách hàng tên là "KHÁCH HÀNG", một thư mục có tên là "foo" (nằm tại gốc của dự án của bạn), và bạn muốn bỏ qua tất cả các file .dll trong đó cây thư mục, bạn có thể thêm như sau các đường đến chế độ xem vùng làm việc của bạn để thực hiện việc này:

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

Dòng đầu tiên sẽ xóa chúng khỏi thư mục "foo" và dòng thứ hai sẽ xóa chúng khỏi tất cả các thư mục phụ. Bây giờ, khi bạn 'Reconcile Offline Work ...', tất cả các tệp .dll sẽ được chuyển vào các thư mục "Excluded Files" ở dưới cùng của màn hình hiển thị thư mục khác. Họ sẽ vượt ra khỏi con đường của bạn, nhưng vẫn có thể xem và thao tác chúng 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ẽ làm giảm thư mục "Tệp đã loại trừ" của bạn thành chỉ một, nhưng bạn sẽ không thể thao tác bất kỳ tệp nào chứa trong đó vì đường dẫn sẽ bị hỏng (nhưng nếu bạn chỉ muốn họ ra khỏi con đường của bạn, nó không quan trọng).

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

Trong khi công trình này, nó không phải là rất hữu ích vì bạn sẽ phải đặt những dòng này vào mọi không gian làm việc mà bạn từng tạo ra. – dgrant

+6

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

+6

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

3

Đề nghị sử dụng .p4ignore chỉ có vẻ hoạt động với plugin WebSphere Studio (P4WSAD). Tôi chỉ thử nó trên hộp cửa sổ địa phương của tôi và bất kỳ tập tin và thư mục mà tôi liệt kê là không bỏ qua.

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

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

+15

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

+9

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

-1

Nếu bạn đang sử dụng Eclipse Perforce plugin, sau đó the plugin documentation liệt kê một số cách để bỏ qua tệp.

+4

trùng lặp và không trả lời câu hỏi –

7

Nếu bạn muốn một giải pháp áp dụng cho tất cả không gian làm việc mà không cần sao chép, bạn (hoặc sysadmin) có thể từ chối gửi các loại tệp đó bằng cách sử dụng các dòng như dưới đây 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 tại đây. Hãy xem Perforce's Sysadmin guide và dùng thử

+3

Rất tiếc, điều này gây ra lỗi khi gửi thay vì bỏ qua chế độ xem hòa giải. Vì vậy, nó có thể giữ một số tập tin ra khỏi một kho lưu trữ, nhưng nó không thể giúp người dùng của bạn không thấy tiếng ồn. –

2

TRẢ LỜI TRẢ LỜI - không còn chính xác nữa.Vào thời điểm này, điều này đã được viết ban đầu nó là sự thật;

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 quy tắc bỏ qua; mô hình tập tin glob hoặc regexp chung bỏ qua trong perforce.

Các câu trả lời khác có cấu hình máy chủ chung chung là toàn cầu (chứ không phải trên mỗi thư mục). Các câu trả lời khác cho thấy 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 bạn trên mỗi thư mục lần số tiện ích bạn muốn bỏ qua trong thư mục đó hoặc cung cấp khả năng này trong các plugin WebSphere Studio hoặc cung cấp khả năng quản trị viên máy chủ nhưng không có sẵn cho người dùng.

Tóm lại, tôi thấy Lực lượng thực sự yếu trong lĩnh vực này. Trong khi tôi đánh giá cao những người sử dụng Plugin Eclipse có thể sử dụng .p4ignore và tôi nghĩ điều đó thật tuyệt vời, nó khiến những người trong chúng ta không, trong bóng tối.

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.

0

tôi đã tìm thấy nó dễ dàng nhất để dung hòa công việc ẩn sử dụng một kịch bản BASH như thế này:

#!/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 thích nghi này từ this Perforce Knowledge Base article.

0

Tôi cũng đang tìm một giải pháp giống như .p4ignore (và không phải một giải pháp được gắn với một IDE cụ thể). Cho đến nay, điều gần nhất tôi đã tìm thấy là p4delta. Có vẻ như nó sẽ làm chính xác những gì mà poster ban đầu được yêu cầu, mặc dù thông qua một lớp khác của indirection.

http://p4delta.sourceforge.net

Thật không may, trong khi điều này dường như để tạo ra danh sách đúng đắn của các tập tin, tôi không thể nhận được "p4delta --execute" để làm việc ("Không thể sửa đổi một chuỗi đông lạnh") và dự án chưa được cập nhật trong năm. Có lẽ những người khác sẽ có may mắn hơn.

21

này hoạt động như các Perforce 2013,1, cơ chế P4IGNORE mới lần đầu tiên được bổ sung trong phiên bản, 2012,1, được mô tả trên blog chẳng đả ở đây:

http://www.perforce.com/blog/120130/new-20121-p4ignore

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

Vì vậy, bạn có thể xem nó để xem bạn thích nó như thế nào.

+0

Bây giờ nó được phát hành, xem xét của tôi dưới đây http://stackoverflow.com/a/13126496/284795 –

+0

Chỉnh sửa: Rõ ràng nó bắt đầu làm việc trong 2013.1 –

+1

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

6

Perforce Luồng làm cho việc bỏ qua tệp dễ dàng hơn nhiều, kể từ phiên bản 2011.1. Theo số documentation,, bạn có thể bỏ qua một số tiện ích nhất định hoặc các đườ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. 

này về cơ bản những gì @ quạ của trả lời quy định cụ thể, nhưng được thực hiện dễ dàng hơn với những con suối, vì nó tự động truyền để mọi việc không gian sử dụng dò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 ghi chú khác, khả năng xác định bỏ qua tác phẩm cho mỗi không gian làm việc là đến sớm, và trên thực tế là trong P4 2012.1 beta.

+0

Có, điều này làm việc cho tôi để chia sẻ "bỏ qua" cài đặt trên một nhóm (Tôi đang sử dụng p4 2013.2). Lưu ý rằng nó chỉ hoạt động trong kho lưu trữ có hỗ trợ luồng. (Nếu bạn có thể truyền biến P4IGNORE = .p4ignore biến môi trường trong nhóm của bạn 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 là giới hạn và không có cách nào để bỏ qua toàn bộ thư mục và sau đó "hủy bỏ" các tệp hoặc thư mục con cụ thể. (Kể từ phiên bản máy chủ p4 2013.2) – yoyo

43

Vâng, Nhưng.

Phiên bản Perforce 2012.1 đã thêm một tính năng được gọi là p4ignore, được lấy cảm hứng từ Git. Tuy nhiên, các nhà phát triển Perforce đã thay đổi hành vi, mà không biện minh, điều đó xảy ra để làm cho tính năng này ít hữu ích hơn nhiều.

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

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

Tính năng bỏ qua của Git thật tuyệt vì nó hoạt động trong hộp. Nếu các tệp .gitignore được thêm vào kho lưu trữ (everyone does this), chúng sẽ làm việc cho tất cả mọi người. Không ai vô tình xuất bản khóa riêng của họ.

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


Lực lượng vẫn có thể làm tốt trên tính năng này. Chọn quy ước cho tên tệp, giả sử p4ignore.txt, do đó tính năng này sẽ hoạt động trong hộp. Thả biến môi trường P4IGNORE, 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ọ, as Git does.

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 bạn đã làm rõ. Tôi đã thử bằng cách sử dụng .p4ignore với P4VS nhưng giải pháp của tôi mà được cho là bị bỏ qua đã không được bỏ qua. Đầu tiên tôi nghĩ tôi đã làm điều gì sai. Bây giờ tôi biết rõ hơn. –

+1

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

+2

Thảo luận 'Làm cho tính năng bỏ qua hoạt động trong hộp' tại http://www.p4ideax.com/ideas/17856/make-the-ignore-feature-work-out-the-box –

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