Jak znaleźć nieśledzone pliki w drzewie Perforce? (odpowiednik statusu svn)


87

Czy ktoś ma skrypt lub alias do znajdowania nieśledzonych (naprawdę: niedodanych) plików w drzewie Perforce?

EDYCJA: Zaktualizowałem zaakceptowaną odpowiedź na ten, ponieważ wygląda na to, że P4V dodał obsługę tego w wydaniu ze stycznia 2009.


11
Nie mogę sobie wyobrazić, jak to się stało, że najczęściej używanym korporacyjnym narzędziu SCM brakuje tej funkcji. Prawdopodobnie wszyscy ich programiści używają tylko GUI.
sorin,

3
Och, na litość boską !!!! Zaakceptowane p4 statusnie tylko ZNAJDŹ nieśledzone pliki, ale faktycznie ROZPOCZYNA JE ŚLEDZENIE. To p4 statusznaczy nie jest zapytaniem tylko do odczytu, jak można by podejrzewać po nazwie, ale w rzeczywistości jest poleceniem, które zmienia rzeczy - nie pliki obszaru roboczego. To NIE jest to, co polecenie statusu powinno robić, a NIE to, co svn statusrobi. Najbliższą rzeczą, jaką mogę znaleźć, svn statusjest p4 reconcile -na- -a powiedzieć „pliki, które powinny zostać dodane”, -n powiedzieć „właściwie niczego nie zmieniaj”. /// Pierwotnie powiedziałem coś znacznie mocniejszego.
Krazy Glew

1
Przywróciłem stackoverflow.com/questions/9642531/… , który został nieprawidłowo oznaczony jako duplikat stackoverflow.com/questions/9272/… , jako nowe pytanie (Jakie jest odpowiednik polecenia p4 do czegoś takiego jak git / hg / bzr / svn status? (Podpowiedź: nie p4 status) i sam odpowiedziałem. Lepiej witany
Krazy Glew

Oba p4 reconcilei p4 statussą powolne jak diabli, a git statuswykonywanie trwało od 1 do 3 sekund.
zwcloud

Odpowiedzi:


81

EDYCJA: Użyj p4 statusteraz. Nie ma już potrzeby skakania przez obręcze. Zobacz @ ColonelPanic za odpowiedź .

W wersji P4V ze stycznia 2009 r. Można kliknąć prawym przyciskiem myszy dowolny folder w drzewie obszaru roboczego i kliknąć opcję „uzgodnij pracę offline ...”

Spowoduje to niewielkie przetworzenie, a następnie wyświetlenie podzielonego widoku drzewa plików, które nie zostały wyewidencjonowane, ale różnią się od wersji składu lub w ogóle nie zostały wpisane. Może być nawet kilka innych kategorii, które przywołuje.

Możesz kliknąć prawym przyciskiem myszy pliki w tym widoku i wyewidencjonować je, dodać, a nawet cofnąć.

To bardzo przydatne narzędzie, które kilka razy uratowało mi tyłek.

EDYCJA: ach pytanie zadawane konkretnie w sprawie skryptów, ale zostawię tę odpowiedź na wszelki wypadek.


Dodano rozwiązanie PowerShell w tym pytaniu: stackoverflow.com/questions/3217152/ ...
tenpn

Czy to porównuje każdy plik z wersją w repozytorium? Mam duże repozytorium i wolne połączenie (podczas pracy z domu). To może zająć wieczność!
gdw2

Nie sądzę, że jest to pełna różnica, ale nie jest szybka.
tenpn

10
Och, na litość boską !!!! p4 statusnie tylko ZNAJDŹ nieśledzone pliki, w rzeczywistości ZACZYNA JE ŚLEDZIĆ. To p4 statusznaczy nie jest zapytaniem tylko do odczytu, jak można by podejrzewać po nazwie, ale w rzeczywistości jest to polecenie, które zmienia rzeczy - nie pliki obszaru roboczego. To NIE jest to, co powinno robić polecenie statusu, a NIE to, co svn statusrobi. Najbliższą rzeczą, jaką mogę znaleźć, svn statusjest p4 reconcile -na- -a powiedzieć „pliki, które powinny zostać dodane”, -n powiedzieć „właściwie niczego nie zmieniaj”. /// Pierwotnie powiedziałem coś znacznie mocniejszego.
Krazy Glew

1
p4 statusjest w zasadzie synonimem p4 reconcile -n. Może biegałeś, p4 status -Aco jest synonimem p4 reconcile?
Samwise

50

W systemie Linux lub jeśli masz zainstalowane narzędzia gnu w systemie Windows:

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

Spowoduje to wyświetlenie komunikatu o błędzie dla każdego nierozliczonego pliku. Jeśli chcesz przechwycić ten wynik:

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

1
Przekierowanie stderr na stdout pozwoli na wykonanie dodatkowego filtrowania lub innych operacji. Na przykład, aby wyświetlić przewijalną listę plików Java: znajdź. -type f -print0 | xargs -0 p4 fstat 2> & 1> / dev / null | grep '\ .java' | mniej
Jon Nadal

2
Trwa to niesamowicie długo na moim 60-kilobajtowym obszarze roboczym. Napisałem skrypt w Pythonie, który wykonuje tę samą pracę w mniej niż 10 sekund: p5 . Obsługuje również .p4ignorei może wyświetlać podgląd i automatycznie edytować niezatwierdzone / zmienione / usunięte pliki.
hamstergene

@hamstergene, bardzo ładnie!
Mark Harrison,

Napisałem mały skrypt, który robi dokładnie to, jeśli ktoś jest zainteresowany (w tym argument dir, argument max depth i wyjście na stdout).
Arnon Zilca

Dzięki; Znalazłem to przydatne! Zauważ, że to nie obsługuje dowiązań symbolicznych ( find . -type l) i daje mylące dane wyjściowe dla plików P4 dodanych siłą, ponieważ zawierają one znaki @lub %. Jednak takie pliki są w mniejszości, więc ręczne przeglądanie tych skrajnych przypadków będzie działać w większości przypadków.
CJBS,

19

W systemie Unix:

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

Spowoduje to wydrukowanie listy plików, które nie zostały dodane w Twoim kliencie ani w składzie Perforce. Użyłem ! -name '*~'wykluczyć pliki kończące się ~.


12

Ach, jeden z klasyków Perforce :) Tak, to naprawdę do niczego, że NADAL nie ma na to łatwego sposobu wbudowanego w domyślne polecenia.

Najłatwiej jest uruchomić polecenie, aby znaleźć wszystkie pliki w katalogu głównym klienta, a następnie spróbować dodać je do składu. Otrzymasz listę zmian zawierającą wszystkie nowe pliki, a istniejące pliki będą ignorowane.

Np. Dir / s / b / AD | p4 -x - dodaj

(użyj 'find. -type f -print' z wiersza poleceń nix).

Jeśli chcesz mieć fizyczną listę (w konsoli lub pliku), możesz potokować wyniki porównania (lub dodać, jeśli chcesz je również umieścić na liście zmian).

Jeśli uruchamiasz to w P4Win, możesz użyć $ r do zastąpienia katalogu głównego klienta w bieżącym obszarze roboczym.


11

Czy istnieje odpowiednik svn statuslub git status?

Tak, ALE .

Począwszy od wersji Perforce 2012.1 istnieje polecenie p4 statusoraz w P4V „uzgodnij pracę offline”. Jednak oba są bardzo powolne. Aby wykluczyć nieistotne pliki, musisz napisać p4ignore.txtplik na https://stackoverflow.com/a/13126496/284795


1
Od p4 statuswydania 2012.1 wprowadzono kilka ulepszeń wydajności . Jeśli trzymałeś się z daleka z p4 statuspowodu problemów z wydajnością, warto przetestować go ponownie, aby zobaczyć, jak zachowuje się teraz.
Bryan Pendleton,

7

Czuję potrzebę dodania odpowiedzi, ponieważ zaakceptowana odpowiedź i niektóre inne mają coś, co uważam za znaczący problem: nie rozumieją różnicy między poleceniem zapytania tylko do odczytu a poleceniem, które wprowadza zmiany.

Nie oczekuję żadnego uznania za tę odpowiedź, ale mam nadzieję, że pomoże to innym uniknąć marnowania czasu i popełniania błędów, wykonując zaakceptowaną, ale niepoprawną odpowiedź IMHO.

--- + KRÓTKI

Prawdopodobnie najwygodniejszym sposobem znajdowania wszystkich nieśledzonych plików w obszarze roboczym koniecznym jest p4 reconcile -na.

-a mówi „daj mi pliki, których nie ma w repozytorium, czyli takie, które powinny zostać dodane”.

-nmówi „nie wprowadzaj żadnych zmian” - czyli próba uruchomienia. (Chociaż w wiadomościach może być napisane „otwarte do dodania”, w myślach musisz zinterpretować to jako „zostanie otwarte do dodania, jeśli nie -n”)

Prawdopodobnie najwygodniejszym sposobem znajdowania wszystkich zmian lokalnych dokonanych w trybie offline - nie tylko plików, które mogą wymagać dodania, ale także plików, które mogą wymagać usunięcia lub które zostały zmienione bez otwierania do edycji za pomocą programu p4 edit, jestp4 reconcile -n .

Kilka odpowiedzi zawierało scenariusze, często z udziałem p4 fstat. Chociaż nie zweryfikowałem wszystkich tych skryptów, często używam podobnych skryptów, aby nadrobić braki poleceń koniecznych, takich jakp4 reconcile -n Perforce, - np. Często stwierdzam, że wolę ścieżki lokalne niż ścieżki magazynu Perforce lub ścieżki obszaru roboczego.

--- + OSTRZEŻENIE

p4 status NIE jest odpowiednikiem poleceń stanu w innych systemach kontroli wersji.

p4 statusNIE jest zapytaniem tylko do odczytu. p4 statusfaktycznie znajduje ten sam rodzaj zmian, co p4 reconcilerobi, i dodaje je do repozytorium. p4 statusnie wydaje się mieć -nopcji uruchomienia na sucho, jakp4 reconcile ma.

Jeśli tak p4 status, spójrz na pliki i pomyśl „Och, nie potrzebuję ich”. Będziesz p4 revertje musiał, jeśli chcesz kontynuować edycję w tym samym obszarze roboczym. W przeciwnym razie zmiany p4 statusdodane do zestawu zmian zostaną sprawdzone następnym razem.

Wydaje się, że jest niewiele lub nie ma powodu do używania p4 statuszamiast p4 reconcile -n, z wyjątkiem niektórych szczegółów dotyczących lokalnego obszaru roboczego w porównaniu z nazwą ścieżki magazynu.

Mogę sobie tylko wyobrazić, że ktokolwiek wybrał „status” dla polecenia nie tylko do odczytu, miał ograniczoną znajomość języka angielskiego i innych narzędzi kontroli wersji.

--- + P4VGUI

W graficznym interfejsie użytkownika p4vpolecenie uzgadniania znajduje lokalne zmiany, które mogą wymagać dodania, usunięcia lub otwarcia do edycji. Na szczęście nie dodaje ich domyślnie do listy zmian; ale nadal możesz chcieć uważać, aby zamknąć okno uzgadniania po sprawdzeniu go, jeśli nie chcesz zatwierdzać zmian.


Status p4 nie wydaje się dodawać plików. wygląda na to, że działa jak i jest udokumentowane jako „uzgodnij -n”. czy na pewno to zmienia rzeczy?
kdubs

4

W moim narzędziu używam następującego narzędzia, które tworzy kopie zapasowe wszystkich plików w obszarze roboczym, które różnią się od repozytorium (dla systemu Windows). Obsługuje kilka dziwnych przypadków, których Perforce nie lubi, takich jak osadzone spacje, gwiazdki, procenty i znaki hash:

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 ” wyświetla listę wszystkich plików znajdujących się w tym folderze lub poniżej tego folderu ( / S ) w „gołym” formacie ( / B ), z wyłączeniem katalogów (/ AD ). " Sed " zmienia niebezpieczne znaki do ich postaci " % xx " (a la HTML), a polecenie " p4 have " sprawdza tę listę (" -x- ") pod kątem tego, czy serwer odrzuca wszystko o plikach, które faktycznie lokalizuje w repozytorium („ 1> NUL: ”). Rezultatem jest kilka linii, takich jak:

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

Gotowe!


To świetne rozwiązanie, które nadal działa z wersją P4 2015.1
Rian Sanderson

bardzo szybki! find / xargs zabrakło pamięci i działa wolno. Przywołaj podwójne% podczas dodawania do pliku .bat.
kevinf

4

Alternatywnie z P4Win, użyj opcji "Pliki lokalne nie są w magazynie" na lewym panelu widoku.

Nie używam dużo P4V, ale myślę, że odpowiednikiem jest wybranie "Ukryj lokalne pliki obszaru roboczego" z listy rozwijanej filtru na karcie widoku obszaru roboczego. P4 pomoc fstat

W P4V 2015.1 znajdziesz te opcje pod przyciskiem filtru w ten sposób: wprowadź opis obrazu tutaj


To pokazuje tylko pliki w bieżącym katalogu, niestety :(
JP P.,

2

Quick 'n Dirty: W p4v kliknij prawym przyciskiem myszy folder, o którym mowa, i dodaj wszystkie pliki znajdujące się pod nim do nowej listy zmian. Lista zmian będzie teraz zawierać wszystkie pliki, które obecnie nie są częścią składu.


1

Następujące polecenia generują wyjście podobne do statusu, ale żadne nie jest w pełni równoważne z svn statuslub git status, dostarczając jednowierszowe podsumowanie statusu każdego pliku:

  • p4 status
  • p4 opened
  • p4 diff -ds

0

Nie mam wystarczającej liczby punktów reputacji do komentowania, ale rozwiązanie Rossa zawiera również listę plików, które można dodać. Prawdopodobnie nie chcesz używać jego odpowiedzi do czyszczenia swojego obszaru roboczego.

Następujące zastosowania p4 fstat(dzięki Mark Harrison) zamiast p4 havei wymienia pliki, których nie ma w magazynie i nie są otwarte do dodania.

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

Metoda szybka, ale mało ortodoksyjna. Jeśli baza kodu nie dodaje nowych plików / nie zmienia widoku zbyt często, możesz utworzyć lokalne repozytorium „git” poza kasą. Od czystej synchronizacji perforce, git init, dodawaj i zatwierdzaj wszystkie pliki lokalnie. Status Git jest szybki i pokaże pliki, które nie zostały wcześniej zatwierdzone.


0

p4 fstatPolecenie pozwala sprawdzić, czy plik istnieje w obszarze roboczym, połączyć z findzlokalizować pliki, aby sprawdzić, jak w poniższym przykładzie Perl:

// 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;

Lub możesz użyć p4 reconcile -n -m ...

Jeśli jest „otwarty do usunięcia”, oznacza to, że został usunięty z obszaru roboczego. Zauważ, że powyższe polecenie działa w trybie podglądu ( -n).


1
Proszę nie wrzucać po prostu kodu bez żadnego wyjaśnienia jako odpowiedzi, ale dodać wyjaśnienie, które pomoże OP w zrozumieniu kodu i nauczeniu się czegoś. :)
Markus


0

To polecenie może dać ci listę plików, które należy dodać, edytować lub usunąć:
p4 status -aed ...
możesz ich również używać osobno
p4 status -a ...
p4 status -e ...
p4 status -d ...


-1

W P4V, w pozycji menu „Widok” wybierz „Pliki w folderze”, co spowoduje wyświetlenie nowej karty w prawym panelu. Po prawej stronie zakładek znajduje się mała ikona, która wyświetla okno „Pliki w folderze” z 2 ikonami. Wybierz lewą ikonę, która wygląda jak lejek, a zobaczysz kilka opcji. Wybierz opcję „Pokaż elementy, których nie ma w magazynie”, a wszystkie pliki w folderze zostaną wyświetlone. Następnie kliknij prawym przyciskiem myszy plik, który chcesz dodać i wybierz „Oznacz do dodania ...”. Możesz to sprawdzić w zakładce „Oczekujące”. Po prostu prześlij jak zwykle (Ctrl + S).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.