Domanda

A volte utilizzo la funzione "Riconcilia lavoro offline..." presente nell'IDE P4V di Perforce per sincronizzare tutti i file su cui ho lavorato mentre ero disconnesso dal depot P4.Lancia un'altra finestra che esegue un 'Folder Diff'.

Ho dei file che non voglio mai archiviare nel controllo del codice sorgente (come quelli trovati nella cartella bin come DLL, output generato dal codice, ecc.) Esiste un modo per filtrare quei file/cartelle affinché appaiano come "nuovi" che potrebbero essere aggiunto.Tendono a ingombrare l'elenco dei file che mi interessano realmente.P4 ha l'equivalente della funzione "ignora file" di Subversion?

È stato utile?

Soluzione

A partire dalla versione 2012.1, Perforce supporta P4IGNORE variabile d'ambiente.Ho aggiornato la mia risposta a questa domanda sull'ignorare le directory con la spiegazione del funzionamento.Poi ho notato questa risposta, che ora è superflua immagino.


Supponendo che tu abbia un client chiamato "CLIENT", una directory chiamata "foo" (situata nella root del tuo progetto) e desideri ignorare tutti i file .dll in quell'albero di directory, puoi aggiungere le seguenti righe alla vista dell'area di lavoro per ottenere Questo:

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

La prima riga li rimuove dalla directory "foo" e la seconda riga li rimuove da tutte le sottodirectory.Ora, quando si "Riconcilia il lavoro offline...", tutti i file .dll verranno spostati nelle cartelle "File esclusi" nella parte inferiore della visualizzazione delle differenze delle cartelle.Saranno fuori dai piedi, ma potrai comunque visualizzarli e manipolarli se ne avrai davvero bisogno.

Puoi anche farlo in un altro modo, che ridurrà la tua cartella "File esclusi" a una sola, ma non sarai in grado di manipolare nessuno dei file che contiene perché il percorso sarà corrotto (ma se li vuoi semplicemente eliminare a modo tuo, non importa).

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

Altri suggerimenti

Si ma.

La versione 2012.1 di Perforce ha aggiunto una funzionalità nota come p4ignore, ispirato da Git.Tuttavia gli sviluppatori di Perforce hanno apportato una modifica al comportamento, senza giustificazione, che rende la funzionalità molto meno utile.

Mentre Git prende le regole da tutti .gitignore files, Perforce non sa dove cercare finché non si specifica un nome file in una variabile di ambiente P4IGNORE.Questa libertà è una maledizione.Non puoi hackerare due repository che usano nomi diversi per i loro file da ignorare.

Inoltre, la funzione di ignora di Perforce non funziona perfettamente.Puoi configurarlo abbastanza facilmente per te stesso, ma gli altri non ne traggono vantaggio a meno che non aderiscano esplicitamente.Un collaboratore che non lo ha fatto potrebbe commettere accidentalmente file indesiderati (ad es.UN bin cartella creata da uno script di build).

La funzionalità di ignora di Git è fantastica perché funziona immediatamente.Se la .gitignore i file vengono aggiunti al repository (lo fanno tutti), funzioneranno bene per tutti.Nessuno pubblicherà accidentalmente la propria chiave privata.

In modo divertente, il Perforza documenti mostra '.p4ignore' come esempio di regola ignora, che è al contrario!Se le regole sono utili, dovrebbero essere condivise come parte del repository.


Perforce potrebbe ancora sfruttare questa funzionalità.Scegli una convenzione per i nomi dei file, ad esempio p4ignore.txt, quindi la funzionalità funziona perfettamente.Lascia cadere il P4IGNORE variabile d'ambiente, è controproducente.Modifica i documenti per incoraggiare gli sviluppatori a condividere regole utili.Consenti agli utenti di scrivere regole personali in un file nella loro cartella Inizio, come fa Git.

Se conosci qualcuno di Perforce, inviagli questo post via email.

Funziona a partire da Perforce 2013.1, il nuovo meccanismo P4IGNORE è stato aggiunto per la prima volta nella versione 2012.1, descritta sul blog Perforce qui:

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

Come attualmente descritto, imposti una variabile di ambiente "P4IGNORE" su un nome file che contiene un elenco di file da ignorare.

Quindi puoi verificarlo per vedere come ti piace.

Se desideri una soluzione che si applichi a tutti gli spazi di lavoro senza dover essere copiata, tu (o il tuo amministratore di sistema) potete rifiutare l'invio di tali tipi di file utilizzando righe come quelle riportate di seguito nella tabella di protezione p4:

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

Ricordo di averlo già fatto, ma non ho le autorizzazioni necessarie per testarlo qui.Guardare Guida per l'amministratore di sistema di Perforce e provalo

Perforce Streams rende molto più semplice ignorare i file, a partire dalla versione 2011.1.Secondo il documentazione, puoi ignorare determinate estensioni o determinati percorsi nella tua directory.

Da 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.

Questo essenzialmente fa ciò che specifica la risposta di @ raven, ma viene fatto più facilmente con i flussi, poiché si propaga automaticamente in ogni spazio di lavoro utilizzando quel flusso.Si applica anche a qualsiasi flusso che eredita dal flusso in cui si specificano i tipi di ignora.

Puoi modificare lo streaming tramite p4 stream //stream_depot/stream_name o facendo clic con il pulsante destro del mouse sullo stream nella visualizzazione stream di p4v.

E come ha notato @svec, la possibilità di specificare di ignorare i file per area di lavoro sarà presto disponibile, ed è effettivamente presente P4 2012.1 beta.

Il suggerimento di utilizzo di Will .p4ignore sembra funzionare solo con il plugin WebSphere Studio (P4WSAD).L'ho appena provato sul mio Windows Box locale e tutti i file e le directory che ho elencato lo erano non ignorato.

Il suggerimento di Raven di modificare le specifiche del client è il modo corretto con Perforce.Una corretta organizzazione del codice/dati/eseguibili e dei file di output generati renderà molto più semplice il processo di esclusione dei file dal check-in.

Come approccio più draconiano, puoi sempre scrivere un trigger di invio che rifiuterà l'invio di elenchi di modifiche se contengono un determinato file o file con una determinata estensione, ecc.

RISPOSTA STORICA – non più corretta.All'epoca in cui questo fu scritto originariamente era vero;

Non è possibile scrivere e archiviare un file che il server utilizzerà per ignorare le regole;il modello generale di file glob o regexp viene ignorato per forza.

Altre risposte hanno configurazioni del server globali che sono globali (e non per cartella).Le altre risposte mostrano cose che potrebbero funzionare per te, se desideri una riga nella visualizzazione per cartella moltiplicata per il numero di estensioni che desideri ignorare in quella singola cartella o che forniscono questa funzionalità solo nei plug-in WebSphere Studio o forniscono funzionalità per il server amministratori, ma non disponibile per gli utenti.

In breve, trovo Perforce davvero debole in questo ambito.Anche se apprezzo che coloro che utilizzano il plugin Eclipse possano utilizzare .p4ignore, e penso che sia fantastico, lascia quelli di noi che non lo fanno, all'oscuro.

AGGIORNAMENTO:Vedi la risposta accettata per la nuova funzionalità P4IGNORE aggiunta a metà del 2012.

Ho trovato più semplice conciliare il lavoro offline utilizzando uno script BASH come questo:

#!/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)'

L'ho adattato da questo articolo della Knowledge Base di Perforce.

Sto cercando anche una soluzione simile a .p4ignore (e non legata a un particolare IDE).Finora, la cosa più vicina che ho trovato è p4delta.Sembra che farà esattamente quello che chiedeva il poster originale, anche se attraverso un altro livello indiretto.

http://p4delta.sourceforge.net

Sfortunatamente, anche se questo sembra produrre l'elenco corretto di file, non riesco a far funzionare "p4delta --execute" ("Impossibile modificare una stringa bloccata") e il progetto non è stato aggiornato da un anno.Forse altri avranno più fortuna.

Se stai utilizzando il plugin Eclipse Perforce, allora la documentazione del plugin elenca diversi modi per ignorare i file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top