2008-09-10 15 views
96

Ich benutze manchmal die Funktion 'Reconcile Offline Work ...' in Perforce P4V IDE, um alle Dateien zu synchronisieren, an denen ich gearbeitet habe, während ich die Verbindung zum P4-Depot getrennt habe. Es startet ein weiteres Fenster, das einen 'Ordnervergleich' ausführt.Können Sie eine Datei in Perforce "ignorieren"?

Ich habe Dateien, die ich nie in Quellcodeverwaltung einchecken möchte (wie in bin-Ordner wie DLLs, Code generierte Ausgabe, etc.) Gibt es eine Möglichkeit, diese Dateien/Ordner aus "neu" zu filtern "Das könnte hinzugefügt werden. Sie neigen dazu, die Liste der Dateien, die ich eigentlich interessiert, zu überladen. Hat P4 das Äquivalent von Subversions "Ignoriere Datei" -Funktion?

+0

Können Sie ein Beispiel für die CVS-Ausgabe angeben, damit wir sehen können, was Sie meinen und warum die Antworten nicht Ihren Vorstellungen entsprechen? –

+1

In Perforces Ideenforum können Sie über einen Vorschlag für Git-Stil-Ignorierlisten abstimmen. Http://p4ideax.com/ideas/15/ignore-support –

+0

Hit "Offline-Arbeit zu vereinbaren", deaktivieren Sie "Lokale Dateien nicht im Depot", Drücken Sie "Abstimmen". Solange Sie keine Dateien hinzufügen, ist dies wahrscheinlich die schnellste Lösung. – lane

Antwort

58

Ab Version 2012.1 unterstützt Perforce die Umgebungsvariable P4IGNORE. Ich aktualisierte meine Antwort auf this question about ignoring directories mit einer Erklärung, wie es funktioniert. Dann habe ich diese Antwort bemerkt, die jetzt überflüssig ist.


Angenommen, Sie haben ein Client „Client“ genannt, ein Verzeichnis mit dem Namen „foo“ (bei einem Projekt root befindet), und Sie möchten alle DLL-Dateien in diesem Verzeichnisbaum ignorieren, können Sie die folgenden hinzufügen

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

die erste Zeile sie aus dem Verzeichnis „foo“ entfernt und die zweite Zeile entfernt sich aus allen Unterverzeichnissen: Linien in Ihren Arbeitsbereich Ansicht, dies zu erreichen. Jetzt, wenn Sie "offline arbeiten ..." abstimmen, werden alle .dll-Dateien in "ausgeschlossene Dateien" -Ordner am unteren Rand der Ordner-Diff-Anzeige verschoben. Sie werden nicht im Weg sein, aber können sie immer noch sehen und manipulieren, wenn es wirklich nötig ist.

Sie können es auch anders machen, was Ihren "Excluded Files" -Ordner auf nur einen reduziert, aber Sie können keine der darin enthaltenen Dateien manipulieren, weil der Pfad beschädigt sein wird (aber wenn Sie nur wollen sie aus dem Weg, es ist 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 nur im "advanced" Reconcile-Fenster zu sein ... – Catskul

+6

Der Ausschluss-Filter funktioniert nicht im Dialogfeld "Offline-Arbeit abstimmen". Es funktioniert, wenn Sie es in "Advanced Reconcile ..." öffnen, aber das ist nutzlos, weil Sie in 99,9% der Zeit den erweiterten Dialog nicht benötigen oder verwenden möchten. – sorin

3

Wills Vorschlag .p4ignore der Verwendung scheint nur mit der WebSphere Studio (P4WSAD) Plugin zu arbeiten. Ich habe es gerade auf meiner lokalen Windows-Box versucht und alle Dateien und Verzeichnisse, die ich aufgelistet habe, wurden nicht ignoriert.

Der Vorschlag von Raven, die Client-Spezifikationen zu ändern, ist der richtige Weg unter Perforce. Durch die richtige Organisation Ihrer Code/Daten/Executables und generierten Ausgabedateien wird das Einchecken von Dateien wesentlich einfacher verhindert.

Als drakonischeren Ansatz, können Sie immer ein Trigger schreiben vorlegen, die Einreichung von Änderungslisten ablehnen, wenn sie eine bestimmte Datei oder Dateien mit einer bestimmten Endung enthalten usw.

+15

Ich stimme überhaupt nicht mit der gesamten "Richtige Organisation Ihres Codes ..." Aussage überein. Tatsache ist, dass nach der Konvention von Perforce, den Arbeitsbereich zu bearbeiten, jeder Benutzer die Änderung vornehmen muss. Eine echte .p4ignore-Datei wird nur einmal erstellt/verwaltet. – Mike

+9

Oh, und nicht zu vergessen, Sie möchten Ihren Code verzweigen? Viel Glück bei der Pflege Ihrer Arbeitsbereiche für jeden Zweig. Das klingt nach Spaß! – Mike

-1

Wenn Sie die Verwendung von Eclipse Perforce-Plugin, dann the plugin documentation listet mehrere Möglichkeiten zum Ignorieren von Dateien auf.

+4

duplizieren, und beantwortet nicht die Frage –

7

Wenn Sie eine Lösung wünschen, die auf alle Arbeitsbereiche angewendet wird, ohne dass Sie kopiert werden müssen, können Sie (oder Ihr Sysadmin) die Übermittlung dieser Dateitypen mit den folgenden Zeilen in der p4 protect-Tabelle ablehnen:

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

Ich erinnere mich, dies vorher zu tun, aber ich habe nicht die notwendigen Berechtigungen, dies hier zu testen. Schauen Sie sich Perforce's Sysadmin guide an und probieren Sie es aus

+3

Leider verursacht dies Fehler beim Senden, anstatt die Abstimmungsansicht zu ignorieren. So kann es bestimmte Dateien aus einem Repository behalten, aber es kann Ihren Benutzern nicht helfen, kein Rauschen zu sehen. –

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, die der Server zum Ignorieren von Regeln verwendet. Das allgemeine Glob- oder Regexp-Dateimuster wird ignoriert.

Andere Antworten haben globale Serverkonfigurationen, die global (und nicht pro Ordner) sind. Die anderen Antworten zeigen Dinge, die für Sie funktionieren könnten, wenn Sie in Ihrer Ansicht pro Zeile die Anzahl der Erweiterungen angeben möchten, die Sie in diesem einzelnen Ordner ignorieren möchten, oder die diese Funktionalität nur in WebSphere Studio-Plugins bereitstellen oder für die Funktionalität bereitstellen Server-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, .p4ignore verwenden können, und ich denke, das ist großartig, es lässt diejenigen von uns zurück, die nicht im Dunkeln sind.

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

0

Ich habe es am einfachsten, in Einklang zu bringen Offline-Arbeit mit einem BASH-Skript wie dieser gefunden:

#!/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 dies von this Perforce Knowledge Base article angepasst.

0

Ich bin auf der Suche nach einer .p4ignore-ähnlichen Lösung (und nicht an eine bestimmte IDE gebunden). Bis jetzt ist das nächste, was ich gefunden habe, p4delta. Es klingt, als würde es genau das tun, was das ursprüngliche Poster verlangte, wenn auch durch eine andere Ebene der Indirektion.

http://p4delta.sourceforge.net

Leider, während dies die richtige Liste von Dateien zu erzeugen scheint, kann ich nicht bekommen „p4delta --execute“ arbeiten („Kann nicht eine gefrorene Zeichenfolge ändern“) und das Projekt wurde im Jahr nicht aktualisiert. Vielleicht haben andere mehr Glück.

21

Dies als von Perforce ersten in Version hinzugefügt wurde 2013,1, der neue P4IGNORE Mechanismus funktioniert, 2012.1, auf dem Perforce Blog hier beschrieben:

http://www.perforce.com/blog/120130/new-20121-p4ignore

Wie es zur Zeit beschrieben ist, Sie setzen eine Umgebungsvariable "P4IGNORE" zu einem Dateinamen, der eine Liste der zu ignorierenden Dateien enthält.

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

+0

Jetzt ist es veröffentlicht, meine Bewertung unter http://Stackoverflow.com/a/13126496/284795 –

+0

Bearbeiten: Anscheinend begann es in 2013 zu arbeiten.1 –

+1

Sie können auch Verzeichnisnamen, nicht nur Dateinamen. – ashes999

6

Perforce Streams erleichtert das Ignorieren von Dateien ab Version 2011.1. Laut der documentation, 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. 

tut dies im Wesentlichen, was @ Raben spezifiziert beantworten, ist aber mit Strömen leichter gemacht, da es zu jedem Arbeitsraum automatisch propagiert diesen Strom verwendet wird. Sie gilt auch für alle Streams, die von dem Stream erben, in dem Sie die Ignoriertypen angeben.

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

Und als @svec erwähnt, ist die Möglichkeit, Dateien zu spezifizieren ignorieren pro Arbeitsplatz bald kommt, und ist in der Tat in P4 2012.1 beta.

+0

Ja, das funktioniert für mich, um "Ignorieren" -Einstellungen in einem Team zu teilen (ich verwende p4 2013.2). Beachten Sie, dass es nur in einem streamfähigen Depot funktioniert. (Wenn Sie die Umgebungsvariable P4IGNORE = .p4ignore auf Ihr Team übertragen 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 Datei oder eine Dateierweiterung zu ignorieren begrenzt und es gibt keine Möglichkeit, einen ganzen Ordner zu ignorieren und dann bestimmte Dateien oder Unterordner "unignore". (Ab p4 Server Version 2013.2) – yoyo

43

Ja, aber.

Perforce Version 2012.1 hinzugefügt ein Feature wie p4ignore, inspiriert von Git. Die Perforce-Entwickler änderten jedoch das Verhalten ohne Begründung, was dazu führte, dass das Feature viel weniger nützlich war.

Während Git Regeln aus allen .gitignore-Dateien akzeptiert, weiß Perforce nicht, wo nachzusehen ist, bis Sie einen Dateinamen in einer Umgebungsvariablen P4IGNORE angeben. Diese Freiheit ist ein Fluch. Sie können nicht zwei Repositorys hacken, die für ihre Ignorierdateien unterschiedliche Namen verwenden.

Auch Perforce die Ignorierfunktion funktioniert nicht die Box. Sie können es leicht genug für sich selbst einrichten, aber andere profitieren nur, wenn sie sich explizit dazu anmelden. Ein Mitwirkender, der das nicht getan hat, kann versehentlich unerwünschte Dateien (z. B. einen bin Ordner, der von einem Build-Skript erstellt wurde) begehen.

Git's ignorieren Funktion ist großartig, weil es die Box funktioniert. Wenn die .gitignore Dateien zum Repository hinzugefügt werden (everyone does this), werden sie die Box für alle ausarbeiten. Niemand wird versehentlich ihren privaten Schlüssel veröffentlichen.

Amüsant, die Perforce docs zeigt '. P4ignore' als Beispiel ignorieren Regel, die rückwärts ist! Wenn die Regeln nützlich sind, sollten sie als Teil des Repositorys freigegeben werden.


Perforce konnte immer noch gut auf die Funktion. Wählen Sie eine Konvention für die Dateinamen, sagen Sie p4ignore.txt, so dass die Funktion die Box ausarbeitet. Lassen Sie die P4IGNORE Umgebungsvariable fallen, es ist kontraproduktiv. Bearbeiten Sie die Dokumente, um Entwickler zu ermutigen, nützliche Regeln zu teilen. Lassen Sie Benutzer persönliche Regeln in eine Datei in ihrem Home-Ordner as Git does schreiben.

Wenn Sie jemanden bei Perforce kennen, mailen Sie ihm diesen Beitrag.

+2

Danke für die Klarstellung. Ich versuchte mit .p4ignore mit P4VS, aber meine Lösung, die ignoriert werden sollte, wurde nicht ignoriert. Zuerst dachte ich, ich mache etwas falsch. Jetzt weiß ich es besser. –

+1

@gentlesea, ab Perforce 2013.1 funktioniert die Ignorierfunktion schließlich in der grafischen App. –

+2

Diskussion 'Machen Sie die Ignorieren-Funktion das Feld aus' auf http://www.p4ideax.com/ideas/17856/make-the-ignore-feature-work-out-the-box –

Verwandte Themen