Il checkout SVN ignora la cartella
-
08-07-2019 - |
Domanda
Posso ignorare una cartella al checkout svn? Devo ignorare la cartella DOCs al checkout sul mio server di build.
modifica: ignorare gli esterni non è un'opzione. Ho degli esterni di cui ho bisogno.
Soluzione
Non puoi ignorare direttamente le cartelle in un checkout, ma puoi usare checkout sparsi in svn 1.5. Ad esempio:
$ svn co http://subversion/project/trunk my_checkout --depth immediates
Ciò controllerà i file e le directory dal trunk del progetto in "my_checkout", ma non verrà ricondotto a tali directory. Ad esempio:
$ cd my_checkout && ls
bar/ baz foo xyzzy/
Quindi per scaricare il contenuto di 'bar':
$ cd bar && svn update --set-depth infinity
Altri suggerimenti
Sì, è possibile utilizzare SVN 1.6. Dovrai prima fare un checkout, quindi contrassegnare la cartella per 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 eventuali aggiornamenti alla copia di lavoro non ripopoleranno la cartella documenti.
Vedi http: //blogs.collab. net / subversion / 2009/03 / sparse-directory-ora-con-esclusione / e http://subversion.apache.org/docs/release-notes/1.6.html#sparse-directory-exclusion per maggiori dettagli.
Tom
Con le versioni precedenti alla 1.5 ho scoperto che se fai il checkout solo nella cartella più in alto e poi aggiorni selettivamente, da quel momento in poi gli aggiornamenti hanno effetto solo su ciò che hai estratto. Vale a dire.
svn co -N foo
cd foo
svn up -N bar
svn up
Il flag -N rende l'operazione non ricorsiva. Quanto sopra non verificherà nient'altro a livello di foo, ad es. diciamo che esiste una cartella lala
, lo svn up finale non verificherà quella cartella, ma aggiornerà bar
.
Ma in un secondo momento puoi svn up lala
e quindi aggiungerlo alla cassa.
Presumibilmente funziona anche con 1.5.
Questo è nel client TortoiseSVN 1.7.1 (potrebbe essere disponibile anche in alcune versioni precedenti):
-
Pagamento SVN - > Seleziona l'URL del repository
-
Fai clic su " Checkout Items " (in Profondità di pagamento) e selezionare solo il cartelle richieste!
È possibile inserire la cartella documenti in un repository esterno e quindi utilizzare svn checkout --ignore-externals
.
Sì, Subversion 1.5 ha una funzione chiamata Checkout sparsi che possono fare esattamente questo genere di cose.
Ho trovato questa domanda cercando un modo per controllare le fonti di WebKit escludendo i test di regressione. Ho finito con il seguente:
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 ritieni opportuno, ma. * si consiglia di saltare la directory di lavoro (che è già aggiornata) e tutte le directory .svn.
Di recente ho risolto lo stesso compito. L'idea è di ottenere l'elenco immediato di cartelle / file nel repository per escludere le voci necessarie, quindi controllare le cartelle rimanenti e aggiornare eventuali file immediati. 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 '^.*[^/]
Passa alla directory di lavoro di origine. Copia i comandi. Incolla. Modifica l'URL appropriato ed escludi il pattern. Esegui il comando.
Grazie,
` && \
# Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]
Passa alla directory di lavoro di origine. Copia i comandi. Incolla. Modifica l'URL appropriato ed escludi il pattern. Esegui il comando.
Grazie,
` && \
# 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 è solo per aggiungere file.
Puoi usare checkout sparsi (se usi svn 1.5)
Come alcuni altri hanno già detto, puoi semplicemente usare le proprietà svn: externals e poi l'opzione --ignore-externals al momento del checkout. Una cosa da notare, tuttavia, è che svn: gli esterni non devono necessariamente fare riferimento a un altro repository. Può essere un riferimento ad un'altra cartella nello stesso repository.