Wie finde ich nicht verfolgte Dateien in einem Perforce-Baum?(analog zum SVN-Status)

StackOverflow https://stackoverflow.com/questions/9272

  •  08-06-2019
  •  | 
  •  

Frage

Hat jemand ein Skript oder einen Alias, den er nicht verfolgen kann (wirklich:(nicht hinzugefügte) Dateien in einem Perforce-Baum?

BEARBEITEN:Ich habe die akzeptierte Antwort zu dieser Frage aktualisiert, da P4V anscheinend in der Version vom Januar 2009 Unterstützung dafür hinzugefügt hat.

War es hilfreich?

Lösung

BEARBEITEN: Benutzen Sie bitte p4 status Jetzt.Es ist nicht mehr nötig, durch Reifen zu springen.Siehe @ColonelPanic's Antwort.

In der P4V-Version vom Januar 2009 können Sie mit der rechten Maustaste auf einen beliebigen Ordner in Ihrer Arbeitsbereichsstruktur klicken und auf „Offline-Arbeit abstimmen …“ klicken.

Dadurch wird eine kleine Verarbeitung durchgeführt und dann wird eine geteilte Baumansicht der Dateien angezeigt, die nicht ausgecheckt sind, aber Unterschiede zur Depotversion aufweisen oder überhaupt nicht eingecheckt sind.Möglicherweise werden sogar noch ein paar andere Kategorien angezeigt.

Sie können in dieser Ansicht mit der rechten Maustaste auf Dateien klicken und sie auschecken, hinzufügen oder sogar wiederherstellen.

Es ist ein sehr praktisches Werkzeug, das mir schon ein paar Mal den Arsch gerettet hat.

BEARBEITEN:Ah, die Frage betrifft speziell Skripte, aber ich werde diese Antwort für alle Fälle hier belassen.

Andere Tipps

Unter Linux oder wenn Sie GNU-Tools unter Windows installiert haben:

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

Dadurch wird für jede nicht erfasste Datei eine Fehlermeldung angezeigt.Wenn Sie diese Ausgabe erfassen möchten:

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

Unter Unix:

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

Dadurch wird eine Liste der Dateien ausgedruckt, die Ihrem Client oder dem Perforce-Depot nicht hinzugefügt wurden.Ich habe verwendet ! -name '*~' um Dateien auszuschließen, die mit ~ enden.

Ahh, einer der Perforce-Klassiker :) Ja, es ist wirklich schade, dass es IMMER NOCH keine einfache Möglichkeit dafür gibt, die in die Standardbefehle integriert ist.

Am einfachsten ist es, einen Befehl auszuführen, um alle Dateien im Stammverzeichnis Ihres Clients zu finden, und dann zu versuchen, sie dem Depot hinzuzufügen.Am Ende erhalten Sie eine Änderungsliste aller neuen Dateien und vorhandene Dateien werden ignoriert.

ZB Dir /s /b /ad | p4 -x - hinzufügen

(verwenden Sie 'find .-type f -print' von einer Nix-Befehlszeile aus).

Wenn Sie eine physische Liste (in der Konsole oder Datei) wünschen, können Sie die Ergebnisse eines Diff weiterleiten (oder hinzufügen, wenn Sie sie auch in einer Änderungsliste haben möchten).

Wenn Sie dies in P4Win ausführen, können Sie $r verwenden, um das Client-Stammverzeichnis des aktuellen Arbeitsbereichs zu ersetzen.

Gibt es ein Analogon von svn status oder git status?

Ja aber.

Ab der Perforce-Version 2012.1 gibt es den Befehl p4 status und in P4V „Offline-Arbeit abgleichen“.Allerdings sind sie beide sehr langsam.Um irrelevante Dateien auszuschließen, müssen Sie eine schreiben p4ignore.txt Datei pro https://stackoverflow.com/a/13126496/284795

Ich fühle mich gezwungen, eine Antwort hinzuzufügen, da die akzeptierte Antwort und einige der anderen meiner Meinung nach ein erhebliches Problem darstellen:Sie verstehen den Unterschied zwischen einem schreibgeschützten Abfragebefehl und einem Befehl, der Änderungen vornimmt, nicht.

Ich erwarte keine Anerkennung für diese Antwort, aber ich hoffe, dass sie anderen hilft, Zeitverschwendung und Fehler zu vermeiden, indem sie der akzeptierten, aber meiner Meinung nach falschen Antwort folgen.

---+ KURZ

Der wahrscheinlich bequemste Weg, alle nicht verfolgten Dateien in einem Perforce-Arbeitsbereich zu finden, ist p4 reconcile -na.

-a sagt: „Geben Sie mir Dateien, die nicht im Repository sind, d. h.das sollte hinzugefügt werden".

-n sagt „keine Änderungen vornehmen“ – d.h.ein Trockenlauf.(Obwohl in den Nachrichten möglicherweise „zum Hinzufügen geöffnet“ steht, müssen Sie das im Geiste so interpretieren, dass „zum Hinzufügen geöffnet wäre, wenn nicht -n“.)

Wahrscheinlich die bequemste Möglichkeit, alle lokalen Änderungen zu finden, die offline vorgenommen wurden – nicht nur Dateien, die möglicherweise hinzugefügt werden müssen, sondern auch Dateien, die möglicherweise gelöscht werden müssen oder die geändert wurden, ohne zur Bearbeitung geöffnet zu werden p4 edit, Ist p4 reconcile -n.

Mehrere Antworten lieferten Skripte, oft mit p4 fstat.Obwohl ich nicht alle dieser Skripte überprüft habe, verwende ich oft ähnliche Skripte, um die Mängel von Perforce-Befehlen auszugleichen, z p4 reconcile -n - z.B.Oft stelle ich fest, dass ich lokale Pfade anstelle von Perforce-Depotpfaden oder Arbeitsbereichspfaden möchte.

---+ WARNUNG

p4 status ist NICHT das Gegenstück zu den Statusbefehlen anderer Versionskontrollsysteme.

p4 status ist KEINE schreibgeschützte Abfrage. p4 status findet tatsächlich die gleichen Änderungen p4 reconcile tut dies und fügt sie dem Repository hinzu. p4 status scheint keine zu haben -n Trockenlaufoption wie p4 reconcile tut.

Wenn Sie tun p4 status, Schauen Sie sich die Dateien an und denken Sie: „Oh, die brauche ich nicht“, dann müssen Sie es tun p4 revert sie, wenn Sie die Bearbeitung im selben Arbeitsbereich fortsetzen möchten.Sonst ändert sich das p4 status Die zu Ihrem Änderungssatz hinzugefügten Änderungen werden beim nächsten Mal überprüft.

Es scheint kaum oder gar keinen Grund für die Verwendung zu geben p4 status statt p4 reconcile -n, mit Ausnahme einiger Details zum lokalen Arbeitsbereich vs. Depot-Pfadnamen.

Ich kann mir nur vorstellen, dass derjenige, der „Status“ für einen nicht schreibgeschützten Befehl wählte, nur begrenzte Kenntnisse der englischen Sprache und anderer Tools zur Versionskontrolle hatte.

---+ P4V GUI

In der GUI p4v, findet der Reconcile-Befehl lokale Änderungen, die möglicherweise hinzugefügt, gelöscht oder zur Bearbeitung geöffnet werden müssen.Glücklicherweise werden sie nicht standardmäßig zu einer Änderungsliste hinzugefügt.Sie sollten jedoch dennoch darauf achten, das Abgleichsfenster nach der Überprüfung zu schließen, wenn Sie die Änderungen nicht übernehmen möchten.

Ich verwende Folgendes in meinem Tool, das alle Dateien im Arbeitsbereich sichert, die sich vom Repository unterscheiden (für Windows).Es behandelt einige seltsame Fälle, die Perforce nicht besonders mag, wie eingebettete Leerzeichen, Sterne, Prozente und Hashmarks:

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" listet alle Dateien in oder unterhalb dieses Ordners auf (/S) im „nackten“ Format (/B) ohne Verzeichnisse (/ANZEIGE).Der "sed„wandelt gefährliche Charaktere in ihre eigenen um“%xx" Formular (a la HTML) und das "p4 haben" Befehl überprüft diese Liste ("-X-") dagegen, dass der Server alle Dateien verwirft, die er tatsächlich im Repository findet ("1>NUL:").Das Ergebnis ist eine Reihe von Zeilen wie:

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

Et voilà!

Alternativ können Sie in P4Win die Option „Lokale Dateien nicht im Depot“ im linken Ansichtsfenster verwenden.

Ich verwende P4V nicht oft, aber ich denke, das Äquivalent wäre die Auswahl von „Lokale Workspace-Dateien ausblenden“ im Filter-Dropdown der Workspace-Ansicht tab.p4 help fstat

In P4V 2015.1 finden Sie diese Optionen unter der Filterschaltfläche wie folgt:enter image description here

Quick'n Dirty:Klicken Sie in p4v mit der rechten Maustaste auf den betreffenden Ordner und fügen Sie alle Dateien darunter zu einer neuen Änderungsliste hinzu.Die Änderungsliste enthält nun alle Dateien, die derzeit nicht Teil des Depots sind.

Die folgenden Befehle erzeugen eine statusähnliche Ausgabe, aber keiner ist ganz gleichwertig mit svn status oder git status, mit einer einzeiligen Zusammenfassung des Status jeder Datei:

  • p4 status
  • p4 opened
  • p4 diff -ds

Ich habe nicht genügend Reputationspunkte für einen Kommentar, aber die Lösung von Ross listet auch Dateien auf, die zum Hinzufügen geöffnet sind.Das tun Sie wahrscheinlich nicht Ich möchte seine Antwort verwenden, um Ihren Arbeitsbereich zu reinigen.

Die folgenden Verwendungen p4 fstat (danke Mark Harrison) statt p4 have, und listet die Dateien auf, die sich nicht im Depot befinden Und sind nicht zum Hinzufügen geöffnet.

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

Schnelle Methode, aber wenig orthodox.Wenn die Codebasis nicht allzu oft neue Dateien hinzufügt/die Ansicht ändert, können Sie aus Ihrem Checkout heraus ein lokales „Git“-Repository erstellen.Von einer sauberen notgedrungenen Synchronisierung, Git-Init, Hinzufügen und Festschreiben aller Dateien lokal.Der Git-Status ist schnell und zeigt Dateien an, die zuvor nicht festgeschrieben wurden.

Der p4 fstat Mit dem Befehl können Sie testen, ob eine Datei im Arbeitsbereich vorhanden ist, und mit kombinieren find um zu überprüfende Dateien zu finden, wie im folgenden Perl-Beispiel:

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

Oder Sie können verwenden p4 reconcile -n -m ...

Wenn es zum Löschen geöffnet ist, wurde es aus dem Arbeitsbereich entfernt.Beachten Sie, dass der obige Befehl im Vorschaumodus ausgeführt wird (-n).

Ich brauchte etwas, das entweder unter Linux, Mac oder Windows funktioniert.Also habe ich ein Python-Skript dafür geschrieben.Die Grundidee besteht darin, Dateien zu durchlaufen und auszuführen p4 fstat auf jeder.(Abhängigkeiten und tmp-Ordner werden natürlich ignoriert)

Du findest es hier: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9

Wählen Sie in P4V unter dem Menüpunkt „Ansicht“ die Option „Dateien im Ordner“, wodurch im rechten Bereich eine neue Registerkarte angezeigt wird.Ganz rechts neben den Registerkarten befindet sich ein kleines Symbol, das ein Fenster namens „Dateien im Ordner“ mit zwei Symbolen öffnet.Wählen Sie das linke Symbol aus, das wie ein Trichter aussieht, und Sie sehen mehrere Optionen.Wählen Sie „Elemente anzeigen, die sich nicht im Depot befinden“ und alle Dateien im Ordner werden angezeigt.Klicken Sie dann einfach mit der rechten Maustaste auf die Datei, die Sie hinzufügen möchten, und wählen Sie „Zum Hinzufügen markieren…“.Sie können die Verfügbarkeit auf der Registerkarte „Ausstehend“ überprüfen.Senden Sie es einfach wie gewohnt ab (Strg+S).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top