Puoi "ignorare" un file in Perforce?


101

A volte utilizzo la funzione "Reconcile Offline Work ..." che si trova nell'IDE P4V di Perforce per sincronizzare i file su cui ho lavorato mentre ero disconnesso dal depot P4. Lancia un'altra finestra che esegue una 'Folder Diff'.

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


Potresti fornire un esempio dell'output di CVS in modo che possiamo vedere cosa intendi e perché le risposte fornite non fanno quello che vuoi?
Greg Whitfield

2
Nel forum dell'idea di Perforce, puoi votare un suggerimento per elenchi di ignoranza in
Colonel Panic

Premi "Riconcilia lavoro non in linea", deseleziona "File locali non in deposito", premi "Riconcilia". Finché non stai aggiungendo file, probabilmente è la soluzione più rapida.
corsia

Risposte:


59

A partire dalla versione 2012.1, Perforce supporta la P4IGNOREvariabile d'ambiente. Ho aggiornato la mia risposta a questa domanda sull'ignorare le directory con una spiegazione di come funziona. Poi ho notato questa risposta, che ora è superflua immagino.


Supponendo che tu abbia un client chiamato "CLIENT", una directory chiamata "foo" (situata nella radice del tuo progetto), e desideri ignorare tutti i file .dll in quell'albero di directory, puoi aggiungere le seguenti righe alla visualizzazione del tuo spazio di lavoro per completare 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 lavoro non in linea ...", tutti i file .dll verranno spostati nelle cartelle "File esclusi" nella parte inferiore della visualizzazione delle differenze delle cartelle. Saranno fuori mano, ma potranno comunque visualizzarli e manipolarli se necessario.

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 vuoi solo eliminarli a modo tuo, non importa).

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

30
Sebbene funzioni, non è molto utile in quanto dovrai inserire queste linee in ogni spazio di lavoro che crei.
dgrant

6
Nota: questo non funziona per il normale lavoro offline di riconciliazione da p4v. I "file esclusi" sembrano essere solo nella finestra di riconciliazione "avanzata" ...
Catskul

6
Il filtro di esclusione non funziona all'interno della Reconcile Offline Workfinestra di dialogo. Funziona se lo apri all'interno Advanced Reconcile...ma è inutile perché nel 99,9% delle volte non hai bisogno o vuoi usare la finestra di dialogo avanzata.
sorin

12
@raven: 1) (Esempio :) Alcuni progetti usano le cartelle bin / obj sotto ogni progetto invece di averle in una posizione centrale. (Conclusione generalizzata :) L'ipotesi di Perforce che tutti i file intermedi siano collocati in una posizione di spazio di lavoro facilmente esclusa è un progetto inutilmente restrittivo per un VCS da realizzare. 2) Alcuni progetti coinvolgono la cache locale e / o altri file generati per utente nella struttura della directory (ad esempio, la cache * .ncb IntelliSense). L'impossibilità di escluderli come criterio comune compromette gravemente le funzionalità Riconcilia lavoro non in linea e Cartelle differenze.
Sam Harwell

6
Questo particolare problema mi sta uccidendo.
Warren P

47

Si ma.

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

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

Inoltre, la funzione di ignora di Perforce non funziona immediatamente. Puoi configurarlo abbastanza facilmente per te stesso, ma gli altri non ne traggono vantaggio a meno che non decidano esplicitamente. Un contributore che non l'ha fatto potrebbe accidentalmente inviare file indesiderati (ad es. Una bincartella creata da uno script di compilazione).

La funzione ignora di Git è fantastica perché funziona fuori dagli schemi. Se i .gitignorefile vengono aggiunti al repository ( tutti lo fanno ), funzioneranno per tutti. Nessuno pubblicherà accidentalmente la propria chiave privata.

In modo divertente, la documentazione di Perforce mostra ".p4ignore" come esempio di ignorare la regola, che è al contrario! Se le regole sono utili, dovrebbero essere condivise come parte del repository.


Perforce potrebbe ancora migliorare la funzionalità. Scegli una convenzione per i nomi dei file, ad esempio p4ignore.txt, in modo che la funzionalità funzioni fuori dagli schemi. Lascia perdere la P4IGNOREvariabile ambientale, è 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 home, come fa Git .

Se conosci qualcuno in Perforce, inviagli questo post tramite e-mail.


2
Grazie per il chiarimento. Ho provato a utilizzare .p4ignore con P4VS ma la mia soluzione che avrebbe dovuto essere ignorata non è stata ignorata. Per prima cosa ho pensato di fare qualcosa di sbagliato. Adesso lo so meglio.
Michael S.

1
@gentlesea, a partire da Perforce 2013.1, la funzione ignora finalmente funziona nell'app grafica.
Colonel Panic

2
Discussione "Fai in modo che la funzione di ignora risolva la situazione
Colonel Panic

1
Per le variabili di configurazione che differiscono in base all'area di lavoro che stai utilizzando, prova a utilizzare i file P4CONFIG. Quindi puoi fare in modo che il tuo file P4CONFIG specifichi un valore P4IGNORE diverso mentre ti sposti dallo spazio di lavoro allo spazio di lavoro.
Bryan Pendleton

2
Perforce non sa come costruire un software adeguato, non ottiene nemmeno le basi. Ecco perché tutti quelli che sono bloccati con il sogno di forza di passare a Git.
Pavel P

22

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

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

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

Quindi puoi controllarlo per vedere come ti piace.


1
Puoi anche includere nomi di directory, non solo nomi di file.
ceneri999

Come accennato in precedenza: purtroppo DEVI impostare P4IGNORE.
Technophile

1
Ho corretto il collegamento @DerMike: immagino che Perforce abbia cambiato gli URL del blog.
svec

7

Se desideri una soluzione che si applichi a tutti gli spazi di lavoro senza bisogno di essere copiata, tu (o il tuo amministratore di sistema) puoi rifiutare l'invio di quei tipi di file usando linee come quelle sotto nella tabella di protezione p4:

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

Ricordo di averlo fatto prima, ma non ho le autorizzazioni necessarie per testarlo qui. Dai un'occhiata alla guida dell'amministratore di sistema di Perforce e provalo


3
Sfortunatamente questo causa errori durante l'invio piuttosto che ignorare la visualizzazione di riconciliazione. Quindi può tenere determinati file fuori da un repository, ma non può aiutare gli utenti a non vedere il rumore.
Warren P

6

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

A partire dal 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 è fatto più facilmente con i flussi, poiché si propaga automaticamente a ogni spazio di lavoro che utilizza quel flusso. Si applica anche a tutti i flussi che ereditano dal flusso in cui si specificano i tipi da ignorare.

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

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


Sì, questo funziona per me condividere le impostazioni "ignora" in un team (sto usando p4 2013.2). Notare che funziona solo in un depot abilitato ai flussi. (Se riesci a propagare la variabile di ambiente P4IGNORE = .p4ignore in tutto il tuo team, questa è probabilmente la soluzione migliore.)
yoyo

1
Si noti che il campo Ignorato per un flusso può essere utilizzato per ignorare una cartella, un file o un'estensione di file specifici, ma il supporto dei caratteri jolly è limitato e non è possibile ignorare un'intera cartella e quindi "annullare l'ignoramento" di file o sottocartelle specifici. (A partire dalla versione 2013.2 del server p4)
yoyo

3

Il suggerimento di Will di utilizzare .p4ignoresembra funzionare solo con il plugin WebSphere Studio (P4WSAD). L'ho appena provato sulla mia finestra locale di Windows e tutti i file e le directory che ho elencato non sono stati ignorati.

Il suggerimento di Raven di modificare le specifiche del cliente è il modo corretto in Perforce. Una corretta organizzazione del codice / dati / eseguibili e dei file di output generati renderà il processo di esclusione dei file dall'archiviazione molto più semplice.

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.


15
Sono completamente in disaccordo con l'intera dichiarazione "La corretta organizzazione del codice ...". Il nocciolo della questione è che, seguendo la convenzione di Perforce di modificare lo spazio di lavoro, ogni utente deve apportare la modifica. Considerando che, un vero file .p4ignore verrebbe creato / gestito solo una volta.
Mike

9
Oh, e per non parlare, ti piace ramificare il tuo codice? Buona fortuna a mantenere i tuoi spazi di lavoro per ogni ramo. Sembra divertente!
Mike

2

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

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

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

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

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


1

Ho trovato più semplice riconciliare 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 .


È stato sette anni fa, non sono sorpreso. Sono sorpreso che qualcuno stia ancora utilizzando Perforce.
kevin cline

... non per scelta: '(
DerMike

0

Sto cercando anche una soluzione simile a .p4ignore (e non legata a un IDE particolare). 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 di indirezione.

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 congelata") e il progetto non è stato aggiornato da un anno. Forse altri avranno più fortuna.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.