Domanda

Qualcuno ha uno script o un alias da trovare non tracciato (in realtà:non aggiunti) file in un albero Perforce?

MODIFICARE:Ho aggiornato la risposta accettata su questa poiché sembra che P4V abbia aggiunto il supporto per questo nella versione di gennaio 2009.

È stato utile?

Soluzione

MODIFICARE: Si prega di utilizzare p4 status Ora.Non è più necessario fare i salti mortali.Vedi @ColonelPanic risposta.

Nella versione di P4V di gennaio 2009, puoi fare clic con il pulsante destro del mouse su qualsiasi cartella nell'albero dello spazio di lavoro e fare clic su "Riconcilia lavoro offline..."

Questo eseguirà una piccola elaborazione quindi visualizzerà una visualizzazione ad albero diviso dei file che non sono stati estratti ma presentano differenze rispetto alla versione del depot o non sono stati archiviati affatto.Potrebbero esserci anche alcune altre categorie che vengono visualizzate.

Puoi fare clic con il pulsante destro del mouse sui file in questa visualizzazione ed estrarli, aggiungerli o persino ripristinarli.

È uno strumento molto utile che mi ha salvato il culo alcune volte.

MODIFICARE:ah la domanda è stata posta specificamente sugli script, ma lascerò qui questa risposta per ogni evenienza.

Altri suggerimenti

Su Linux o se hai gnu-tools installato su Windows:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null

Questo mostrerà un messaggio di errore per ogni file non contabilizzato.Se vuoi acquisire quell'output:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile

Sotto Unix:

find -type f ! -name '*~' -print0| xargs -0 p4 fstat 2>&1|awk '/no such file/{print $1}'

Questo stamperà un elenco di file che non sono stati aggiunti nel tuo client o nel depot Perforce.ho usato ! -name '*~' per escludere i file che terminano con ~.

Ahh, uno dei classici di Perforce :) Sì, fa davvero schifo che non esista ANCORA un modo semplice per farlo integrato nei comandi predefiniti.

Il modo più semplice è eseguire un comando per trovare tutti i file nella root del client e quindi tentare di aggiungerli al depot.Ti ritroverai con un elenco di modifiche di tutti i nuovi file e i file esistenti verranno ignorati.

Ad esempio Dir /S /B /AD | p4 -x - aggiungi

(usa "trova".-type f -print' da una riga di comando nix).

Se desideri un elenco fisico (nella console o nel file), puoi reindirizzare i risultati di un diff (o aggiungerli se li desideri anche in un elenco di modifiche).

Se lo stai eseguendo all'interno di P4Win puoi utilizzare $r per sostituire la root client dell'area di lavoro corrente.

Esiste un analogo di svn status O git status?

Si ma.

A partire dalla versione Perforce 2012.1, c'è il comando p4 status e in P4V "conciliare il lavoro offline".Tuttavia, sono entrambi molto lenti.Per escludere file irrilevanti dovrai scrivere a p4ignore.txt file per https://stackoverflow.com/a/13126496/284795

Mi sento obbligato ad aggiungere una risposta, poiché la risposta accettata, e alcune delle altre, presentano quello che ritengo sia un problema significativo:non comprendono la differenza tra un comando di query di sola lettura e un comando che apporta modifiche.

Non mi aspetto alcun merito per questa risposta, ma spero che possa aiutare gli altri a evitare di perdere tempo e commettere errori seguendo la risposta accettata ma IMHO errata.

---+ BREVE

Probabilmente il modo più conveniente per trovare tutti i file non tracciati in un'area di lavoro Perforce è p4 reconcile -na.

-a dice "dammi i file che non sono nel repository, ad es.questo dovrebbe essere aggiunto".

-n dice "non apportare modifiche" - vale a direuna prova a secco.(Sebbene i messaggi possano dire "aperto per l'aggiunta", mentalmente devi interpretarlo come "sarebbe aperto per l'aggiunta se non fosse -n")

Probabilmente il modo più conveniente per trovare tutte le modifiche locali apportate mentre sei offline: non solo i file che potrebbero dover essere aggiunti, ma anche i file che potrebbero dover essere eliminati o che sono stati modificati senza essere aperti per la modifica tramite p4 edit, È p4 reconcile -n.

Diverse risposte hanno fornito script, spesso coinvolgenti p4 fstat.Anche se non ho verificato tutti questi script, utilizzo spesso script simili per compensare le carenze dei comandi perforce come p4 reconcile -n - per esempio.spesso trovo che desidero percorsi locali anziché percorsi di deposito Perforce o percorsi di spazio di lavoro.

---+ ATTENZIONE

p4 status NON è la controparte dei comandi di stato su altri sistemi di controllo della versione.

p4 status NON è una query di sola lettura. p4 status in realtà trova lo stesso tipo di modifiche che p4 reconcile lo fa e li aggiunge al repository. p4 status non sembra avere a -n opzione di prova come p4 reconcile fa.

Se fate p4 status, guarda i file e pensa "Oh, non mi servono", quindi dovrai farlo p4 revert se desideri continuare a modificare nella stessa area di lavoro.Oppure cambia la situazione p4 status aggiunto al tuo changeset verrà controllato la prossima volta.

Sembra che ci sia poco o nessun motivo per usarlo p4 status piuttosto che p4 reconcile -n, ad eccezione di alcuni dettagli dell'area di lavoro locale rispetto al percorso del depot.

Posso solo immaginare che chiunque abbia scelto "status" per un comando non di sola lettura avesse una padronanza limitata della lingua inglese e di altri strumenti di controllo della versione.

---+ P4V GUI

Nella GUI p4v, il comando reconcile trova le modifiche locali che potrebbero dover essere aggiunte, eliminate o aperte per la modifica.Fortunatamente non li aggiunge a un elenco di modifiche per impostazione predefinita;ma potresti comunque voler fare attenzione a chiudere la finestra di riconciliazione dopo averla ispezionata, se non vuoi confermare le modifiche.

Nel mio strumento utilizzo quanto segue per eseguire il backup di tutti i file nell'area di lavoro che differiscono dal repository (per Windows).Gestisce alcuni casi strani che a Perforce non piacciono molto, come spazi vuoti incorporati, stelle, percentuali e segni di cancelletto:

dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- have 1>NUL:

"dir /S /B /A-D" elenca tutti i file presenti in questa cartella o al di sotto di essa (/S) in formato "nudo" (/B) escluse le directory (/ANNO DOMINI).IL "sed" cambia i personaggi pericolosi in "%xx" (tipo HTML) e il "p4 hanno" il comando controlla questo elenco ("-X-") contro il server che scarta qualsiasi cosa riguardante i file che effettivamente individua nel repository ("1>NULL:").Il risultato è un insieme di righe come:

Z:\No_Backup\Workspaces\full\depot\Projects\Archerfish\Portal\Main\admin\html\images\nav\navxx_background.gif - file(s) not on client.

Et voilà!

In alternativa da P4Win, utilizzare l'opzione "File locali non nel depot" nel pannello di visualizzazione a sinistra.

Non utilizzo molto P4V, ma penso che l'equivalente sia selezionare "Nascondi file dell'area di lavoro locale" nel menu a discesa del filtro della scheda Vista area di lavoro.p4 help fstat

In P4V 2015.1 troverai queste opzioni sotto il pulsante filtro in questo modo:enter image description here

Veloce e sporco:In p4v fai clic con il pulsante destro del mouse sulla cartella in questione e aggiungi tutti i file sottostanti a un nuovo elenco di modifiche.L'elenco delle modifiche ora conterrà tutti i file che non fanno attualmente parte del depot.

I seguenti comandi producono un output simile allo stato, ma nessuno è del tutto equivalente a svn status O git status, fornendo un riepilogo di una riga dello stato di ciascun file:

  • p4 status
  • p4 opened
  • p4 diff -ds

Non ho abbastanza punti reputazione per commentare, ma la soluzione di Ross elenca anche i file aperti per l'aggiunta.Probabilmente lo fai non vuoi usare la sua risposta per pulire il tuo spazio di lavoro.

I seguenti usi p4 fstat (grazie Mark Harrison) invece di p4 have, ed elenca i file che non sono nel depot E non sono aperti per l'aggiunta.

dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- fstat 2>&1 | sed -n -e "s/ - no such file[(]s[)]\.$//gp"

===Jac

Metodo veloce, ma poco ortodosso.Se la codebase non aggiunge nuovi file/cambia visualizzazione troppo spesso, puoi creare un repository 'git' locale fuori dal tuo checkout.Da una sincronizzazione Perforce pulita, git init, aggiungi e conferma tutti i file localmente.Lo stato di Git è veloce e mostrerà i file non precedentemente salvati.

IL p4 fstat Il comando ti consente di verificare se esiste un file nell'area di lavoro, combinalo con find per individuare i file da controllare come nel seguente esempio Perl:

// throw the output of p4 fstat to a 'output file'
// find:
//  -type f  :-  only look at files,
//  -print0  :-  terminate strings with \0s to support filenames with spaces
// xargs:
//  Groups its input into command lines,
//  -0       :-  read input strings terminated with \0s
// p4:
//  fstat    :-  fetch workspace stat on files

my $status=system "(find . -type f -print0 | xargs -0 p4 fstat > /dev/null) >& $outputFile";

// read output file
open F1, $outputFile or die "$!\n";

// iterate over all the lines in F1
while (<F1>) {
  // remove trailing whitespace
  chomp $_;

  // grep lines which has 'no such file' or 'not in client'
  if($_ =~ m/no such file/ || $_ =~ m/not in client/){

     // Remove the content after '-'
     $_=~ s/-\s.*//g;

     // below line is optional. Check ur output file for more clarity.
     $_=~ s/^.\///g;

     print "$_\n";
  }
}

close F1;

Oppure puoi usare p4 reconcile -n -m ...

Se è "aperto per l'eliminazione", significa che è stato rimosso dall'area di lavoro.Tieni presente che il comando precedente è in esecuzione in modalità anteprima (-n).

Avevo bisogno di qualcosa che funzionasse su Linux, Mac o Windows.Quindi ho scritto uno script Python per questo.L'idea di base è scorrere i file ed eseguirli p4 fstat su ciascun.(ovviamente ignorando dipendenze e cartelle tmp)

Potete trovare qui: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9

In P4V, sotto la voce di menu "Visualizza" scegli "File nella cartella" che fa apparire una nuova scheda nel riquadro di destra.All'estrema destra delle schede c'è una piccola icona che fa apparire una finestra chiamata "File nella cartella" con 2 icone.Seleziona l'icona a sinistra che assomiglia a un imbuto e vedrai diverse opzioni.Scegli "Mostra elementi non nel deposito" e verranno visualizzati tutti i file nella cartella.Quindi fai semplicemente clic con il pulsante destro del mouse sul file che desideri aggiungere e scegli "Segna per aggiungere...".Puoi verificare che sia presente nella scheda "In sospeso".Invia semplicemente normalmente (Ctrl+S).

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