Perforce'da bir dosyayı "göz ardı edebilir misiniz"?


101

Perforce'un P4V IDE'sinde bulunan 'Çevrimdışı Çalışmayı Uzlaştır ...' özelliğini bazen P4 deposundan bağlantım kesilmişken üzerinde çalıştığım dosyaları senkronize etmek için kullanıyorum. Bir 'Klasör Diff' gerçekleştiren başka bir pencere açar.

Kaynak kontrolüne asla iade etmek istemediğim dosyalarım var (DLL'ler gibi bin klasöründe bulunanlar, üretilen kod çıktıları vb.) Bu dosyaları / klasörleri "yeni" olarak görünmesini engellemenin bir yolu var mı katma. Aslında ilgilendiğim dosyaların listesini karıştırmaya meyillidirler. P4, Subversion'ın 'dosyayı yoksay' özelliğine eşdeğer mi?


Ne demek istediğinizi ve verilen yanıtların neden istediğinizi yapmadığını görebilmemiz için CVS çıktısının bir örneğini verebilir misiniz?
Greg Whitfield

2
Perforce'un fikir forumunda, Git tarzı yok sayma listeleri için bir öneriye oy verebilirsiniz p4ideax.com/ideas/15/ignore-support
Albay Panic

"Çevrimdışı Çalışmayı Uzlaştır" ı tıklayın, "Depoda olmayan yerel dosyalar" ın işaretini kaldırın, "Uzlaştır" düğmesine basın. Dosya eklemediğiniz sürece muhtemelen en hızlı çözüm budur.
şerit

Yanıtlar:


59

2012.1 sürümünden itibaren, Perforce P4IGNOREortam değişkenini desteklemektedir . Dizinleri yok saymakla ilgili bu soruya verdiğim yanıtı , nasıl çalıştığına dair bir açıklama ile güncelledim . Sonra bu yanıtı fark ettim, sanırım artık gereksiz.


"CLIENT" adında bir istemciniz olduğunu, "foo" adlı bir dizine (proje kökünüzde bulunur) sahip olduğunuzu ve bu dizin ağacındaki tüm .dll dosyalarını yoksaymak istediğinizi varsayarak, başarmak için çalışma alanı görünümünüze aşağıdaki satırları ekleyebilirsiniz. bu:

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

İlk satır onları "foo" dizininden kaldırır ve ikinci satır onları tüm alt dizinlerden kaldırır. Şimdi, 'Çevrimdışı Çalışmayı Uzlaştırdığınızda ...', tüm .dll dosyaları, klasör diff ekranının altındaki "Hariç Tutulan Dosyalar" klasörlerine taşınacaktır. Yolunuzun dışına çıkacaklar, ancak gerçekten ihtiyacınız olursa onları görüntüleyip manipüle edebilirler.

Bunu başka bir yolla da yapabilirsiniz, bu "Hariç Tutulan Dosyalar" klasörünüzü tek bir klasöre indirgeyecektir, ancak içerdiği dosyaların hiçbirini değiştiremezsiniz çünkü yol bozuk olacaktır (ancak yalnızca onları dışarıda bırakmak istiyorsanız senin yolun, önemli değil).

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

30
Bu işe yarasa da, oluşturduğunuz her çalışma alanına bu satırları yerleştirmeniz gerekeceğinden pek kullanışlı değil.
dgrant

6
Not: Bu, p4v'den normal mutabakat çevrimdışı çalışması için çalışmaz. "Hariç tutulan dosyalar" yalnızca "gelişmiş" uzlaştırma penceresinde görünüyor ...
Catskul

6
Dışlama filtresi Reconcile Offline Workiletişim kutusunun içinde çalışmaz . İçeride açarsanız işe yarıyor, Advanced Reconcile...ancak bu işe yaramıyor çünkü zamanın% 99.9'unda gelişmiş iletişim kutusuna ihtiyacınız yok veya kullanmak istemiyorsunuz.
sorin

12
@raven: 1) (Örnek :) Bazı projeler, merkezi bir konuma sahip olmak yerine her projenin altında bin / obj klasörlerini kullanır. (Genelleştirilmiş sonuç :) Perforce'un tüm ara dosyaların kolayca dışarıda bırakılan bir çalışma alanı konumuna yerleştirildiği varsayımı, bir VCS'nin yapılması için gereksiz yere kısıtlayıcı bir tasarımdır. 2) Bazı projeler, dizin yapısında yerel önbelleği ve / veya kullanıcı başına oluşturulan diğer dosyaları içerir (örnek olarak, * .ncb IntelliSense önbelleği). Bunların ortak bir ilke olarak dışlanamaması, Çevrimdışı Çalışmayı Uzlaştır ve Farklı Klasörler özelliklerini ciddi şekilde bozar.
Sam Harwell

6
Bu özel sorun beni öldürüyor.
Warren P

47

Evet ama.

Perforce sürüm 2012.1, Git'ten esinlenerek p4ignore olarak bilinen bir özellik ekledi . Bununla birlikte, Perforce geliştiricileri, özelliği çok daha az kullanışlı hale getiren, herhangi bir gerekçe olmaksızın davranışta bir değişiklik yaptılar.

Git tüm .gitignoredosyalardan kurallar alırken , siz bir ortam değişkeninde bir dosya adı belirleyene kadar Perforce nereye bakacağını bilmez P4IGNORE. Bu özgürlük bir lanettir. Yok sayılan dosyalar için farklı adlar kullanan iki depoyu hackleyemezsiniz.

Ayrıca, Perforce'un görmezden gelme özelliği kutuyu çözmez. Kendiniz için yeterince kolayca kurabilirsiniz, ancak diğerleri açıkça katılmadıkları sürece yararlanamazlar. Yanlışlıkla istenmeyen dosyaları işlemeyen bir katılımcı (örneğin bin, bir yapı betiği tarafından oluşturulan bir klasör).

Git'in görmezden gelme özelliği harika çünkü kutuyu çözüyor. Eğer .gitignoredosyaları (depoya eklenen herkes bunu yapar ), herkes için kutuyu çalışacağız. Kimse yanlışlıkla kendi özel anahtarını yayınlamaz.

Eğlenceli bir şekilde, Perforce belgelerinde '.p4ignore' bir örnek olarak, kuralı görmezden geliyor, ki bu tersten! Kurallar yararlıysa, arşivin bir parçası olarak paylaşılmalıdır.


Performans, bu özellik üzerinde hala iyi olabilir. Diyelim ki dosya adları için bir kural seçin p4ignore.txt, böylece özellik kutuyu çözer. P4IGNOREÇevre değişkenini bırakın, ters etki yapar. Geliştiricileri faydalı kuralları paylaşmaya teşvik etmek için dokümanları düzenleyin. Git'in yaptığı gibi , kullanıcıların kendi ana klasörlerindeki bir dosyaya kişisel kurallar yazmasına izin verin .

Perforce'de birini tanıyorsanız, lütfen bu gönderiyi onlara e-posta ile gönderin.


2
Açıklama için teşekkürler. P4VS ile .p4ignore kullanmayı denedim, ancak göz ardı edilmesi gereken çözümüm göz ardı edilmedi. Önce yanlış bir şey yaptığımı düşündüm. Şimdi daha iyi biliyorum.
Michael S.

1
@gentlesea, Perforce 2013.1 itibariyle, yok sayma özelliği nihayet grafik uygulamasında çalışıyor.
Albay Panic


1
Kullandığınız çalışma alanına göre farklılık gösteren yapılandırma değişkenleri için P4CONFIG dosyalarını kullanmayı deneyin. Ardından, çalışma alanından çalışma alanına geçerken P4CONFIG dosyanızın farklı bir P4IGNORE değeri belirtmesini sağlayabilirsiniz.
Bryan Pendleton

2
Perforce doğru yazılımı nasıl geliştireceğini bilmiyor, hatta temel bilgilere bile sahip değil. Bu yüzden performansa takılan herkes git'e taşınmayı hayal ediyor.
Pavel P

22

Bu, Perforce 2013.1 itibarıyla çalışır, yeni P4IGNORE mekanizması ilk olarak 2012.1 sürümünde eklenmiştir ve burada Perforce blogunda açıklanmıştır:

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

Şu anda açıklandığı gibi, "P4IGNORE" ortam değişkenini, yok sayılacak dosyaların bir listesini içeren bir dosya adına ayarlarsınız.

Böylece ne kadar sevdiğinizi görmek için kontrol edebilirsiniz.


1
Yalnızca dosya adlarını değil, dizin adlarını da ekleyebilirsiniz.
ashes999

Daha önce bahsedildiği gibi: maalesef P4IGNORE'u ayarlamanız GEREKİR.
Technophile

1
@DerMike bağlantısını düzelttim - Sanırım Perforce blog URL'lerini değiştirdi.
svec

7

Kopyalanmaya gerek kalmadan tüm çalışma alanlarına uygulanacak bir çözüm istiyorsanız, siz (veya sistem yöneticiniz) p4 koruma tablosunda aşağıdaki gibi satırlar kullanarak bu dosya türlerinin gönderilmesini reddedebilirsiniz:

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

Bunu daha önce yaptığımı hatırlıyorum, ancak burada test etmek için gerekli izinlere sahip değilim. Perforce'un Sysadmin kılavuzuna göz atın ve deneyin


3
Ne yazık ki bu, mutabakat görünümünün yok sayılması yerine gönderme sırasında hatalara neden olur. Böylece, belirli dosyaları bir havuzun dışında tutabilir, ancak kullanıcılarınızın gürültüyü görmemelerine yardımcı olamaz.
Warren P

6

Perforce Streams, 2011.1 sürümünden itibaren dosyaların yok sayılmasını çok daha kolay hale getiriyor. Belgelere göre dizininizdeki belirli uzantıları veya belirli yolları göz ardı edebilirsiniz.

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

Bu, @ raven'ın cevabının belirttiği şeyi yapar, ancak bu akışı kullanan her çalışma alanına otomatik olarak yayıldığından akışlarla daha kolay yapılır. Ayrıca, yok sayma türlerini belirttiğiniz akıştan devralan tüm akışlar için de geçerlidir.

p4 stream //stream_depot/stream_nameAkışı, p4v'nin akış görünümünde akışı sağ tıklayarak veya sağ tıklayarak düzenleyebilirsiniz .

Ve @svec'in de belirttiği gibi, çalışma alanı başına dosyaları yok sayma özelliği yakında geliyor ve aslında P4 2012.1 beta sürümünde.


Evet, bu benim için "yok sayma" ayarlarını takım içinde paylaşmam için işe yarıyor (p4 2013.2'yi kullanıyorum). Yalnızca akışların etkin olduğu bir depoda çalıştığını unutmayın. (P4IGNORE = .p4ignore ortam değişkenini ekibinize yayabilirseniz, muhtemelen en iyi çözüm budur.)
yoyo

1
Bir akış için Yoksayılan alanın belirli bir klasörü, dosyayı veya dosya uzantısını yok saymak için kullanılabileceğini, ancak joker karakter desteğinin sınırlı olduğunu ve tüm bir klasörü yok saymanın ve ardından belirli dosyaları veya alt klasörleri "yok saymanın" hiçbir yolu olmadığını unutmayın. (P4 sunucu sürümü 2013.2 itibariyle)
yoyo

3

Will'in .p4ignoreyalnızca kullanma önerisi WebSphere Studio (P4WSAD) eklentisiyle işe yarıyor gibi görünüyor. Bunu yerel Windows kutumda denedim ve listelediğim dosyalar ve dizinler göz ardı edilmedi .

Raven'ın müşteri özelliklerini değiştirme önerisi, Perforce altında doğru yoldur. Kodunuzun / verilerinizin / yürütülebilir dosyalarınızın ve oluşturulan çıktı dosyalarınızın uygun şekilde düzenlenmesi, dosyaların kontrol edilmekten hariç tutulmasını çok daha kolay hale getirecektir.

Daha sert bir yaklaşım olarak, belirli bir dosya veya belirli bir uzantıya sahip dosyalar, vb. İçeriyorsa, değişiklik listelerinin gönderilmesini her zaman reddedecek bir gönderme tetikleyicisi yazabilirsiniz.


15
"Kodunuzun uygun şekilde düzenlenmesi ..." ifadesine tamamen katılmıyorum. Gerçek şu ki, Perforce'un çalışma alanını düzenleme geleneğine uymak, her kullanıcının değişikliği yapmasını gerektiriyor. Oysa gerçek bir .p4ignore dosyası yalnızca bir kez oluşturulur / yönetilir.
Mike

9
Oh, ve bahsetmiyorum bile, kodunuzu dallara ayırmayı seviyorsunuz? Her dal için çalışma alanlarınızı korumada iyi şanslar. Kulağa eğlenceli geliyor!
Mike

2

TARİHİ CEVAP - artık doğru değil. Bu orijinal olarak yazıldığı sırada doğruydu;

Sunucunun yok sayma kuralları oluşturmak için kullanacağı bir dosyayı yazıp teslim edemezsiniz; genel glob veya regexp dosya kalıbı perforce olarak yok sayılır.

Diğer yanıtlar, genel (klasör başına değil) genel sunucu yapılandırmalarına sahiptir. Diğer yanıtlar, görünümünüzde klasör başına bir satırın o tek klasörde göz ardı etmek istediğiniz uzantı sayısının çarpımı olmasını istiyorsanız veya bu özelliği yalnızca WebSphere Studio eklentilerinde sağlayan veya sunucu için yetenek sağlayan şeyleri gösterir. yöneticiler, ancak kullanıcılar tarafından kullanılamaz.

Kısacası, bu alanda Perforce'u gerçekten zayıf buluyorum. Eclipse Eklentisini kullananların kullanabileceğini takdir .p4ignoreetmeme rağmen ve bence bu harika, kullanmayanları karanlıkta bırakıyor.

GÜNCELLEME: 2012 ortasında eklenen yeni P4IGNORE özelliği için kabul edilen cevaba bakın.


1

Bunun gibi bir BASH komut dosyası kullanarak çevrimdışı çalışmayı uzlaştırmanın en kolay yolunu buldum:

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

Bunu bu Perforce Bilgi Bankası makalesinden uyarladım .


Bu yedi yıl önceydi, şaşırmadım. Birinin hala Perforce kullanmasına şaşırdım.
kevin cline

... tercihe göre değil: '(
DerMike

0

Ben de .p4ignore benzeri bir çözüm arıyorum (ve belirli bir IDE'ye bağlı değil). Şimdiye kadar bulduğum en yakın şey p4delta. Görünüşe göre orijinal posterin istediği şeyi yapacak gibi görünüyor, ancak başka bir dolaylı yolla da olsa.

http://p4delta.sourceforge.net

Maalesef, bu doğru dosya listesini oluşturuyormuş gibi görünse de, "p4delta --execute" u işe alamıyorum ("Dondurulmuş bir dizeyi değiştiremiyorum") ve proje yıl içinde güncellenmedi. Belki başkalarının daha iyi şansı olacaktır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.