Posso ignorare una cartella in svn checkout? Devo ignorare la cartella DOC al momento del checkout sul mio server di compilazione.
modifica: ignorare gli elementi esterni non è un'opzione. Ho alcuni elementi esterni di cui ho bisogno.
Posso ignorare una cartella in svn checkout? Devo ignorare la cartella DOC al momento del checkout sul mio server di compilazione.
modifica: ignorare gli elementi esterni non è un'opzione. Ho alcuni elementi esterni di cui ho bisogno.
Risposte:
Non puoi ignorare direttamente le cartelle in un checkout, ma puoi utilizzare checkout sparsi in svn 1.5. Per esempio:
$ svn co http://subversion/project/trunk my_checkout --depth immediates
Questo controllerà i file e le directory dal tronco del tuo progetto in 'my_checkout', ma non ricorserà in quelle directory. Per esempio:
$ cd my_checkout && ls
bar/ baz foo xyzzy/
Quindi, per visualizzare il contenuto di "bar":
$ cd bar && svn update --set-depth infinity
svn: Shallowing of working copy depths is not yet supported
Sì, puoi usare SVN 1.6. Dovrai prima fare un checkout, quindi contrassegnare la cartella per l'esclusione, quindi eliminare la cartella indesiderata.
svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs
D'ora in poi, qualsiasi aggiornamento alla copia di lavoro non ripopolerà la cartella dei documenti.
Vedi http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/ e http://subversion.apache.org/docs/release-notes/1.6.html#sparse- esclusione di directory per maggiori dettagli.
Tom
Con le versioni precedenti alla 1.5 ho scoperto che se si esegue il checkout solo della cartella più in alto e quindi si aggiorna selettivamente, da quel momento in poi gli aggiornamenti hanno effetto solo su ciò che è stato estratto. Cioè.
svn co -N foo
cd foo
svn up -N bar
svn up
Il flag -N rende l'operazione non ricorsiva. Quanto sopra non controllerà nient'altro a livello foo, ad es. diciamo che c'è una cartella lala
, l'ultimo svn up non controllerà quella cartella, ma si aggiornerà bar
.
Ma in un secondo momento puoi svn up lala
e quindi aggiungerlo alla cassa.
Presumibilmente funziona anche con 1.5.
Potresti mettere la cartella dei documenti in un repository esterno e poi usare svn checkout --ignore-externals
.
external repository
significhi. Puoi spiegarlo?
Sì, Subversion 1.5 ha una funzionalità chiamata Sparse checkouts che può fare esattamente questo genere di cose.
Ho trovato questa domanda cercando un modo per controllare i sorgenti WebKit escludendo i test di regressione. Ho finito con quanto segue:
svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
--depth immediates
cd WebKit
find . \
-maxdepth 1 -type d \
-not -name '.*' \
-not -name '*Tests' \
-not -name 'Examples' \
-not -name 'Websites' \
| (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)
Nota che puoi modificare le esclusioni come meglio credi, ma. * Si consiglia di saltare la directory di lavoro (che è già aggiornata) e tutte le directory .svn.
Recentemente ho risolto lo stesso compito. L'idea è di ottenere l'elenco immediato di cartelle / file sotto il repository escludendo le voci necessarie, quindi controllare le cartelle rimanenti e aggiornare i file immediati se presenti. Ecco la soluzione:
# Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
# This files are to be excluded (folders are ending with '/')
# this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
# Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
# Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
# Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
# Initial nonrecursive checkout of repository - just empty
# to the current (./) working directory
svn co $rpath ./ --depth empty && \
# Update the files
svn up $files &&\
# Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`
Passa alla directory di lavoro di origine. Copia i comandi. Incolla. Modifica l'URL appropriato ed escludi il pattern. Esegui il comando.
Grazie,
No, ignora serve solo per aggiungere file.
Puoi usare checkout sparsi (se usi svn 1.5)
Come alcuni altri hanno menzionato, puoi semplicemente usare svn: externals proprietà e quindi l'opzione --ignore-externals quando effettui il checkout. Una cosa da notare, tuttavia, è che svn: externals non deve necessariamente fare riferimento a un altro repository. Può essere un riferimento a qualche altra cartella nello stesso repository.