Bir Perforce ağacında izlenmeyen dosyalar nasıl bulunur? (svn durumunun analogu)


87

Perforce ağacında izlenmemiş (gerçekten: eklenmemiş) dosyaları bulmak için bir komut dosyası veya takma adı olan var mı?

DÜZENLEME: Ocak 2009 sürümünde P4V bunun için destek eklemiş gibi göründüğü için bu yanıtla ilgili kabul edilen yanıtı güncelledim.


11
En çok kullanılan kurumsal SCM aracının bu işlevselliği nasıl kaçırdığını hayal edemiyorum. Muhtemelen tüm geliştiricileri yalnızca GUI kullanıyor.
sorin

3
Oh yüksek sesle ağladığın için !!!! Kabul edilen p4 statusyalnızca izlenmeyen dosyaları BULMAZ, aslında ONLARI İZLEMEYE BAŞLAR. Yani p4 status, adından şüphelenildiği gibi salt okunur bir sorgu değil, aslında çalışma alanı dosyalarını değil, işleri değiştiren bir komuttur. Bu, bir durum komutunun ne yapması gerektiği DEĞİLDİR ve ne svn statusyaptığı DEĞİLDİR . Ben bulabileceğiniz en yakın şey svn statusolduğunu p4 reconcile -na- -a "aslında değişim şey yapmak" demek -n "eklenmelidir dosyaları" demek. /// Başlangıçta çok daha güçlü bir şey söyledim.
Krazy Glew

1
Yanlışlıkla stackoverflow.com/questions/9272/… 'nin kopyası olarak işaretlenen stackoverflow.com/questions/9642531/…' yi yeni soru olarak yeniden canlandırdım (p4 komutu, git / hg / bzr / svn gibi bir şeye eşdeğerdir) durum? (İpucu: hayır p4 status) ve kendim yanıtladım. Daha iyi bir karşılama
Krazy Glew

Her ikisi de p4 reconcileve p4 statuscehennem kadar yavaştır, ancak git status1-3 saniye içinde bitirilir.
zwcloud

Yanıtlar:


81

DÜZENLEME: Lütfen p4 statusşimdi kullanın . Artık çemberlerden atlamaya gerek yok. @ AlbayPanic'in cevabına bakınız .

P4V'nin Ocak 2009 sürümünde, çalışma alanı ağacınızdaki herhangi bir klasöre sağ tıklayıp "çevrimdışı çalışmayı uzlaştır ..." seçeneğine tıklayabilirsiniz.

Bu, biraz işlem yapar ve ardından teslim alınmayan ancak depo sürümünden farklı olan veya hiç teslim edilmeyen dosyaların bölünmüş ağaç görünümünü getirir. Hatta ortaya çıkardığı birkaç başka kategori bile olabilir.

Bu görünümdeki dosyalara sağ tıklayıp teslim alabilir, ekleyebilir ve hatta geri döndürebilirsiniz.

Birkaç kez kıçımı kurtaran çok kullanışlı bir araçtır.

DÜZENLEME: ah soru özellikle senaryolar hakkında soruldu, ancak bu yanıtı her ihtimale karşı burada bırakacağım.


Bu soruya bir powershell çözümü eklendi: stackoverflow.com/questions/3217152/…
tenpn

Bu, her bir dosyayı depodaki sürümle karşılaştırır mı? Büyük bir depom ve yavaş bir bağlantım var (evden çalışırken). Bu sonsuza kadar sürebilir!
gdw2

Bunun tam bir fark olduğunu sanmıyorum ama hızlı değil.
tenpn

10
Oh yüksek sesle ağladığın için !!!! p4 statussadece izlenmeyen dosyaları BULMAZ, aslında onları İZLEMEYE BAŞLAR. Yani p4 status, adından şüphelenildiği gibi salt okunur bir sorgu değil, aslında çalışma alanı dosyalarını değil, işleri değiştiren bir komuttur. Bu, bir durum komutunun ne yapması gerektiği DEĞİLDİR ve ne svn statusyaptığı DEĞİLDİR . Ben bulabileceğiniz en yakın şey svn statusolduğunu p4 reconcile -na- -a "aslında değişim şey yapmak" demek -n "eklenmelidir dosyaları" demek. /// Başlangıçta çok daha güçlü bir şey söyledim.
Krazy Glew

1
p4 statustemelde eşanlamlıdır p4 reconcile -n. Belki p4 status -Aeşanlamlı olan koştunuz p4 reconcile?
Samwise

50

Linux'ta veya Windows'ta gnu-tools kurulu ise:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null

Bu, hesaplanmayan her dosya için bir hata mesajı gösterecektir. Bu çıktıyı yakalamak istiyorsanız:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile

1
Stderr'i stdout'a yeniden yönlendirmek, ek filtreleme veya diğer işlemleri gerçekleştirmenize olanak tanır. Örneğin, Java dosyalarının kaydırılabilir bir listesini görmek için: bulun. -tipi f -print0 | xargs -0 p4 fstat 2> & 1> / dev / null | grep '\ .java' | daha az
Jon Nadal

2
60 bin dosyalık çalışma alanımda bu çok uzun sürüyor. Aynı işi 10 saniyenin altında yapan bir python betiği yazdım: p5 . Ayrıca .p4ignoreizlenmeyen / değiştirilen / silinen dosyaları destekler ve önizleyebilir ve otomatik olarak düzenleyebilir.
hamstergene

@hamstergene, çok güzel!
Mark Harrison

Herhangi biri ilgilenirse tam olarak bunu yapan küçük bir betik yazdı (dir argümanı, maksimum derinlik argümanı ve stdout'a çıktı dahil).
Arnon Zilca

Teşekkürler; Bunu yararlı buldum! Bunun symlink'leri ( find . -type l) işlemediğini ve @veya %karakterlerini içerdikleri için zorla eklenen P4 dosyaları için yanıltıcı çıktılar verdiğini unutmayın . Ancak, bu tür dosyalar azınlıktadır, bu nedenle bu uç vakaların manuel olarak incelenmesi çoğu durumda işe yarayacaktır.
CJBS

19

Unix altında:

find -type f ! -name '*~' -print0| xargs -0 p4 fstat 2>&1|awk '/no such file/{print $1}'

Bu, istemcinize veya Perforce deposuna eklenmemiş dosyaların bir listesini yazdıracaktır. Ben kullandım ! -name '*~'~ ile biten dosyaları dışlamak için.


12

Ahh, Perforce klasiklerinden biri :) Evet, gerçekten berbat, bunun HALA bunun kolay bir yolu yok.

En kolay yol, istemcilerinizin kök dizinindeki tüm dosyaları bulmak için bir komut çalıştırmak ve ardından bunları depoya eklemeye çalışmaktır. Tüm yeni dosyaların bir değişiklik listesiyle sonuçlanacaksınız ve mevcut dosyalar yok sayılacak.

Örneğin dir / s / b / AD | p4 -x - ekle

(bir nix komut satırından 'find. -type f -print' kullanın).

Fiziksel bir liste istiyorsanız (konsolda veya dosyada), bir farkın sonuçlarını kanalize edebilirsiniz (veya bir değişiklik listesinde de istiyorsanız ekleyebilirsiniz).

Bunu P4Win içinde çalıştırıyorsanız, mevcut çalışma alanının istemci kökünü değiştirmek için $ r kullanabilirsiniz.


11

svn statusVeya analogu var mı git status?

Evet, AMA .

Perforce 2012.1 sürümünden itibaren, p4 statusP4V'de 'çevrimdışı çalışmayı uzlaştır' komutu vardır . Ancak ikisi de çok yavaştır. Alakasız dosyaları hariç tutmak için https://stackoverflow.com/a/13126496/284795p4ignore.txt başına bir dosya yazmanız gerekir.


1
p4 status2012.1 sürümünden bu yana birkaç performans iyileştirmesi yapıldı . p4 statusPerformans kaygıları nedeniyle uzak durduysanız, şimdi nasıl davrandığını görmek için tekrar test etmeye değer olabilir.
Bryan Pendleton

7

Kabul edilen yanıt ve diğerlerinden bazıları önemli bir sorun olduğunu düşündüğümden bir cevap eklemeye mecbur hissediyorum: salt okunur bir sorgu komutu ile değişiklik yapan bir komut arasındaki farkı anlamıyorlar.

Bu cevap için herhangi bir kredi beklemiyorum, ancak kabul edilen ancak IMHO'nun yanlış cevabını takip ederek başkalarının zaman kaybetmekten ve hata yapmaktan kaçınmasına yardımcı olacağını umuyorum.

--- + KISA

Muhtemelen bir performans çalışma alanında izlenmemiş tüm dosyaları bulmanın en uygun yolu p4 reconcile -na.

-a "bana depoda olmayan, yani eklenmesi gereken dosyaları ver" diyor.

-n"değişiklik yapma" diyor - yani kuru çalıştırma. (Mesajlar "eklemek için açıldı" diyebilse de, zihinsel olarak bunu "-n değilse eklemek için açılacak" şeklinde yorumlamalısınız)

Muhtemelen en uygun yol çevrimdışı iken yapılan tüm yerel değişiklikleri bulmak için - sadece eklenecek o kudreti ihtiyacı dosyaları, aynı zamanda o kudreti ihtiyacı Silinecek veya bunlar üzerinden düzenleme için açılan olmadan değiştirilmiş dosyaları p4 editvardır p4 reconcile -n.

Birkaç cevap, genellikle içeren komut dosyaları sağladı p4 fstat. Tüm bu komut dosyalarını doğrulamamış olsam da, perforce komutlarının eksikliklerini telafi etmek için sıklıkla benzer komut dosyaları kullanıyorum p4 reconcile -n- örneğin, Perforce depo yolları veya çalışma alanı yolları yerine yerel yollar istediğimi fark ediyorum.

--- + UYARI

p4 status diğer sürüm kontrol sistemlerindeki durum komutlarının karşılığı DEĞİLDİR.

p4 statussalt okunur bir sorgu DEĞİLDİR. p4 statusgerçekte bulan aynı tür değişiklikleri bulur p4 reconcileve bunları arşive ekler. p4 statusgöründüğü gibi -nkuru çalıştırma seçeneğine p4 reconcilesahip değil.

Bunu yaparsanız p4 status, dosyalara bakın ve "Oh, bunlara ihtiyacım yok" diye düşünün, o zaman p4 revertaynı çalışma alanında düzenlemeye devam etmek istiyorsanız onlara ihtiyacınız olacak . Aksi takdirde, değişiklik p4 statuskümenize eklenen değişiklikler bir dahaki sefere kontrol edilecektir.

Yerel çalışma alanı ve depo yol adı ile ilgili bazı ayrıntılar dışında, kullanmak için p4 statusçok az veya hiç neden yok gibi görünüyor p4 reconcile -n.

Salt okunur olmayan bir komut için "durum" u seçen her kimse, İngilizce dili ve diğer sürüm kontrol araçları konusunda sınırlı bilgiye sahip olduğunu hayal edebiliyorum.

--- + P4VGUI

GUI'de p4v, mutabakat komutu düzenleme için eklenmesi, silinmesi veya açılması gerekebilecek yerel değişiklikleri bulur. Neyse ki, bunları varsayılan olarak değişiklik listesine eklemiyor; ancak, değişiklikleri uygulamak istemiyorsanız, inceledikten sonra mutabakat penceresini kapatırken yine de dikkatli olmak isteyebilirsiniz.


p4 durumu dosya eklemiyor gibi görünüyor. gibi çalışır ve 'uzlaştırmak -n' olarak belgelenir. bir şeyleri değiştirdiğinden emin misin?
kdubs

4

Çalışma alanındaki depodan (Windows için) farklı olan tüm dosyaları yedekleyen aracımda aşağıdakileri kullanıyorum. Gömülü boşluklar, yıldızlar, yüzdeler ve hashmarklar gibi Perforce'un pek sevmediği bazı garip durumları ele alıyor:

dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- have 1>NUL:

" dir / S / B / AD ", bu klasördeki ( / S ) veya altındaki tüm dosyaları, dizinleri (/ AD ) hariç "çıplak" biçimde ( / B ) listeler . " Sed ", tehlikeli karakterleri " % xx " biçimlerine (a la HTML) dönüştürür ve " p4 have " komutu, bu listeyi (" -x- "), arşivde gerçekte bulduğu dosyalar hakkındaki her şeyi atarak sunucuya karşı kontrol eder. (" 1> NUL: "). Sonuç, aşağıdaki gibi bir dizi satırdır:

Z:\No_Backup\Workspaces\full\depot\Projects\Archerfish\Portal\Main\admin\html\images\nav\navxx_background.gif - file(s) not on client.

Et voilà!


Bu harika bir çözüm ve hala P4 sürüm 2015.1 ile çalışıyor
Rian Sanderson

çok hızlı! find / xargs bellek yetersiz ve yavaş çalışıyor. .Bat dosyasına eklerken% 'leri ikiye katlamayı hatırlayın.
kevinf

4

Alternatif olarak P4Win'den, sol taraftaki görünüm panelindeki "" Depoda Olmayan Yerel Dosyalar "seçeneğini kullanın.

P4V'yi çok fazla kullanmıyorum, ancak eşdeğerinin Çalışma Alanı görünümü sekmesinin filtre açılır menüsünde "Yerel Çalışma Alanı Dosyalarını Gizle" yi seçmek olduğunu düşünüyorum. P4 yardım fstat

P4V 2015.1'de bu seçenekleri filtre düğmesinin altında şu şekilde bulacaksınız: görüntü açıklamasını buraya girin


Bu sadece geçerli dizinin altındaki dosyaları gösterir, ne yazık ki :(
JP P.

2

Quick 'n Dirty: p4v'de söz konusu klasöre sağ tıklayın ve altındaki tüm dosyaları yeni bir değişiklik listesine ekleyin. Değişiklik listesi artık şu anda deponun parçası olmayan tüm dosyaları içerecek.


1

Aşağıdaki komutlar durum benzeri çıktı üretir, ancak hiçbiri tam olarak eşdeğer değildir svn statusveya git statusher dosyanın durumunun tek satırlık bir özetini sağlar:

  • p4 status
  • p4 opened
  • p4 diff -ds

0

Yorum yapacak kadar itibar puanım yok, ancak Ross'un çözümü ayrıca eklenmeye açık dosyaları da listeliyor. Muhtemelen do not çalışma alanınızı temizlemek için onun cevabını kullanmak istiyorum.

Aşağıdakiler p4 fstatyerine (teşekkürler Mark Harrison) kullanır p4 haveve depoda olmayan ve eklenmeye açık olmayan dosyaları listeler .

dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- fstat 2>&1 | sed -n -e "s/ - no such file[(]s[)]\.$//gp"

=== Jac


0

Hızlı yöntem, ancak çok az ortodoks. Kod tabanı yeni dosyalar eklemiyorsa / görünümü değiştirmiyorsa, satın alma işleminizden yerel bir 'git' deposu oluşturabilirsiniz. Temiz bir performans senkronizasyonundan, git init, tüm dosyaları yerel olarak ekleyin ve kesin. Git durumu hızlıdır ve önceden kaydedilmemiş dosyaları gösterir.


0

p4 fstatKomutu bir dosya çalışma alanında varsa sen ile birleştirmek, test edebilmenizi sağlar findaşağıdaki Perl örnekte olduğu gibi kontrol etmek dosyaları bulmak için:

// throw the output of p4 fstat to a 'output file'
// find:
//  -type f  :-  only look at files,
//  -print0  :-  terminate strings with \0s to support filenames with spaces
// xargs:
//  Groups its input into command lines,
//  -0       :-  read input strings terminated with \0s
// p4:
//  fstat    :-  fetch workspace stat on files

my $status=system "(find . -type f -print0 | xargs -0 p4 fstat > /dev/null) >& $outputFile";

// read output file
open F1, $outputFile or die "$!\n";

// iterate over all the lines in F1
while (<F1>) {
  // remove trailing whitespace
  chomp $_;

  // grep lines which has 'no such file' or 'not in client'
  if($_ =~ m/no such file/ || $_ =~ m/not in client/){

     // Remove the content after '-'
     $_=~ s/-\s.*//g;

     // below line is optional. Check ur output file for more clarity.
     $_=~ s/^.\///g;

     print "$_\n";
  }
}

close F1;

Ya da kullanabilirsin p4 reconcile -n -m ...

'Silmek için açılmışsa', çalışma alanından kaldırılmıştır. Yukarıdaki komutun önizleme modunda ( -n) çalıştığını unutmayın .


1
Lütfen cevap olarak herhangi bir açıklama olmadan bazı kodlar atmayın, OP'nin kodu anlamasına ve bir şeyler öğrenmesine yardımcı olmak için bazı açıklamalar ekleyin. :)
Markus


0

Bu komut size eklenmesi, düzenlenmesi veya kaldırılması gereken dosyaların bir listesini verebilir:
p4 status -aed ...
bunları ayrı olarak da kullanabilirsiniz
p4 status -a ...
p4 status -e ...
p4 status -d ...


-1

P4V'de, "Görünüm" menü öğesinin altında, sağ bölmede yeni bir sekme açan "Klasördeki Dosyalar" ı seçin. Sekmelerin en sağında, 2 simgeli "Klasördeki Dosyalar" adlı pencereyi açan küçük bir simge vardır. Bir huniye benzeyen sol simgeyi seçin ve birkaç seçenek göreceksiniz. "Depoda olmayan öğeleri göster" i seçin ve klasördeki tüm dosyalar görünecektir. Ardından eklemek istediğiniz dosyaya sağ tıklayın ve "Eklemek için İşaretle ..." seçeneğini seçin. Orada olduğunu "Beklemede" sekmesinde doğrulayabilirsiniz. Normal olarak gönderin (Ctrl + S).

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.