In base alla tua domanda, stai implicitamente qualificando la tua richiesta a file cancellati (perché presumibilmente se non viene cancellato una semplice ricerca di directory lo rivelerebbe). Il commento di Pigro Badger è degno: rimuovere la qualifica senza perdere precisione e semplificando così il comando. Sono tutto a favore della semplificazione ma, considerato il problema, mi piace anche considerare di ottenere di più da una soluzione con un piccolo costo aggiuntivo.
Quindi, a partire con la soluzione proposta:
svn log -v a/b/ | grep " D .*a/b/c.xml"
Desidero in primo luogo aggiungere l'opzione -q
, che ha ridotto in uscita che si sta solo scartando ogni caso:
svn log -v -q a/b/ | grep " D .*a/b/c.xml"
E poi vorrei per sapere non solo se c'era un tale file cancellato ma anche quando è stato cancellato (cioè in quale revisione). Dal momento che anche implicitamente qualificato l'ambiente per Unix/Linux, ecco una soluzione con awk (adattato da questa blog entry):
svn log -q -v a/b/ | awk '
/^r[0-9]* \|/ { REVISION=$1; }
/D/ { print REVISION": "$0; }
' | grep " D .*a/b/c.xml"
che funziona a causa del formato del svn log
uscita quando viene utilizzato il parametro –v
: si riporta una revisione seguita da tutti i file in quella revisione. Ecco un esempio che mostra che il file Page.cs stato eliminato nella revisione 10506:
r10506 | msorens | 2011-02-14 12:58:56 -0800 (Mon, 14 Feb 2011) | 1 line
Changed paths:
A /Projects/Test/Common
A /Projects/Test/Common/Setup.cs
A /Projects/Test/Common/Utility.cs
D /Projects/Test/Page.cs
I comandi awk di cui sopra uscita parse in questo formato l'estrazione del numero di revisione dalla riga superiore, allora tutti i file contrassegnati come eliminati (il “D " Linee). Per Windows, PowerShell fornisce la stessa potenza e facilità d'uso come awk utilizzando l'istruzione switch:
$(switch -Regex (svn log -q -v a/b) {
'^(r[0-9]*) \|' { $rev = $Matches[1] }
'^ D\s+(.*)' { "{0,-6} {1}" -f $rev, $Matches[1] }
}) | Select-String "a/b/c.xml"
Ma c'è un modo più semplice con TortoiseSVN --- basta aprire la finestra di log nella directory principale del tuo lavoro copia e digita il nome del file nella casella di ricerca. L'elenco delle revisioni si limita a filtrare in base a ciò che scrivi. Se mostra più di una riga di output, la revisione più recente (quella più in alto) sarà sempre quella in cui il file è stato cancellato.
svn log -q -v | nome file grep | wc -l –