2010-04-25 9 views
8

Ogni volta che qualcuno chiede cosa fare con il codice che non è più necessario, la risposta è solitamente "delete it, restore it from source control if you need it back".Come trovo il codice utile precedentemente eliminato ma ancora memorizzato nel controllo sorgente?

Ora come posso trovare quel pezzo di codice sorgente nel repository? Limitiamo l'ambito a SVN per semplicità - sospetto che l'utilizzo di qualsiasi altro sistema di controllo del codice sorgente non faccia molta differenza in questo aspetto (correggimi se sbaglio).

Se cancello che il codice e confermare le modifiche non sarà più essere nell'ultima revisione. Come faccio a trovarlo senza esportare ogni revisione e ricerca approfondita (che è quasi impossibile)?

+0

La risposta a questo è VCS dipendente, VSS, CVS, SNV, TFS, ClearCase, ... ognuno avrà la propria risposta. – Richard

+5

@Richard: è contrassegnato come 'svn' e dice *" Limitiamo l'ambito a SVN ... "* nel testo. –

risposta

3

La risposta più corretta è: non si può.Ci sono metodi per aiutarvi in ​​questo compito, ma è impossibile fare l'automaticamente, perché:

  • non si sa quali file si trova in
  • non si conosce il codice sorgente o parti di esso
  • non si ricorda quando è avvenuta la rimozione del codice.
  • ...

un computer non può leggere la nostra mente. Detto questo, ci sono naturalmente altri strumenti che ti aiutano, come quelli citati, o front end grafici come trac (che mi piace molto per questo scopo).

3

Il modo in cui lo faccio è pensare a una data in cui ho saputo il codice che mancava era attiva, e prendere l'intero albero dei sorgenti come lo era in quella data. Se ottengo la data sbagliata, andrò a x giorno/settimane/mesi su entrambi i lati finché non avrò zero su di esso.

svn checkout --revision {2002-02-17} 
5

È necessario utilizzare uno strumento di differenza, la maggior parte dei repository svn li ha. Fare clic con il tasto destro sul file che si desidera ripristinare e scegliere "diff" o "differenza" o simile (spesa per l'implementazione) e quindi chiederà di confrontare la versione corrente con una versione precedente - se si conosce la data approssimativa della versione precedente quindi scegli quella versione (i timbri data/ora sono generalmente ovvi) e vedrai le due versioni affiancate. È quindi possibile scegliere quali bit sono diversi (di solito colorati in rosso) fare clic destro su di essi e scegliere di integrarli.

Lo strumento client che si sta utilizzando per SVN determinerà i dettagli.

4

Un altro modo è quello di cercare i messaggi di log - si presumibilmente lasciato un commento un po 'sulla falsariga di:

Rimosso funzionalità XYZ

quando hai fatto il cambiamento.

+0

Questo è un caso che mi aiuta a insegnare ai junior l'importanza di usare messaggi di commit descrittivi. Uno deve sperimentare il dolore di trovare qualcosa nella storia almeno una volta, prima che affondi. – Ether

2

Presumibilmente, i commenti del codice o commenti di revisione hanno parole chiave per indirizzare il frammento di codice che si sta cercando:

SVN Query - http://svnquery.tigris.org/

"SvnQuery è un veloce completo motore di ricerca repository subversion Cerca tutti i file in ogni revisione Non solo il contenuto di un file è indicizzato, ma anche il suo metadati completi come percorso, autore, co e proprietà. Viene fornito un semplice front-end Web simile a Google, ma si prevede che la libreria di query e il meccanismo di indicizzazione possano essere riutilizzati in altri frontend, ad es. un servizio Web o un plug-in di Visual Studio.

SvnQuery è implementato in C# 3.0 e ASP.NET viene utilizzato per il frontend web. La ricerca di testo completo viene eseguita da Lucene.Net che offre prestazioni sorprendenti. ..."

Il linguaggio di query viene descritto qui:
http://svnquery.tigris.org/servlets/ProjectProcess?pageID=o0dpdE&freeformpage=SvnWebQueryHelp

0

ho il sospetto che l'utilizzo di qualsiasi altro sistema di controllo del codice sorgente non farà molta differenza in questo aspetto (correggetemi se sbaglio).

Questo è sbagliato. Il controllo della versione distribuita (ad es. Git o hg) può farlo in modo relativamente efficiente.

In git, ad esempio, per trovare una funzione cancellata denominata foo, è possibile fare git log -S foo, che mostrerà tutti i commit che aggiungono o rimuovono le righe che contengono "pippo".

Se si desidera attenersi alla limitazione SVN arbitraria per qualche motivo, clonare prima il repository SVN con git-svn.

Problemi correlati