Können Sie eine Datei in Perforce „ignorieren“?


101

Manchmal verwende ich die Funktion "Offline-Arbeit abgleichen ..." in Perforce's P4V-IDE, um alle Dateien zu synchronisieren, an denen ich gearbeitet habe, während ich vom P4-Depot getrennt war. Es wird ein weiteres Fenster geöffnet, in dem ein 'Folder Diff' ausgeführt wird.

Ich habe Dateien, die ich nie in die Quellcodeverwaltung einchecken möchte (z. B. solche, die sich im bin-Ordner befinden, z. B. DLLs, Code-generierte Ausgabe usw.). Gibt es eine Möglichkeit, diese Dateien / Ordner so herauszufiltern, dass sie möglicherweise nicht als "neu" angezeigt werden? hinzugefügt. Sie neigen dazu, die Liste der Dateien, an denen ich tatsächlich interessiert bin, zu überladen. Verfügt P4 über die Funktion "Datei ignorieren" von Subversion?


Können Sie ein Beispiel für die CVS-Ausgabe geben, damit wir sehen können, was Sie meinen und warum die gegebenen Antworten nicht das tun, was Sie wollen?
Greg Whitfield

2
Im Forum von Perforce's Idee können Sie über einen Vorschlag für Ignorierlisten im Git-Stil abstimmen. P4ideax.com/ideas/15/ignore-support
Colonel Panic

Klicken Sie auf "Offline-Arbeit abgleichen", deaktivieren Sie "Lokale Dateien nicht im Depot" und klicken Sie auf "Abgleichen". Solange Sie keine Dateien hinzufügen, ist dies wahrscheinlich die schnellste Problemumgehung.
Spur

Antworten:


59

Ab Version 2012.1 unterstützt Perforce die P4IGNOREUmgebungsvariable. Ich habe meine Antwort auf diese Frage zum Ignorieren von Verzeichnissen mit einer Erklärung der Funktionsweise aktualisiert . Dann habe ich diese Antwort bemerkt, die jetzt wohl überflüssig ist.


Angenommen, Sie haben einen Client mit dem Namen "CLIENT", ein Verzeichnis mit dem Namen "foo" (im Projektstamm) und möchten alle DLL-Dateien in diesem Verzeichnisbaum ignorieren, können Sie der Arbeitsbereichsansicht die folgenden Zeilen hinzufügen, um dies zu erreichen Dies:

- // depot / foo / *. dll //CLIENT/foo/*.dll
- // depot / foo /.../*. dll //CLIENT/foo/.../*.dll

Die erste Zeile entfernt sie aus dem Verzeichnis "foo" und die zweite Zeile entfernt sie aus allen Unterverzeichnissen. Wenn Sie nun "Offline-Arbeit abgleichen ...", werden alle DLL-Dateien in die Ordner "Ausgeschlossene Dateien" am unteren Rand der Ordner-Diff-Anzeige verschoben. Sie stehen Ihnen nicht im Weg, können sie jedoch weiterhin anzeigen und bearbeiten, wenn Sie dies wirklich benötigen.

Sie können es auch auf eine andere Weise tun, wodurch Ihr Ordner "Ausgeschlossene Dateien" auf nur einen reduziert wird. Sie können jedoch keine der darin enthaltenen Dateien bearbeiten, da der Pfad beschädigt ist (aber wenn Sie sie nur löschen möchten) von deinem Weg ist es egal).

- // depot / foo ... / *. dll //CLIENT/foo.../*.dll

30
Während dies funktioniert, ist es nicht sehr nützlich, da Sie diese Zeilen in jeden Arbeitsbereich einfügen müssen, den Sie jemals erstellt haben.
dgrant

6
Hinweis: Dies funktioniert nicht für die normale Offline-Abstimmung von p4v. Die "ausgeschlossenen Dateien" scheinen sich nur im "erweiterten" Abstimmungsfenster zu befinden ...
Catskul

6
Der Ausschlussfilter funktioniert im Reconcile Offline WorkDialogfeld nicht. Es funktioniert, wenn Sie es im Inneren öffnen, Advanced Reconcile...aber dies ist nutzlos, da Sie in 99,9% der Fälle den erweiterten Dialog nicht benötigen oder verwenden möchten.
Sorin

12
@raven: 1) (Beispiel :) Einige Projekte verwenden bin / obj-Ordner unter jedem Projekt, anstatt sie an einem zentralen Ort zu haben. (Verallgemeinerte Schlussfolgerung :) Die Annahme von Perforce, dass alle Zwischendateien an einem leicht ausgeschlossenen Arbeitsbereich abgelegt werden, ist ein unnötig restriktives Design für ein VCS. 2) Einige Projekte umfassen den lokalen Cache und / oder andere vom Benutzer generierte Dateien in der Verzeichnisstruktur (z. B. den * .ncb IntelliSense-Cache). Die Unfähigkeit, sie als allgemeine Richtlinie auszuschließen, beeinträchtigt die Funktionen "Offline-Arbeit abgleichen" und "Diff-Ordner" erheblich.
Sam Harwell

6
Dieses besondere Problem bringt mich um.
Warren P

47

Ja aber.

Perforce Version 2012.1 hat eine Funktion namens p4ignore hinzugefügt von Git inspirierte . Die Perforce-Entwickler haben jedoch ohne Begründung eine Änderung am Verhalten vorgenommen, die die Funktion weniger nützlich macht.

Während Git Regeln aus allen .gitignoreDateien übernimmt, weiß Perforce erst, wo er suchen muss, wenn Sie einen Dateinamen in einer Umgebungsvariablen angebenP4IGNORE . Diese Freiheit ist ein Fluch. Sie können nicht zwei Repositorys hacken, die unterschiedliche Namen für ihre Ignorierdateien verwenden.

Auch die Ignorierfunktion von Perforce funktioniert nicht. Sie können es einfach genug für sich selbst einrichten, aber andere profitieren nur, wenn sie sich ausdrücklich dafür entscheiden. Ein Mitwirkender, der dies nicht getan hat, kann versehentlich unerwünschte Dateien festschreiben (z. B. abin Ordner, der von einem Build-Skript erstellt wurde).

Die Ignorierfunktion von Git ist großartig, da sie sofort funktioniert. Wenn die .gitignoreDateien zum Repository hinzugefügt werden ( jeder tut dies ), werden sie die Box für alle ausarbeiten. Niemand wird versehentlich seinen privaten Schlüssel veröffentlichen.

Amüsanterweise wird in den Perforce-Dokumenten '.p4ignore' als Beispiel für eine Ignorierregel angezeigt, die rückwärts ist! Wenn die Regeln nützlich sind, sollten sie als Teil des Repositorys freigegeben werden.


Perforce konnte die Funktion noch verbessern. Wählen Sie beispielsweise eine Konvention für die Dateinamen p4ignore.txt, damit die Funktion sofort funktioniert. Löschen Sie die P4IGNOREUmgebungsvariable, es ist kontraproduktiv. Bearbeiten Sie die Dokumente, um Entwickler zu ermutigen, nützliche Regeln zu teilen. Lassen Sie Benutzer wie Git persönliche Regeln in eine Datei in ihrem Home-Ordner schreiben .

Wenn Sie jemanden bei Perforce kennen, senden Sie ihm bitte diesen Beitrag per E-Mail.


2
Danke für die Klarstellung. Ich habe versucht, .p4ignore mit P4VS zu verwenden, aber meine Lösung, die ignoriert werden sollte, wurde nicht ignoriert. Zuerst dachte ich, ich mache etwas falsch. Jetzt weiß ich es besser.
Michael S.

1
@gentlesea Ab Perforce 2013.1 funktioniert die Ignorierfunktion endlich in der grafischen App.
Colonel Panic

2
Diskussion ' Lassen
Colonel Panic

1
Verwenden Sie für Konfigurationsvariablen, die sich je nach verwendetem Arbeitsbereich unterscheiden, die Verwendung von P4CONFIG-Dateien. Anschließend können Sie in Ihrer P4CONFIG-Datei einen anderen P4IGNORE-Wert angeben, wenn Sie von Arbeitsbereich zu Arbeitsbereich wechseln.
Bryan Pendleton

2
Perforce weiß nicht, wie man richtige Software erstellt, sie erhalten nicht einmal die Grundlagen. Deshalb träumt jeder, der notgedrungen feststeckt, davon, zu Git zu wechseln.
Pavel P

22

Dies funktioniert ab Perforce 2013.1. Der neue P4IGNORE-Mechanismus wurde erstmals in Version 2012.1 hinzugefügt, die hier im Perforce-Blog beschrieben wird:

https://www.perforce.com/blog/new-20121-p4ignore

Wie derzeit beschrieben, setzen Sie eine Umgebungsvariable "P4IGNORE" auf einen Dateinamen, der eine Liste der zu ignorierenden Dateien enthält.

Sie können es also überprüfen, um zu sehen, wie es Ihnen gefällt.


1
Sie können auch Verzeichnisnamen einfügen, nicht nur Dateinamen.
Asche999

Wie bereits erwähnt: Leider MÜSSEN Sie P4IGNORE einstellen.
Technophile

1
Ich habe den Link @DerMike behoben - ich denke, Perforce hat seine Blog-URLs geändert.
svec

7

Wenn Sie eine Lösung wünschen, die für alle Arbeitsbereiche gilt, ohne kopiert werden zu müssen, können Sie (oder Ihr Systemadministrator) die Übermittlung dieser Dateitypen mithilfe von Zeilen wie den folgenden in der p4-Schutztabelle ablehnen:

write user * * -//.../*.suo
write user * * -//.../*.obj
write user * * -//.../*.ccscc

Ich erinnere mich, dass ich das schon einmal gemacht habe, aber ich habe nicht die notwendigen Berechtigungen, um dies hier zu testen. Lesen Sie den Sysadmin-Leitfaden von Perforce und probieren Sie ihn aus


3
Leider führt dies beim Senden zu Fehlern, anstatt dass die Abgleichsansicht ignoriert wird. So kann es bestimmte Dateien aus einem Repository fernhalten, aber es kann Ihren Benutzern nicht helfen, kein Rauschen zu sehen.
Warren P

6

Perforce Streams erleichtert das Ignorieren von Dateien ab Version 2011.1 erheblich. Gemäß der Dokumentation können Sie bestimmte Erweiterungen oder bestimmte Pfade in Ihrem Verzeichnis ignorieren.

Von p4 help stream

Ignored: Optional; a list of file or directory names to be ignored in
                 client views. For example:

                     /tmp      # ignores files named 'tmp'
                     /tmp/...  # ignores dirs named 'tmp'
                     .tmp      # ignores file names ending in '.tmp'

                 Lines in the Ignored field may appear in any order.  Ignored
                 names are inherited by child stream client views.

Dies entspricht im Wesentlichen der Antwort von @ raven, ist jedoch mit Streams einfacher, da es sich mit diesem Stream automatisch auf jeden Arbeitsbereich ausbreitet. Dies gilt auch für alle Streams, die von dem Stream erben, in dem Sie die Ignoriertypen angeben.

Sie können den Stream bearbeiten p4 stream //stream_depot/stream_nameoder mit der rechten Maustaste auf den Stream in der Stream-Ansicht von p4v klicken.

Und wie @svec feststellte, ist die Möglichkeit, Ignorierdateien pro Arbeitsbereich anzugeben, bald verfügbar und befindet sich tatsächlich in der Beta- Version von P4 2012.1.


Ja, dies funktioniert für mich, um Einstellungen zum Ignorieren für ein Team freizugeben (ich verwende p4 2013.2). Beachten Sie, dass dies nur in einem Stream-fähigen Depot funktioniert. (Wenn Sie die Umgebungsvariable P4IGNORE = .p4ignore in Ihrem Team verbreiten können, ist dies wahrscheinlich die beste Lösung.)
yoyo

1
Beachten Sie, dass das Feld Ignoriert für einen Stream verwendet werden kann, um einen bestimmten Ordner, eine bestimmte Datei oder eine bestimmte Dateierweiterung zu ignorieren. Die Platzhalterunterstützung ist jedoch begrenzt und es gibt keine Möglichkeit, einen ganzen Ordner zu ignorieren und dann bestimmte Dateien oder Unterordner "aufzuheben". (Ab p4 Server Version 2013.2)
Yooy

3

Wills Vorschlag, .p4ignorenur zu verwenden, scheint mit dem WebSphere Studio (P4WSAD) -Plugin zu funktionieren. Ich habe es gerade auf meiner lokalen Windows-Box versucht und alle Dateien und Verzeichnisse, die ich aufgelistet habe, wurden nicht ignoriert.

Ravens Vorschlag, Ihre Client-Spezifikation zu ändern, ist unter Perforce der richtige Weg. Durch die ordnungsgemäße Organisation Ihres Codes / Ihrer Daten / ausführbaren Dateien und der generierten Ausgabedateien wird das Ausschließen von Dateien vom Einchecken erheblich vereinfacht.

Als drakonischerer Ansatz können Sie jederzeit einen Submit-Trigger schreiben, der die Übermittlung von Änderungslisten ablehnt, wenn diese eine bestimmte Datei oder Dateien mit einer bestimmten Erweiterung usw. enthalten.


15
Ich bin völlig anderer Meinung als die gesamte Aussage "Richtige Organisation Ihres Codes ...". Tatsache ist, dass gemäß der Perforce-Konvention zum Bearbeiten des Arbeitsbereichs jeder Benutzer die Änderung vornehmen muss. Eine echte .p4ignore-Datei wird nur einmal erstellt / verwaltet.
Mike

9
Oh, und ganz zu schweigen davon, dass Sie Ihren Code gerne verzweigen? Viel Glück bei der Pflege Ihrer Arbeitsbereiche für jede Branche. Das klingt nach Spaß!
Mike

2

HISTORISCHE ANTWORT - nicht mehr korrekt. Zu der Zeit, als dies ursprünglich geschrieben wurde, war es wahr;

Sie können keine Datei schreiben und einchecken, mit der der Server Ignorierregeln erstellt. Allgemeines Glob- oder Regexp-Dateimuster werden zwangsläufig ignoriert.

Andere Antworten haben globale Serverkonfigurationen, die global sind (und nicht pro Ordner). Die anderen Antworten zeigen Dinge, die für Sie möglicherweise funktionieren, wenn Sie eine Zeile in Ihrer Ansicht pro Ordner mal Anzahl der Erweiterungen möchten, die Sie in diesem einzelnen Ordner ignorieren möchten, oder wenn Sie diese Funktion nur in WebSphere Studio-Plugins oder für Server bereitstellen Administratoren, aber nicht für Benutzer verfügbar.

Kurz gesagt, ich finde Perforce in diesem Bereich sehr schwach. Ich weiß zwar zu schätzen, dass diejenigen, die das Eclipse-Plugin verwenden, es verwenden können .p4ignore, und ich finde das großartig, aber diejenigen von uns, die dies nicht tun, bleiben im Dunkeln.

UPDATE: Siehe akzeptierte Antwort für die neue P4IGNORE-Funktion, die Mitte 2012 hinzugefügt wurde.


1

Ich habe festgestellt, dass es am einfachsten ist, Offline-Arbeit mit einem BASH-Skript wie diesem abzustimmen:

#!/bin/bash
# reconcile P4 offline work, assuming P4CLIENT is set
if [ -z "$P4CLIENT" ] ; then echo "P4CLIENT is not set"; exit 1; fi
unset PWD # confuses P4 on Windows/CYGWIN

# delete filew that are no longer present
p4 diff -sd ... | p4 -x - delete

# checkout files that have been changed.  
# I don't run this step.  Instead I just checkout everything, 
# then revert unchanged files before committing.
p4 diff -se ... | pr -x - edit

# Add new files, ignoring subversion info, EMACS backups, log files
# Filter output to see only added files and real errors
find . -type f \
 | grep -v -E '(\.svn)|(/build.*/)|(/\.settings)|~|#|(\.log)' \
 | p4 -x - add \
 | grep -v -E '(currently opened for add)|(existing file)|(already opened for edit)'

Ich habe dies aus diesem Perforce Knowledge Base-Artikel angepasst .


Das war vor sieben Jahren, ich bin nicht überrascht. Ich bin überrascht, dass noch immer Perforce verwendet wird.
Kevin Cline

... nicht
freiwillig

0

Ich suche auch nach einer .p4ignore-ähnlichen Lösung (und nicht nach einer, die an eine bestimmte IDE gebunden ist). Bisher habe ich am ehesten p4delta gefunden. Es hört sich so an, als würde es genau das tun, was das Originalplakat verlangte, wenn auch durch eine andere Ebene der Indirektion.

http://p4delta.sourceforge.net

Obwohl dies die richtige Liste von Dateien zu erzeugen scheint, kann ich "p4delta --execute" leider nicht zum Laufen bringen ("Ein eingefrorener String kann nicht geändert werden") und das Projekt wurde im Jahr nicht aktualisiert. Vielleicht haben andere mehr Glück.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.