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

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

EDIT: zaktualizowałem zaakceptowaną odpowiedź na ten temat, ponieważ wygląda na to, że P4V dodało wsparcie dla tego w wydaniu ze stycznia 2009.

Author: Colonel Panic, 2008-08-12

16 answers

EDIT: Proszę użyć p4 status teraz. Nie ma już potrzeby skakania przez obręcze. Zobacz odpowiedź @ ColonelPanic .

W wersji P4V z stycznia 2009, możesz kliknąć prawym przyciskiem myszy dowolny folder w drzewie obszaru roboczego i kliknąć " pogódź pracę offline..."

Spowoduje to trochę przetworzenia, a następnie wyświetlenie widoku podzielonego drzewa plików, które nie są pobierane, ale różnią się od wersji depot lub w ogóle nie są pobierane. Może być nawet kilka innych kategorii przywołuje.

Możesz kliknąć prawym przyciskiem myszy pliki w tym widoku i sprawdzić je, dodać lub nawet przywrócić.

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

EDIT: ah pytanie dotyczyło konkretnie skryptów, ale na wszelki wypadek tę odpowiedź zostawię tutaj.

 82
Author: tenpn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:13

Na Linuksie, lub jeśli masz gnu-tools zainstalowane na windows:

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

Wyświetli komunikat o błędzie dla każdego nierozliczonego pliku. Jeśli chcesz przechwycić to wyjście:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile
 50
Author: Mark Harrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-12 21:56:45

Pod Unixem:

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 są dodawane w Twoim kliencie lub magazynie Perforce. Użyłem ! -name '*~', aby wykluczyć pliki kończące się ~.

 19
Author: ahu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 06:55:08

Ahh, jeden z klasyków Perforce:) tak, to naprawdę do bani, że nadal nie ma łatwego sposobu na to wbudowane w Domyślne polecenia.

Najprostszym sposobem jest uruchomienie polecenia, aby znaleźć wszystkie pliki w katalogu głównym klienta, a następnie spróbować dodać je do magazynu. Skończysz z listą zmian wszystkich nowych plików, a istniejące pliki są ignorowane.

E. g dir /s /b | A-D / p4-x - add

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

If you want a physical lista (w konsoli lub Pliku) następnie możesz przesyłać wyniki różnic (lub dodawać je, jeśli chcesz również w liście zmian).

Jeśli używasz tego w P4Win, możesz użyć $r, aby zastąpić klienta głównego bieżącej przestrzeni roboczej.

 12
Author: Andrew Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-12 21:55:08

Czy istnieje analogia svn status LUB git status?

Tak, ale .

Od wersji Perforce 2012.1, istnieje polecenie p4 status i w P4V "reconcile offline work". Jednak obie są bardzo powolne. Aby wykluczyć nieistotne pliki, musisz napisać p4ignore.txt plik na https://stackoverflow.com/a/13126496/284795

 11
Author: Colonel Panic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:29:49

Czuję się zmuszony do dodania odpowiedzi, ponieważ przyjęta odpowiedź, a niektóre z innych, mają to, 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ę uznania za tę odpowiedź, ale mam nadzieję, że pomoże ona innym uniknąć marnowania czasu i popełniania błędów, stosując się do przyjętej, ale IMHO błędnej odpowiedzi.

---+ krótki

Prawdopodobnie najbardziej wygodnym sposobem znajdowania wszystkich nie śledzonych plików w przestrzeni roboczej perforce jest p4 reconcile -na.

-a mówi "podaj mi pliki, których nie ma w repozytorium, tzn. które powinny być dodane".

-n mówi "nie wprowadzaj zmian" - tj. suchy bieg. (Chociaż wiadomości mogą mówić "otwarte dla add", mentalnie musisz zinterpretować to jako "zostanie otwarte dla add, jeśli nie-N")

Prawdopodobnie najwygodniejszy sposób, aby znaleźć wszystkie lokalne zmiany dokonane w trybie offline - nie tylko pliki, które mogą wymagać dodania, ale również pliki, które mogą wymagać usunięcia lub które zostały zmienione bez otwierania do edycji przez p4 edit, to p4 reconcile -n.

Kilka odpowiedzi dostarczyło skryptów, często zawierających p4 fstat. Chociaż nie zweryfikowałem wszystkich tych skryptów, często używam podobnych skryptów, aby nadrobić braki poleceń perforce, takich jak p4 reconcile -n - np. często stwierdzam, że chcę ścieżek lokalnych, a nie ścieżek Perforce depot czy ścieżek przestrzeni roboczej.

---+ WARNING

p4 status nie jest odpowiednik poleceń statusu w innych systemach kontroli wersji.

p4 status nie jest zapytaniem tylko do odczytu. p4 status znajduje te same zmiany, co p4 reconcile i dodaje je do repozytorium. p4 status nie wydaje się mieć -n opcji suchego biegu jak p4 reconcile robi.

Jeśli zrobisz p4 status, spójrz na pliki i pomyśl "Och, nie potrzebuję ich", wtedy będziesz musiał p4 revert je, jeśli chcesz kontynuować edycję w tym samym obszarze roboczym. Albo zmiany, które p4 status dodał do zestaw zmian zostanie sprawdzony następnym razem.

Wydaje się, że nie ma lub nie ma powodu, aby używać p4 status zamiast p4 reconcile -n, z wyjątkiem pewnych szczegółów lokalnego obszaru roboczego vs nazwy depot.

Mogę sobie tylko wyobrazić, że ktokolwiek wybrał' status ' dla polecenia nie tylko do odczytu, miał ograniczone polecenie języka angielskiego i innych narzędzi kontroli wersji.

---+ P4V GUI

W GUI p4v polecenie reconcile znajduje lokalne zmiany, które mogą wymagać dodane, usunięte lub otwarte do edycji. Na szczęście nie dodaje ich do listy zmian domyślnie; ale nadal możesz być ostrożny, aby zamknąć okno reconcile po sprawdzeniu go, jeśli nie chcesz zatwierdzać zmian.

 7
Author: Krazy Glew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-08 22:39:40

Używam poniższego narzędzia, które tworzy kopie zapasowe wszystkich plików w przestrzeni roboczej, które różnią się od repozytorium (dla systemu Windows). Obsługuje kilka dziwnych przypadków, które Perforce nie lubi zbytnio, takich jak osadzone spacje, gwiazdki, procenty i hashmarks: [3]}

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/A-D" wyświetla wszystkie pliki w tym folderze lub pod nim ( /s) w formacie "gołym" ( / B) z wyłączeniem katalogów (/A-D). "sed " zmienia niebezpieczne znaki na ich postać "%xx " (a la HTML), a POLECENIE "P4 have" sprawdza tę listę ("-x-") przeciwko serwerowi odrzucającemu cokolwiek o plikach, które faktycznie znajduje 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.
Et voilà!
 4
Author: Ross Patterson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-08 18:59:57

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

Nie używam często P4V, ale myślę, że odpowiednikiem jest wybranie "Ukryj lokalne pliki przestrzeni roboczej" w rozwijanym filtrze karty Widok przestrzeni roboczej.P4 help fstat

W P4V 2015.1 znajdziesz te opcje pod przyciskiem filtrowania w następujący sposób: Tutaj wpisz opis obrazka

 4
Author: Greg Whitfield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-07 01:11:37

Quick ' N Dirty: w p4v kliknij prawym przyciskiem myszy na danym folderze i dodaj wszystkie pliki pod nim do nowej listy zmian. Lista zmian będzie teraz zawierać wszystkie pliki, które nie są obecnie częścią magazynu.

 2
Author: gdw2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-23 18:11:26

Poniższe polecenia generują stan podobny do wyjścia, ale żadne z nich nie jest równoważne svn status lub git status, zapewniając jednolinijkowe podsumowanie stanu KAŻDEGO pliku:

  • p4 status
  • p4 opened
  • p4 diff -ds
 1
Author: Rhubbarb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-18 10:22:18

Nie mam wystarczającej ilości punktów reputacji do komentowania, ale rozwiązanie Rossa wymienia również pliki, które są otwarte do dodania. Prawdopodobnie nie chcesz używać jego odpowiedzi do czyszczenia przestrzeni roboczej.

Poniższe używa p4 fstat (dzięki Markowi Harrisonowi) zamiast p4 have i wymienia pliki, które nie znajdują się 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
Author: Jac Goudsmit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-20 16:19:17

Szybka metoda, ale mało ortodoksyjna. Jeśli baza kodowa nie dodaje zbyt często nowych plików / zmienia Widok, możesz utworzyć lokalne repozytorium ' git ' z kasy. Z czystej synchronizacji perforce, Git init, Dodaj i zatwierdź wszystkie pliki lokalnie. Git status jest szybki i wyświetli pliki, które nie zostały wcześniej zatwierdzone.

 0
Author: Kevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-19 15:06:04

Polecenie p4 fstat pozwala sprawdzić, czy plik istnieje w obszarze roboczym, połączyć się z find, aby znaleźć pliki do sprawdzenia, jak w poniższym przykładzie Perla:

// 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", to został usunięty z obszaru roboczego. Zauważ, że powyższe polecenie działa w trybie podglądu (-n).

 0
Author: beena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-09 19:26:53

Potrzebowałem czegoś, co będzie działać w Linuksie, Macu lub Windows. Napisałem do tego skrypt w Pythonie. Podstawową ideą jest iteracja plików i wykonanie p4 fstat Na każdym z nich. (oczywiście ignorując zależności i foldery tmp)

Znajdziesz go tutaj: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9

 0
Author: givanse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-02 19:40:16

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

 0
Author: Hazem Ramadan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-26 02:04:57

W P4V, w menu "Widok" wybierz "pliki w folderze", co spowoduje wyświetlenie nowej karty w prawym okienku. Po prawej stronie kart znajduje się mała ikona, która wyświetla okno o nazwie "pliki w folderze" z 2 ikonami. Wybierz lewą ikonę, która wygląda jak lejek, a zobaczysz kilka opcji. Wybierz "Pokaż elementy nie w magazynie", a pojawią się wszystkie pliki w folderze. Następnie kliknij prawym przyciskiem myszy na pliku, który chcesz dodać i wybierz " Zaznacz dla Dodaj...". Możesz sprawdzić, czy jest tam w zakładka "oczekujące". Po prostu prześlij jak zwykle (Ctrl+S).

 -1
Author: Engineer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-19 22:07:42