Hat jemand ein Skript oder einen Alias, um nicht verfolgte (wirklich: nicht hinzugefügte) Dateien in einem Perforce-Baum zu finden?
BEARBEITEN: Ich habe die akzeptierte Antwort auf diese Frage aktualisiert, da P4V in der Version vom Januar 2009 anscheinend Unterstützung dafür hinzugefügt hat.
version-control
perforce
David Joyner
quelle
quelle
p4 status
FINDET nicht nur nicht verfolgte Dateien, sondern BEGINNT tatsächlich, sie zu verfolgen. Das heißt, esp4 status
handelt sich nicht um eine schreibgeschützte Abfrage, wie man anhand des Namens vermuten würde, sondern um einen Befehl, der Änderungen vornimmt - nicht die Arbeitsbereichsdateien. Dies ist NICHT das, was ein Statusbefehl tun sollte, und NICHT das, was ersvn status
tut. Das nächste, was ich finden kann,svn status
istp4 reconcile -na
- -a, um "Dateien, die hinzugefügt werden sollten" zu sagen, -n, um zu sagen, "ändere eigentlich nichts". /// Ich habe ursprünglich etwas viel Stärkeres gesagt.p4 status
) , und antwortete es selbst. Besser begrüßtp4 reconcile
undp4 status
sind höllisch langsam, währendgit status
die Ausführung in 1-3 Sekunden beendet ist.Antworten:
EDIT: Bitte
p4 status
jetzt verwenden. Es ist nicht mehr nötig, durch Reifen zu springen. Siehe die Antwort von @ ColonelPanic .In der P4V-Version vom Januar 2009 können Sie mit der rechten Maustaste auf einen beliebigen Ordner in Ihrem Arbeitsbereichsbaum klicken und auf "Offline-Arbeit abgleichen ..." klicken.
Dies führt eine kleine Verarbeitung durch und zeigt dann eine Split-Tree-Ansicht von Dateien an, die nicht ausgecheckt sind, aber Unterschiede zur Depotversion aufweisen oder überhaupt nicht eingecheckt sind. Es kann sogar einige andere Kategorien geben, die angesprochen werden.
Sie können in dieser Ansicht mit der rechten Maustaste auf Dateien klicken und diese auschecken, hinzufügen oder sogar zurücksetzen.
Es ist ein sehr praktisches Werkzeug, das mir ein paar Mal den Arsch gerettet hat.
EDIT: ah die Frage speziell zu Skripten gestellt, aber ich werde diese Antwort hier für alle Fälle belassen.
quelle
p4 status
FINDET nicht nur nicht verfolgte Dateien, sondern beginnt tatsächlich damit, sie zu verfolgen. Das heißt, esp4 status
handelt sich nicht um eine schreibgeschützte Abfrage, wie man anhand des Namens vermuten würde, sondern um einen Befehl, der Änderungen vornimmt - nicht die Arbeitsbereichsdateien. Dies ist NICHT das, was ein Statusbefehl tun sollte, und NICHT das, was ersvn status
tut. Das nächste, was ich finden kann,svn status
istp4 reconcile -na
- -a, um "Dateien, die hinzugefügt werden sollten" zu sagen, -n, um zu sagen, "ändere eigentlich nichts". /// Ich habe ursprünglich etwas viel Stärkeres gesagt.p4 status
ist im Grunde ein Synonym fürp4 reconcile -n
. Vielleicht bist du gelaufen,p4 status -A
was ein Synonym für istp4 reconcile
?Unter Linux oder wenn Sie Gnu-Tools unter Windows installiert haben:
Dies zeigt eine Fehlermeldung für jede nicht berücksichtigte Datei an. Wenn Sie diese Ausgabe erfassen möchten:
quelle
.p4ignore
und kann auch nicht verfolgte / geänderte / gelöschte Dateien in der Vorschau anzeigen und automatisch bearbeiten.find . -type l
) behandelt und eine irreführende Ausgabe für P4-Dateien liefert, die zwangsweise hinzugefügt wurden, weil sie die Zeichen@
oder enthalten%
. Solche Dateien sind jedoch in der Minderheit, sodass eine manuelle Überprüfung dieser Randfälle in den meisten Fällen funktioniert.Unter Unix:
Dadurch wird eine Liste der Dateien ausgedruckt, die nicht in Ihrem Client oder im Perforce-Depot hinzugefügt wurden. Ich habe
! -name '*~'
Dateien ausgeschlossen, die mit ~ enden.quelle
Ahh, einer der Perforce-Klassiker :) Ja, es ist wirklich schade, dass es NOCH keinen einfachen Weg gibt, dies in die Standardbefehle zu integrieren.
Am einfachsten ist es, einen Befehl auszuführen, um alle Dateien unter dem 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' in einer nix-Befehlszeile.)
Wenn Sie eine physische Liste (in der Konsole oder Datei) möchten, 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.
quelle
Ja, ABER .
Ab Perforce Version 2012.1 gibt es den Befehl
p4 status
und in P4V 'Offline-Arbeit abgleichen'. Sie sind jedoch beide sehr langsam. Um irrelevante Dateien auszuschließen, müssen Sie einep4ignore.txt
Datei unter https://stackoverflow.com/a/13126496/284795 schreibenquelle
p4 status
Seit der Veröffentlichung von 2012.1 wurden mehrere Leistungsverbesserungen vorgenommen . Wenn Sie sich ausp4 status
Leistungsgründen ferngehalten haben , lohnt es sich möglicherweise, es erneut zu testen, um zu sehen, wie es sich jetzt verhält.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 folgt.
--- + KURZ
Der wahrscheinlich bequemste Weg, alle nicht verfolgten Dateien in einem Perforce-Arbeitsbereich zu finden, ist
p4 reconcile -na
.-a
sagt "gib mir Dateien, die nicht im Repository sind, dh die hinzugefügt werden sollten".-n
sagt "keine Änderungen vornehmen" - dh ein Trockenlauf. (Obwohl in den Nachrichten möglicherweise "Zum Hinzufügen geöffnet" steht, müssen Sie dies mental als "Zum Hinzufügen geöffnet, wenn nicht -n" interpretieren.)Wahrscheinlich der bequemste Weg , alle lokalen Änderungen zu finden , während offline - nicht nur Dateien , die müssen möglicherweise hinzugefügt werden, sondern auch Dateien dass Möglicherweise müssen gelöscht werden, oder die geändert wurden , ohne den Umweg über zur Bearbeitung geöffnet wird
p4 edit
, istp4 reconcile -n
.Mehrere Antworten lieferten Skripte, oft mit
p4 fstat
. Obwohl ich nicht alle diese Skripte überprüft habe, verwende ich häufig ähnliche Skripte, um die Mängel von Perforce-Befehlen auszugleichen, zp4 reconcile -n
.--- + WARNUNG
p4 status
ist NICHT das Gegenstück zu den Statusbefehlen auf anderen Versionskontrollsystemen.p4 status
ist KEINE schreibgeschützte Abfrage.p4 status
findet tatsächlich die gleichen Änderungen wiep4 reconcile
diese und fügt sie dem Repository hinzu.p4 status
scheint keine-n
Trockenlaufoption wiep4 reconcile
diese zu haben.Wenn Sie dies tun
p4 status
, schauen Sie sich die Dateien an und denken Sie "Oh, ich brauche diese nicht". Dann müssen Siep4 revert
sie verwenden, wenn Sie die Bearbeitung im selben Arbeitsbereich fortsetzen möchten.p4 status
Andernfalls werden die Änderungen, die Ihrem Änderungssatz hinzugefügt wurden, beim nächsten Mal überprüft.Es scheint wenig oder keinen Grund zu geben,
p4 status
anstattp4 reconcile -n
, außer einigen Details des lokalen Arbeitsbereichs gegenüber dem Depot-Pfadnamen.Ich kann mir nur vorstellen, dass jeder, der 'Status' für einen nicht schreibgeschützten Befehl gewählt hat, die englische Sprache und andere Tools zur Versionskontrolle nur eingeschränkt beherrscht.
--- +
P4V
GUIIn der GUI
p4v
findet der Befehl "Reconcile" lokale Änderungen, die möglicherweise hinzugefügt, gelöscht oder zum Bearbeiten geöffnet werden müssen. Glücklicherweise werden sie standardmäßig nicht zu einer Änderungsliste hinzugefügt. Möglicherweise möchten Sie jedoch trotzdem darauf achten, das Abstimmungsfenster nach der Überprüfung zu schließen, wenn Sie die Änderungen nicht festschreiben möchten.quelle
In meinem Tool verwende ich Folgendes, um alle Dateien im Arbeitsbereich zu sichern, 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 Hashmarken:
" dir / S / B / AD " listet alle Dateien in oder unter diesem Ordner ( / S ) im "nackten" Format ( / B ) mit Ausnahme der Verzeichnisse (/ AD ) auf. Das " sed " ändert gefährliche Zeichen in ihre " % xx " -Form (a la HTML), und der Befehl " p4 have " überprüft diese Liste (" -x- ") anhand des Servers und verwirft alles, was sich tatsächlich im Repository befindet (" 1> NUL: "). Das Ergebnis ist eine Reihe von Zeilen wie:
Et voilà!
quelle
Alternativ können Sie in P4Win die Option "Lokale Dateien nicht im Depot" im linken Ansichtsfenster verwenden.
Ich verwende P4V nicht viel, aber ich denke, das Äquivalent ist, "Lokale Arbeitsbereichsdateien ausblenden" in der Filter-Dropdown-Liste der Registerkarte "Arbeitsbereichsansicht" auszuwählen
In P4V 2015.1 finden Sie diese Optionen unter der Filterschaltfläche wie folgt:
quelle
Quick 'n Dirty: Klicken Sie in p4v mit der rechten Maustaste auf den betreffenden Ordner und fügen Sie alle Dateien darunter einer neuen Änderungsliste hinzu. Die Änderungsliste enthält jetzt alle Dateien, die derzeit nicht Teil des Depots sind.
quelle
Die folgenden Befehle erzeugen eine statusähnliche Ausgabe, aber keine entspricht
svn status
odergit status
gibt eine einzeilige Zusammenfassung des Status jeder Datei:p4 status
p4 opened
p4 diff -ds
quelle
Ich habe nicht genügend Reputationspunkte, um Kommentare abzugeben, aber die Lösung von Ross listet auch Dateien auf, die zum Hinzufügen geöffnet sind. Sie wahrscheinlich nicht möchten seine Antwort verwenden, um Ihren Arbeitsbereich zu bereinigen.
Im Folgenden werden
p4 fstat
anstelle von (danke Mark Harrison)p4 have
die Dateien verwendet und aufgelistet, die sich nicht im Depot befinden und nicht zum Hinzufügen geöffnet sind.=== Jac
quelle
Schnelle Methode, aber wenig orthodox. Wenn die Codebasis nicht zu oft neue Dateien hinzufügt / die Ansicht ändert, können Sie aus Ihrer Kasse ein lokales 'Git'-Repository erstellen. Bei einer sauberen Perforce-Synchronisierung können Sie git init alle Dateien lokal hinzufügen und festschreiben. Der Git-Status ist schnell und zeigt Dateien an, die zuvor nicht festgeschrieben wurden.
quelle
Mit dem
p4 fstat
Befehl können Sie testen, ob eine Datei im Arbeitsbereich vorhanden ist, undfind
wie im folgenden Perl-Beispiel nach zu überprüfenden Dateien suchen: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 (
-n
) ausgeführt wird.quelle
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
. (natürlich Abhängigkeiten und tmp-Ordner ignorieren)Sie finden es hier: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9
quelle
Wählen Sie in P4V unter dem Menüpunkt "Ansicht" die Option "Dateien im Ordner". Daraufhin wird im rechten Bereich eine neue Registerkarte angezeigt. Ganz rechts auf den Registerkarten befindet sich ein kleines Symbol, das ein Fenster mit dem Namen "Dateien im Ordner" mit zwei Symbolen öffnet. Wählen Sie das linke Symbol, das wie ein Trichter aussieht, und Sie sehen mehrere Optionen. Wählen Sie "Elemente anzeigen, die nicht im Depot vorhanden sind". 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 überprüfen, ob es dort auf der Registerkarte "Ausstehend" vorhanden ist. Einfach wie gewohnt einreichen (Strg + S).
quelle