Dapatkah Anda "mengabaikan" file di Perforce?

101

Saya terkadang menggunakan fitur 'Rekonsiliasi Pekerjaan Offline ...' yang ditemukan di P4V IDE Perforce untuk menyinkronkan semua file yang sedang saya kerjakan saat terputus dari depot P4. Ini meluncurkan jendela lain yang melakukan 'Folder Diff'.

Saya memiliki file yang tidak ingin saya periksa ke kontrol sumber (seperti yang ditemukan di folder bin seperti DLL, keluaran yang dihasilkan kode, dll.) Apakah ada cara untuk memfilter file / folder tersebut agar tidak muncul sebagai "baru" yang mungkin ditambahkan. Mereka cenderung mengacaukan daftar file yang sebenarnya saya minati. Apakah P4 setara dengan fitur 'abaikan file' Subversion?

sinar
sumber
Bisakah Anda memberikan contoh output CVS sehingga kami dapat melihat apa yang Anda maksud, dan mengapa jawaban yang diberikan tidak sesuai dengan keinginan Anda?
Greg Whitfield
2
Di forum ide Perforce, Anda dapat memberi suara pada saran untuk daftar pengabaian gaya Git p4ideax.com/ideas/15/ignore-support
Colonel Panic
Tekan "Rekonsiliasi Pekerjaan Offline", hapus centang "File lokal tidak ada di depot", tekan "Rekonsiliasi". Selama Anda tidak menambahkan file, maka itu mungkin solusi tercepat.
jalur

Jawaban:

59

Mulai versi 2012.1, Perforce mendukung P4IGNOREvariabel lingkungan. Saya memperbarui jawaban saya untuk pertanyaan ini tentang mengabaikan direktori dengan penjelasan tentang cara kerjanya. Kemudian saya memperhatikan jawaban ini, yang saya kira sekarang tidak berguna.


Dengan asumsi Anda memiliki klien bernama "CLIENT", direktori bernama "foo" (terletak di root proyek Anda), dan Anda ingin mengabaikan semua file .dll di pohon direktori itu, Anda dapat menambahkan baris berikut ke tampilan ruang kerja Anda untuk menyelesaikannya ini:

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

Baris pertama menghapusnya dari direktori "foo" dan baris kedua menghapusnya dari semua sub direktori. Sekarang, saat Anda 'Rekonsiliasi Pekerjaan Offline ...', semua file .dll akan dipindahkan ke folder "File yang Dikecualikan" di bagian bawah tampilan folder diff. Mereka akan menyimpang dari Anda, tetapi masih dapat melihat dan memanipulasinya jika Anda benar-benar perlu.

Anda juga dapat melakukannya dengan cara lain, yang akan mengurangi folder "File yang Dikecualikan" menjadi hanya satu, tetapi Anda tidak akan dapat memanipulasi file apa pun di dalamnya karena jalurnya akan rusak (tetapi jika Anda hanya menginginkannya cara Anda, tidak masalah).

- // depot / foo ... / *. dll //CLIENT/foo.../*.dll
gagak
sumber
30
Meskipun ini berfungsi, ini tidak terlalu berguna karena Anda harus meletakkan garis-garis ini di setiap ruang kerja yang pernah Anda buat.
dgrant
6
Catatan: ini tidak bekerja untuk pekerjaan offline rekonsiliasi normal dari p4v. "File yang dikecualikan" sepertinya hanya ada di jendela rekonsiliasi "lanjutan" ...
Catskul
6
Filter pengecualian tidak berfungsi di dalam Reconcile Offline Workdialog. Ini berfungsi jika Anda membukanya di dalam Advanced Reconcile...tetapi ini tidak berguna karena dalam 99,9% waktu Anda tidak perlu atau ingin menggunakan dialog lanjutan.
sorin
12
@raven: 1) (Contoh :) Beberapa proyek menggunakan folder bin / obj di bawah setiap proyek alih-alih menempatkannya di lokasi pusat. (Kesimpulan yang digeneralisasikan :) Asumsi Perforce bahwa semua file perantara ditempatkan di lokasi ruang kerja yang mudah dikecualikan adalah desain yang tidak perlu dibatasi untuk pembuatan VCS. 2) Beberapa proyek melibatkan cache lokal dan / atau file lain yang dibuat per pengguna dalam struktur direktori (sebagai contoh, cache * .ncb IntelliSense). Ketidakmampuan untuk mengecualikannya sebagai kebijakan umum sangat merusak fitur Rekonsiliasi Pekerjaan Offline dan Folder Diff.
Sam Harwell
6
Masalah khusus ini membunuh saya.
Warren P
47

Ya tapi.

Perforce versi 2012.1 menambahkan fitur yang dikenal sebagai p4ignore , terinspirasi oleh Git. Namun pengembang Perforce membuat perubahan pada perilaku, tanpa pembenaran, yang kebetulan membuat fitur tersebut menjadi kurang berguna.

Sementara Git mengambil aturan dari semua .gitignorefile, Perforce tidak tahu ke mana harus mencari sampai Anda menentukan nama file dalam variabel lingkungan P4IGNORE. Kebebasan ini adalah kutukan. Anda tidak dapat meretas dua repositori yang menggunakan nama berbeda untuk file pengabaiannya.

Selain itu, fitur abaikan Perforce tidak berfungsi di luar kotak. Anda dapat menyiapkannya dengan cukup mudah untuk diri Anda sendiri, tetapi orang lain tidak mendapatkan keuntungan kecuali mereka secara eksplisit ikut serta. Seorang kontributor yang belum mungkin secara tidak sengaja mengkomit file yang tidak diinginkan (misalnya binfolder yang dibuat oleh skrip build).

Fitur abaikan Git sangat bagus karena berfungsi di luar kotak. Jika .gitignorefile ditambahkan ke repositori ( semua orang melakukan ini ), mereka akan bekerja di luar kotak untuk semua orang. Tidak ada orang yang secara tidak sengaja mempublikasikan kunci pribadinya.

Anehnya, dokumen Perforce menampilkan '.p4ignore' sebagai contoh aturan abaikan, yang terbalik! Jika aturan berguna, mereka harus dibagikan sebagai bagian dari repositori.


Perforce masih bisa memanfaatkan fitur tersebut. Pilih konvensi untuk nama file, misalnya p4ignore.txt, sehingga fitur tersebut berfungsi dengan baik. Jatuhkan P4IGNOREvariabel lingkungan, itu kontraproduktif. Edit dokumen, untuk mendorong pengembang berbagi aturan yang berguna. Izinkan pengguna menulis aturan pribadi dalam file di folder rumah mereka, seperti yang dilakukan Git .

Jika Anda mengenal seseorang di Perforce, harap kirimkan email ini kepada mereka.

Kolonel Panic
sumber
2
Terima kasih atas klarifikasinya. Saya mencoba menggunakan .p4ignore dengan P4VS tetapi solusi saya yang seharusnya diabaikan tidak diabaikan. Pertama saya pikir saya melakukan sesuatu yang salah. Sekarang saya lebih tahu.
Michael S.
1
@gentlesea, mulai Perforce 2013.1, fitur abaikan akhirnya berfungsi di aplikasi grafis.
Kolonel Panic
2
Diskusi 'Buat fitur pengabaian berfungsi dengan baik' di p4ideax.com/ideas/17856/…
Kolonel Panic
1
Untuk variabel konfigurasi yang berbeda berdasarkan ruang kerja yang Anda gunakan, coba gunakan file P4CONFIG. Kemudian Anda dapat meminta file P4CONFIG Anda menentukan nilai P4IGNORE yang berbeda saat Anda berpindah dari ruang kerja ke ruang kerja.
Bryan Pendleton
2
Perforce tidak tahu bagaimana membangun perangkat lunak yang tepat, mereka bahkan tidak mendapatkan dasar-dasarnya. Itulah mengapa setiap orang yang terjebak dengan impian terpaksa pindah ke git.
Pavel P
22

Ini berfungsi mulai Perforce 2013.1, mekanisme P4IGNORE baru pertama kali ditambahkan pada rilis 2012.1, dijelaskan di blog Perforce di sini:

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

Seperti yang dijelaskan saat ini, Anda menyetel variabel lingkungan "P4IGNORE" ke nama file yang berisi daftar file yang akan diabaikan.

Jadi, Anda dapat memeriksanya untuk melihat seberapa Anda menyukainya.

svec
sumber
1
Anda juga dapat memasukkan nama direktori, bukan hanya nama file.
ashes999
Seperti yang disebutkan sebelumnya: sayangnya, Anda HARUS menyetel P4IGNORE.
Ahli
1
Saya memperbaiki tautan @DerMike - Saya kira Perforce mengubah URL blog mereka.
svec
7

Jika Anda menginginkan solusi yang akan diterapkan ke semua ruang kerja tanpa perlu disalin, Anda (atau sysadmin Anda) dapat menolak pengiriman jenis file tersebut dengan menggunakan baris seperti di bawah ini pada tabel proteksi p4:

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

Saya ingat melakukan ini sebelumnya, tetapi saya tidak memiliki izin yang diperlukan untuk mengujinya di sini. Lihat panduan Sysadmin Perforce dan cobalah

Mike Burrows
sumber
3
Sayangnya, hal ini menyebabkan kesalahan pada pengiriman daripada mengabaikan tampilan rekonsiliasi. Sehingga dapat menjaga file tertentu keluar dari repositori, tetapi tidak dapat membantu pengguna Anda untuk tidak melihat kebisingan.
Warren P
6

Perforce Streams membuat pengabaian file menjadi jauh lebih mudah, mulai dari versi 2011.1. Menurut dokumentasi, Anda dapat mengabaikan ekstensi tertentu atau jalur tertentu di direktori Anda.

Dari 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.

Ini pada dasarnya melakukan apa yang ditentukan oleh jawaban @ raven, tetapi dilakukan lebih mudah dengan aliran, karena secara otomatis menyebar ke setiap ruang kerja menggunakan aliran itu. Ini juga berlaku untuk aliran apa pun yang mewarisi dari aliran yang Anda tentukan jenis abaikannya.

Anda dapat mengedit aliran melalui p4 stream //stream_depot/stream_name atau mengklik kanan aliran di tampilan aliran p4v.

Dan seperti yang dicatat oleh @svec, kemampuan untuk menentukan file abaikan per ruang kerja akan segera hadir, dan sebenarnya ada dalam P4 2012.1 beta.

Kesempatan
sumber
Ya, ini berfungsi bagi saya untuk membagikan pengaturan "abaikan" ke seluruh tim (saya menggunakan p4 2013.2). Perhatikan bahwa ini hanya berfungsi di depot yang mendukung aliran. (Jika Anda dapat menyebarkan variabel lingkungan P4IGNORE = .p4ignore ke seluruh tim Anda, itu mungkin solusi terbaik.)
yoyo
1
Perhatikan bahwa bidang yang Diabaikan untuk aliran dapat digunakan untuk mengabaikan folder, file, atau ekstensi file tertentu, tetapi dukungan karakter pengganti terbatas dan tidak ada cara untuk mengabaikan seluruh folder dan kemudian "tidak mengabaikan" file atau sub-folder tertentu. (Pada server p4 versi 2013.2)
yoyo
3

Saran Will untuk menggunakan .p4ignoretampaknya hanya berfungsi dengan plugin WebSphere Studio (P4WSAD). Saya baru saja mencobanya di kotak windows lokal saya dan semua file dan direktori yang saya daftarkan tidak diabaikan.

Saran Raven untuk mengubah spesifikasi klien Anda adalah cara yang benar menurut Perforce. Pengaturan yang tepat dari kode / data / file yang dapat dieksekusi dan file keluaran yang dihasilkan akan membuat proses mengecualikan file agar tidak diperiksa lebih mudah.

Sebagai pendekatan yang lebih kejam, Anda selalu dapat menulis pemicu pengiriman yang akan menolak pengiriman daftar perubahan jika daftar tersebut berisi file atau file tertentu dengan ekstensi tertentu, dll.

Menandai
sumber
15
Saya benar-benar tidak setuju dengan seluruh pernyataan "Organisasi yang tepat dari kode Anda ...". Faktanya adalah, mengikuti konvensi Perforce tentang pengeditan ruang kerja mengharuskan setiap pengguna untuk melakukan perubahan. Padahal, file .p4ignore yang sebenarnya hanya akan dibuat / dikelola sekali.
Mike
9
Oh, dan belum lagi, Anda suka memecah kode Anda? Semoga berhasil mempertahankan ruang kerja Anda untuk setiap cabang. Itu terdengar menyenangkan!
Mike
2

JAWABAN SEJARAH - tidak lagi benar. Pada saat ini ditulis aslinya itu benar;

Anda tidak dapat menulis dan memeriksa file yang akan digunakan server untuk membuat aturan pengabaian; abaikan pola file glob atau regexp umum secara paksa.

Jawaban lain memiliki konfigurasi server global yang bersifat global (dan bukan per folder). Jawaban lain menunjukkan hal-hal yang mungkin berhasil untuk Anda, jika Anda menginginkan satu baris dalam tampilan Anda per folder kali jumlah ekstensi yang ingin Anda abaikan dalam satu folder itu, atau yang menyediakan kemampuan ini hanya di plugin WebSphere Studio, atau menyediakan kemampuan untuk server administrator, tetapi tidak tersedia untuk pengguna.

Singkatnya, menurut saya Perforce sangat lemah di area ini. Meskipun saya menghargai bahwa mereka yang menggunakan Eclipse Plugin dapat menggunakan .p4ignore, dan saya pikir itu hebat, itu membuat kita yang tidak menggunakannya, tidak tahu apa-apa.

UPDATE: Lihat jawaban yang diterima untuk kemampuan P4IGNORE baru yang ditambahkan pertengahan 2012.

Warren P.
sumber
1

Saya merasa paling mudah untuk merekonsiliasi pekerjaan offline menggunakan skrip BASH seperti ini:

#!/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)'

Saya mengadaptasi ini dari artikel Pangkalan Pengetahuan Perforce .

kevin cline
sumber
Itu tujuh tahun lalu, saya tidak terkejut. Saya terkejut ada orang yang masih menggunakan Perforce.
kevin cline
... bukan karena pilihan: '(
DerMike
0

Saya mencari solusi seperti .p4ignore juga (dan bukan yang terkait dengan IDE tertentu). Sejauh ini, hal terdekat yang saya temukan adalah p4delta. Sepertinya itu akan melakukan apa yang diminta poster asli, meskipun melalui lapisan tipuan lain.

http://p4delta.sourceforge.net

Sayangnya, meskipun ini tampaknya menghasilkan daftar file yang tepat, saya tidak dapat mengaktifkan "p4delta --execute" ("Tidak dapat mengubah string yang dibekukan") dan proyek belum diperbarui tahun ini. Mungkin orang lain akan lebih beruntung.

Derek Prior
sumber
-1

Jika Anda menggunakan plugin Eclipse Perforce, dokumentasi plugin mencantumkan beberapa cara untuk mengabaikan file.

Deepak Sarda
sumber
5
duplikat, dan tidak menjawab pertanyaan
Warren P