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.
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.
p4 status
nie tylko ZNAJDŹ nieśledzone pliki, ale faktycznie ROZPOCZYNA JE ŚLEDZENIE. To p4 status
znaczy 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 status
robi. Najbliższą rzeczą, jaką mogę znaleźć, svn status
jest 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.
p4 status
) i sam odpowiedziałem. Lepiej witany
p4 reconcile
i p4 status
są powolne jak diabli, a git status
wykonywanie trwało od 1 do 3 sekund.
Odpowiedzi:
EDYCJA: Użyj p4 status
teraz. 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.
p4 status
nie tylko ZNAJDŹ nieśledzone pliki, w rzeczywistości ZACZYNA JE ŚLEDZIĆ. To p4 status
znaczy 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 status
robi. Najbliższą rzeczą, jaką mogę znaleźć, svn status
jest 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.
p4 status
jest w zasadzie synonimem p4 reconcile -n
. Może biegałeś, p4 status -A
co jest synonimem p4 reconcile
?
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
.p4ignore
i może wyświetlać podgląd i automatycznie edytować niezatwierdzone / zmienione / usunięte pliki.
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.
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.
Czy istnieje odpowiednik
svn status
lubgit status
?
Tak, ALE .
Począwszy od wersji Perforce 2012.1 istnieje polecenie p4 status
oraz w P4V „uzgodnij pracę offline”. Jednak oba są bardzo powolne. Aby wykluczyć nieistotne pliki, musisz napisać p4ignore.txt
plik na https://stackoverflow.com/a/13126496/284795
p4 status
wydania 2012.1 wprowadzono kilka ulepszeń wydajności . Jeśli trzymałeś się z daleka z p4 status
powodu problemów z wydajnością, warto przetestować go ponownie, aby zobaczyć, jak zachowuje się teraz.
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”.
-n
mó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 status
NIE jest zapytaniem tylko do odczytu. p4 status
faktycznie znajduje ten sam rodzaj zmian, co p4 reconcile
robi, i dodaje je do repozytorium. p4 status
nie wydaje się mieć -n
opcji 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 revert
je musiał, jeśli chcesz kontynuować edycję w tym samym obszarze roboczym. W przeciwnym razie zmiany p4 status
dodane do zestawu zmian zostaną sprawdzone następnym razem.
Wydaje się, że jest niewiele lub nie ma powodu do używania p4 status
zamiast 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.
--- + P4V
GUI
W graficznym interfejsie użytkownika p4v
polecenie 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.
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!
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:
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 have
i 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
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.
p4 fstat
Polecenie pozwala sprawdzić, czy plik istnieje w obszarze roboczym, połączyć z find
zlokalizować 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
).
Potrzebowałem czegoś, co działałoby na Linuksie, Macu lub Windowsie. Więc napisałem dla niego 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
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 ...
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).