2011-08-28 22 views
31

Ho una copia di lavoro di un intero repository SVN, ma voglio cambiarlo in una copia di lavoro sparsa a causa di problemi di spazio su disco.Modifica profondità nella copia di lavoro SVN esistente senza riscaricamento

Un modo per fare questo sarebbe:

svn up --set-depth immediates projects 
svn up --set-depth infinity projects/project1 
svn up --set-depth infinity projects/project2 

Tuttavia, sarebbe eliminare prima project1 e project2, poi scaricare di nuovo. Questo è davvero scomodo, perché sono molto grandi e la velocità di upload del server è molto bassa. Ho provato questo (con un altro, più piccolo, una parte del pronti contro termine, come un esperimento):

svn up --set-depth infinity projects/project1 
svn up --set-depth infinity projects/project2 
svn up --set-depth immediates projects 

Ma poi l'ultimo comando annulla solo il primo 2.

Come è possibile impostare la profondità di un lavoro copia senza aggiornarlo/cambiarlo immediatamente, quindi posso avere la possibilità di configurare correttamente le sottodirectory prima?

Oppure c'è un altro modo per ottenere ciò che voglio, ad es. copiando project1 e project2 in una posizione sicura prima?

risposta

3

ho finito hacking:

  • modificare manualmente l'impostazione della profondità a "immediates" per projects *.
  • Difficile cancellare (non SVN eliminare) tutti i figli di projects tranne project1 e project2
  • svn up projects

[*] Per fare questo, aprire projects/.svn/entries in un editor di testo e modificare

b125e325-6f7c-4931-9942-d1ea1ea1441a 
X 

in

b125e325-6f7c-4931-9942-d1ea1ea1441a 







immediates 
X 

Nota: Quella linea UUID è probabilmente diversa per repo, e X è in realtà il valore esadecimale 0x0C che non riesco a visualizzare qui su SO.

1

Ho avuto lo stesso problema, ma quello che hai scritto non sembra essere possibile in SVN 1.7, poiché il formato dei metadati sembra diverso.

Ecco cosa ho fatto (utilizzando le directory nella situazione). In primo luogo, ho copiato project1 e project2 in un posto sicuro.

svn co --depth immediates svn_url/projects 

Questo estrae projects con directory vuote project1 e project2. Quindi cancello le cartelle vuote e metto le directory attuali al loro posto. SVN mi dà alcuni messaggi strani ma sembra funzionare e mi permette di commettere. (Non funziona con --depth empty e quindi copia le cartelle, ma immediates sembra funzionare.)

Sono d'accordo che questa situazione non è l'ideale, ma è per questo che sto passando a Git per progetti futuri! Ho usato SVN per molto tempo, ma sta andando oltre ogni speranza.

24

Woo hoo, ho avuto questo problema e TortoiseSVN ha supportato le soluzioni per aggiungere ed eliminare un elemento dalla cassa sparsa. http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html

1.To aggiungere: In Esplora risorse, fare clic destro sulla cartella controllato, quindi utilizzare TortoiseSVN? Repo-Browser per visualizzare il browser del repository. Trova la sottocartella che desideri aggiungere alla tua copia di lavoro, quindi usa il menu contestuale? Aggiorna articolo a revisione ....

2.Per eliminare; Dalla root, fare clic con il tasto destro del mouse/Repo-Browser/Aggiorna elemento alla revisione; quindi seleziona "Escludi".

+9

Non è necessario passare attraverso il browser repo. Il menu contestuale di TortoiseSVN ha l'opzione "Aggiorna alla revisione ...". Basta fare clic con il pulsante destro del mouse sulle cartelle escluse anziché sulla directory principale di lavoro. Ovviamente, questo presuppone che una cartella stub (cartella esclusa vuota) esista nel tuo percorso. – dobbs

0

Niente come far rivivere una vecchia domanda SO.

Ho lavorato con un problema molto simile in cui mi dirigo dal trunk per creare un pacchetto di rilascio, ma a causa delle limitazioni devo clonare i file che sono destinati solo per dev.

asset 
└── js 
    └── some 
     └── directories 
      ├── assets 
      │   ├── files ... 
      ├── dev  **<------------ This folder needs to be empty** 
      │   ├── apis 
      │   ├── campaign 
      │   ├── features 
      │   ├── modules 
      │   ├── main.js 
      │   └── tags 
      └── release 
       ├── apis 
         ├── data 
         ├── features 
         ├── modules 
         ├── main.js 
         └── tags 

ho deciso che avrei escludere i file dev per rimuovere la tentazione di rattoppare una correzione nel ramo di release nella directory sbagliata.

Eseguo molti controlli sparsi per evitare grandi cartelle nel bagagliaio ma non l'ho mai fatto in modo retrospettivo su una copia funzionante. Sembra che sia abbastanza semplice.

Per modificare la copia di lavoro in modo che asset/js/some/directories/dev sia vuoto, è sufficiente eseguire nuovamente il comando svn co sulla copia di lavoro.

Nel mio caso le seguenti opere

svn co --depth empty ^/branches/releases/latest/asset/js/some/directories/dev \ 
asset/js/some/directories/dev 

Tu sei fondamentalmente esegue un checkout parziale sul preesistente copia di lavoro e questo sarà il lavoro a qualsiasi livello. Nel caso originale si dovrebbe semplicemente eseguire quanto segue.

svn co --depth immediates ^/branches/mybranch/projects projects 
svn co --depth immediates ^/branches/mybranch/project1 project1 
svn co --depth immediates ^/branches/mybranch/project2 project2 

Per coloro che non conoscono il cursore ^ è una scorciatoia per la radice repository in modo che funziona come un percorso relativo sul repository un po 'come ../some/location.

La chiave qui è che non si sta creando una nuova copia di lavoro per risolvere il problema. Stai eseguendo questi comandi sulla copia di lavoro esistente e reimpostando la profondità delle directory scelte.