2010-10-13 14 views
15

Il seguente problema sta diventando sempre più comune:Trova file non aggiunti alla sovversione

  • Ci sono diversi sviluppatori che lavorano su un progetto che comprende i nuovi file (di solito le immagini)
  • Tutti dicono che tutto è registrato e congeliamo lo sviluppo. A nostra insaputa, ci sono immagini che non sono state archiviate. L'utente non nota i file mancanti perché sono nuovi, non check-out, quindi svn sembra buono
  • Il codice è compilato e distribuito (scusate, no team di QA)
  • il giorno successivo il cliente ci racconta le immagini mancanti
  • il CTO ci legge l'atto di tumulto

Nota: i percorsi delle immagini sono sia nel codice e nei database quindi non è facile ottieni un elenco completo di tutte le immagini utilizzate.

La mia speranza è di scrivere un piccolo programma C# da far eseguire a tutti prima della distribuzione. Voglio scoprire quali file nella directory del progetto (o uno dei suoi subdir.s, in modo ricorsivo) non sono stati aggiunti a subversion. Idealmente, mi piacerebbe anche escludere gli articoli che sono stati aggiunti attivamente alla lista di ignora.

Utilizziamo TortoiseSVN con host e client Windows.

Come posso scoprire a livello di codice file non aggiunti?

La cosa più vicina che ho potuto trovare fino ad ora è this dicendo di usare svn status | grep -e ^? ma sembra un comando Unix.

+4

Non è una risposta, ma quando ho commesso via Tortoise, ho sempre la "Mostra senza versione file "casella selezionata. Mostra tutti i file nella directory che non sono stati ancora aggiunti e mi ricorda di controllarli. Le cose che vuoi ignorare (.suo, .user, file ReSharper, ecc.) Possono essere ignorate una volta, e impedirà a questo di rovinare i dati diff, lasciando solo i veri file non controllati. –

+5

Sembra un problema per me. "Tutti dicono che tutto è archiviato" non è abbastanza, la prossima persona per rompere la build dovrebbe pagare 10 $ (salvadanaio per la squadra). Creare uno strumento per verificare se un altro strumento è usato correttamente suona molto male. –

+4

Non importa quanto ci proviamo, almeno qualche volta spezzeremo la build. (Cercare così tanto che non lo rompiamo MAI è una perdita di tempo). Questa è una buona domanda perché, nella mia esperienza, l'errore di controllo # 1 è la mancanza di nuovi file. – doug65536

risposta

6

si potrebbe utilizzare SharpSvn per questo, e scrivere qualcosa di simile:

SvnClient client = GetClient(); 

client.Status(workingCopyPath, (o, e) => 
{ 
    if(e.LocalContentStatus == SvnStatus.NotVersioned) 
    { 
     Console.WriteLine("Not versioned: " + e.FullPath); 
    } 
}); 

Edit: questo sarà anche rispettare la vostra ignorare file e la svn:ignore proprietà.

+0

Grazie per il suggerimento. Questa libreria sembra potrebbe essere esattamente ciò di cui ho bisogno. A causa della sua terribile mancanza di documentazione o di esempi, non riesco a capire come usarlo, ma continuerò a giocarci. – Dinah

13
svn status | grep -e ^? 

E 'comando UNIX, ma sono abbastanza sicuro, che se si esegue il commit da Tortoise, si è in grado di vedere i nuovi file con il punto interrogativo, che sono file che non sono sotto il controllo svn

+1

la ricerca di file con il punto interrogativo in Tortoise non è una soluzione programmatica al problema. –

+1

Volevo solo mostrare, potrebbe esserci un problema in un altro luogo ... – Ency

+0

Trovato utile a prescindere! – Rob

1

è possibile installare il CollabNet Subversion Command-Line Client, quindi eseguire il suo comando svn come un sottoprocesso, pipe il suo ingresso nel vostro programma, e la ricerca di righe che hanno ? come il loro primo carattere (che indicano sconosciuto/non controllato in Subversion e non ignorato). È possibile utilizzare il client della riga di comando di CollabNet insieme a TortoiseSVN.

Questa è la stessa cosa che fa svn status | grep -e ^?, ma non dipende dagli strumenti Unix.

In alternativa, è possibile installare solo Cygwin e disporre della gamma completa di strumenti Unix disponibili.

7

Il codice viene compilato e distribuito (mi dispiace, nessuna squadra QA)

non è questo il vero problema qui?Se stai spedendo codice non testato a un cliente, ovviamente la prima persona a scoprire eventuali problemi sarà il cliente. Forse (oltre a risolvere questo particolare problema) ciò che devi fare è aggiungere almeno alcuni test di funzionalità automatici (o manuali) di base nel tuo processo di compilazione, a volte tra quando il codice viene compilato e quando viene consegnato al client.

+1

Non posso certamente discutere con voi qui, ma il mio potere in questa materia è estremamente limitato. – Dinah

+1

I tuoi sviluppatori soffrono quando non hanno test. I test ti danno la libertà dalla paura di toccare le cose. – doug65536

8

Questa domanda è contrassegnata come tortoisesvn quindi presumo che il tuo team stia utilizzando TortoiseSVN come client. Come suggerito da @Joe Enos, TortoiseSVN visualizza i file non verificati che non corrispondono alle voci in svn:ignore. Mi chiedo se l'aggiunta di un altro strumento possa essere d'aiuto in quanto il team dovrebbe già verificare la presenza di file non verificati con TortoiseSVN.

In caso contrario, un programma C# sembra eccessivo per la ricerca di file non verificati in una directory di lavoro SVN. Come suggerito da @Josh Kelley, è sufficiente utilizzare un client SVN da riga di comando (CollabNet o Slik SVN, ad esempio) e grep.

È anche possibile utilizzare il comando findstr disponibili nella riga di comando di Windows:

svn status | findstr "^?" 
+0

Il trucco findstr è eccellente! Grazie a te ora ho un file batch che può dirmi ogni file che è stato aggiunto o cancellato tra alcune revisioni. 'svn diff -r REVNO: HEAD --summarize | findstr "^ A"> AddedFiles.txt' 'svn diff -r REVNO: HEAD --summarize | findstr "^ D"> DeletedFiles.txt' Basta cambiare REVNO e HEAD in qualsiasi range tu voglia. Grazie anche a questa pagina: http://muffinresearch.co.uk/archives/2008/09/15/svn-tip-get-list-of-files-changed-between-revisions/ –

+0

Ho eseguito questo comando non compare nulla stato svn | findstr "^?" – HaBo

0

Inoltre è possibile modificare una delle impostazioni che vi mostrerà le cartelle con i nuovi file aggiunti come modificata.

Impostazioni-> Icon Overlays-> Mostra sovrapposizione per la voce sotto controllo di versione

pulsante destro del mouse nella cartella, quindi navigare TortoiseSVN - Impostazioni. Clicca su "Icon Overlays". Al momento del check destra - 'file senza versione segnano cartella principale come modificato'

Questo funziona su Windows7, non provato con altri sistemi operativi

Problemi correlati