Il checkout SVN ignora la cartella


98

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.


Dai un'occhiata a questo: stackoverflow.com/questions/116074/...
Efesto

Questo risponde alla tua domanda? Come ignoro una directory con SVN?
Gautier

Risposte:


104

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

Nota: c'era un bug in alcune versioni 1.5 che lo impediva consvn: Shallowing of working copy depths is not yet supported
gcb

79

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


2
Votato perché mi ha evitato di dover controllare una cartella enorme che non era rilevante per il mio lavoro.
dohpaz42

1
È fantastico, insieme alla pulizia di svn mi ha salvato 12 GiB.
JonnyJD

1
Questo non controlla ancora tutto inizialmente?
Huangism

9

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 lalae quindi aggiungerlo alla cassa.

Presumibilmente funziona anche con 1.5.


6

Questo è nel client TortoiseSVN 1.7.1 (potrebbe essere disponibile anche in alcune versioni precedenti):

  • Checkout SVN -> Seleziona l'URL del repository

  • Fare clic su "Elementi checkout" (sotto Profondità checkout) e selezionare solo le cartelle richieste!


4

Potresti mettere la cartella dei documenti in un repository esterno e poi usare svn checkout --ignore-externals.


Questo è ciò che abbiamo finito per fare per saltare alcuni componenti predefiniti in un lavoro precedente.
Mark Bessey

2
Non capisco cosa external repositorysignifichi. Puoi spiegarlo?
Victor

4

Sì, Subversion 1.5 ha una funzionalità chiamata Sparse checkouts che può fare esattamente questo genere di cose.


2
Dalla lettura di ciò, sembra che le casse sparse limitino solo la profondità di una cassa. Non possono ignorare una cartella in particolare.
John Millikin

Certo, potresti dover fare un po 'di lavoro in più, come limitare la profondità della cartella principale con --depth immediatamente, quindi controllare tutte le altre cartelle tranne quella che vorresti ignorare. Il punto è che gli strumenti ci sono se hai bisogno di usarli.
Greg Hewgill,

Apprezzo la menzione di SparseCheckouts, ed è sicuramente interessante, ma questa risposta non affronta la domanda originale. Certo, posso controllare un file alla volta, e questo si tradurrà in copie locali di file specifici che voglio, ma che rompiscatole dover fare ciascuno individualmente. Credo che l'autore di questa domanda stia chiedendo di ignorare una cartella specifica, non la profondità di x cartelle, e consentire al computer di eseguire il lavoro: lo stesso lavoro che stai raccomandando potrebbe essere realizzato manualmente.
barrypicker

Le versioni 1.6+ forniscono la capacità aggiuntiva di ignorare le cartelle e un maggiore controllo generale su cosa includere / escludere in una copia di lavoro (dove la v1.5 è molto limitata in questo) svnbook.red-bean.com/en/1.7/svn. advanced.sparsedirs.html
FruitBreak

3

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.


che lingua è questa?
Cucciolo

questi sono comandi shell unix (possono anche essere salvati ed eseguiti come file di script)
mrlem

2

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,


1
hey cosa sono 6 anni per gli sviluppatori? Sulla tua ultima riga hai $ ubrpath. Dov'è quel set?
D-Klotz

1
@ D-Klotz, grazie, dovrebbe essere invece $ rpath, che a sua volta è impostato sul percorso del repository. <br/> Ci scusiamo per un anno di ritardo
bv.

1

No, ignora serve solo per aggiungere file.
Puoi usare checkout sparsi (se usi svn 1.5)


1

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.