Domanda

Ho uno script di build automatizzato cresciuto in casa sotto forma di un file batch DOS. In parte di quello script, controllo (con " svn checkout ") una sezione del nostro repository SVN che include un mucchio di materiale di terze parti che viene utilizzato nei nostri progetti. Questo file batch ha funzionato abbastanza bene per molto tempo, ma ora le persone hanno registrato un sacco di lanugine (documenti, codice di esempio, ecc.) Nell'area di terze parti e la parte di checkout di questo script è diventata molto più lenta. Vorrei mitigarlo controllando solo le cose di cui abbiamo bisogno - principalmente file dll nel nostro caso. Quindi, la mia domanda è questa: qual è il modo migliore per controllare un repository SVN filtrato per estensione?

Non ho visto alcun modo ovvio per farlo nell'aiuto svn. Ho una libreria di utilità .NET che avvolge svn.exe in qualche modo e stavo pensando di estenderlo per recuperare solo il contenuto che corrispondeva alle mie estensioni di interesse. Preferirei usare un metodo più semplice o esistente se ne esiste uno.

È stato utile?

Soluzione

Questo è possibile: puoi svn checkout una directory vuota, quindi svn aggiorna il nome file per ogni file che desideri .

Il tuo script può fare qualcosa del tipo:

  1. svn checkout svn: // path / to / repos / directory --depth vuoto
  2. svn list --recursive svn: // path / to / repos / directory
  3. Installa il risultato attraverso un filtro che rimuove le estensioni di file proibite, ad es. grep
  4. Scorri su questo nuovo elenco filtrato e svn update --parents ogni file

Ciò darebbe il risultato desiderato di una copia funzionante senza determinati file o estensioni di file.

Naturalmente, c'è anche il problema che menzioni di & # 8220; persone [che controllano] in un sacco di lanugine & # 8221; ma questa è una questione separata.

Altri suggerimenti

Come ho detto a qui , c'è solo un'opzione integrata nello stesso SVN: una nuova funzione in SVN 1.5 chiamato checkout sparse , tuttavia è possibile selezionare il checkout solo a livello di directory, quindi è necessario ordinare i file non necessari in una directory diversa.

Non è possibile estrarre solo alcuni file specifici, è possibile estrarre solo un'intera cartella. Puoi riorganizzare l'organizzazione di ciò che stai verificando, oppure puoi semplicemente copiare una copia funzionante da qualche altra parte e aggiornarla.

Per un'implementazione specifica di PowerShell della risposta da Michael Hackner , prova qualcosa del tipo:

svn ls http://svn-server/src --recursive | Out-File svn.txt
Get-Content .\svn.txt | where {

Per un'implementazione specifica di PowerShell della risposta da Michael Hackner , prova qualcosa del tipo:

<*>

Il mio caso d'uso particolare è trovare un mucchio di file con nomi simili (in questo caso * special.xml) e scaricarli tutti in una singola cartella, con nomi essenzialmente univoci. Ho usato un file intermedio per memorizzare l'intero elenco di repository, ma anche questo potrebbe essere sottolineato se è meglio per te.

.toLower().EndsWith('special.xml')} | select -First 200 | foreach {New-Object PSObject -Property @{ Path =

Per un'implementazione specifica di PowerShell della risposta da Michael Hackner , prova qualcosa del tipo:

<*>

Il mio caso d'uso particolare è trovare un mucchio di file con nomi simili (in questo caso * special.xml) e scaricarli tutti in una singola cartella, con nomi essenzialmente univoci. Ho usato un file intermedio per memorizzare l'intero elenco di repository, ma anche questo potrebbe essere sottolineato se è meglio per te.

; Munged =

Per un'implementazione specifica di PowerShell della risposta da Michael Hackner , prova qualcosa del tipo:

<*>

Il mio caso d'uso particolare è trovare un mucchio di file con nomi simili (in questo caso * special.xml) e scaricarli tutti in una singola cartella, con nomi essenzialmente univoci. Ho usato un file intermedio per memorizzare l'intero elenco di repository, ma anche questo potrebbe essere sottolineato se è meglio per te.

.Replace('/', '_') } } | foreach { svn export "http://svn-server/src/$(

Per un'implementazione specifica di PowerShell della risposta da Michael Hackner , prova qualcosa del tipo:

<*>

Il mio caso d'uso particolare è trovare un mucchio di file con nomi simili (in questo caso * special.xml) e scaricarli tutti in una singola cartella, con nomi essenzialmente univoci. Ho usato un file intermedio per memorizzare l'intero elenco di repository, ma anche questo potrebbe essere sottolineato se è meglio per te.

.Path)" $(

Per un'implementazione specifica di PowerShell della risposta da Michael Hackner , prova qualcosa del tipo:

<*>

Il mio caso d'uso particolare è trovare un mucchio di file con nomi simili (in questo caso * special.xml) e scaricarli tutti in una singola cartella, con nomi essenzialmente univoci. Ho usato un file intermedio per memorizzare l'intero elenco di repository, ma anche questo potrebbe essere sottolineato se è meglio per te.

.Munged) }

Il mio caso d'uso particolare è trovare un mucchio di file con nomi simili (in questo caso * special.xml) e scaricarli tutti in una singola cartella, con nomi essenzialmente univoci. Ho usato un file intermedio per memorizzare l'intero elenco di repository, ma anche questo potrebbe essere sottolineato se è meglio per te.

Ho appena provato l'approccio presentato da Michael Hackner. Di seguito è riportata l'implementazione per un sistema DOS. Si noti che è necessario verificare la cartella vuota prima di eseguire questo script.

@echo off

svn list --recursive https://path_to_repository_folder | find /I ".sql" > filelist.txt

REM Specify a custom delim. Otherwise space in filename will be treated as a delimiter.
FOR /F "delims=|" %%i  IN (filelist.txt) DO (
    echo -------------
    echo %%i
    svn update --parents "%%i"
)

Il modo più semplice e corretto per farlo: NON FARLO!

Se c'è qualche schifezza nella cartella di terze parti in cui si suppone che ci siano file .dll che devono essere verificati, rimuovili in una posizione diversa! Non appartiene comunque qui.

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