2009-08-30 19 views
10

Nel mio repository, Diciamo che ho questo:Subversion - Checkout una directory padre

Animal 
    Dog 
    Beagle 
    Hound 
    ... 

Diciamo ho verificato Cane a una directory di lavoro e mi sono reso conto, whoops, volevo davvero alla cassa degli animali.

Posso cancellare la mia copia di lavoro, la directory Dog e checkout di Animal, ma posso farlo senza cancellarlo e ritirarlo di nuovo?

Se la mia copia di lavoro di Cane ha Animale come cartella genitore e controllo Animal senza eliminare Dog, ottengo qualcosa come "subversion non è riuscito ad aggiungere directory con lo stesso nome già esistente".

Sto anche usando la tartaruga. Grazie.

+3

Qual è il problema con l'eliminazione e il check-out? Se hai già apportato modifiche, eseguine il commit, quindi ricomincia da capo. – kajaco

+1

Non è un problema. Questo è quello che ho fatto e ha funzionato. Mi chiedo solo se io avessi un modo migliore, o se c'è un modo più corretto di farlo. – Steve

risposta

4

Questo non è possibile direttamente.

Il modo più semplice è quello di eliminare la copia di lavoro e fare un nuovo checkout di Animal.

In caso di cambiamenti nella Dog che vorreste mantenere, spostare Dog in una posizione temporanea, cassa Animal e quindi copiare Dog indietro nella directory Animal.

2

Si sta cercando svn switch, che aggiorna la propria copia di lavoro per riflettere un nuovo percorso. Tuttavia, i file modificati non vengono toccati. In TortoiseSVN, fai clic con il pulsante destro e seleziona "Cambia ..." dal menu di scelta rapida.

Il caso di utilizzo più comune per svn switch è quello di passare tra rami che sono rootati dallo stesso punto, in modo da poter avere viste differenti dello stesso codice. Ma puoi passare da un percorso arbitrario al tuo repository.

+1

Ma la mia directory madre, Animal, non è sotto controllo di versione, quindi non posso passare ad essa, almeno non da Tortoise. Forse tramite la riga di comando? – Steve

+1

Sono confuso. Come può il tuo repository avere Animal se non è sotto controllo di versione? È un errore di battitura? –

+1

Ho creato una copia (ramo) per creare Animal. Nella mia copia di lavoro, Animal non ha la directory .svn. È una cartella che ha lo stesso nome della cartella del repository. Quindi la mia directory di lavoro è un duplicato esatto della struttura del repository, ma ho controllato Dog to Dog. Spero che abbia un senso. – Steve

0

Ho trovato per evitare di scaricare dal server svn ciò che è già sul mio disco, quindi l'aggiornamento o il checkout viene effettuato utilizzando --depth empty. Quindi qualcosa tipo: svn co --depth empty Animal ; cd Animal ; svn update --depth empty Dog

In ogni caso, l'idea è di ottenere Dog come directory in Animal/.svn/entries.

Questa "--depth empty" continua a SVN dal download del contenuto effettivo, ma svn fa fare il sub-directory (in questo caso, Dog) e svn fa mettere una voce per il Dog sub-directory in Animal/.svn/entries.

Quindi sostituire la sottodirectory Dog con la copia già esistente.

È possibile controllare che questo funzioni avviando uno dei file da qualche parte in Dog e facendo un svn update nella directory Animal. Il file whacked dovrebbe essere estratto dal server svn.

+0

Non funziona: si ottiene "Aggiornamento". ": " trunk "saltato - È stata trovata una copia di lavoro ostruente Alla revisione 13370. Riepilogo dei conflitti: Percorsi saltati: 1' quando si esegue' svn up' in 'Animale'. –

+0

Sono passati molto tempo, quindi non sono sicuro di quale sia il problema. SVN dovrebbe creare le directory degli animali e dei cani, non dovrebbe? Quindi non ci dovrebbe essere alcuna copia di lavoro ostruente. Un'altra idea è forse che SVN è cambiato dal '13, quindi questo trucco non funziona più. –

0

Sì, è possibile mappare la directory principale.

Per fare ciò, è sufficiente eliminare la directory .svn dalla directory "Dog" (figlio) e fare SVN Update nella directory principale. Renderà il file esistente come copia Versioned e scaricherà il contenuto delta della directory Dog dal server SVN.

Nota: è necessario avere una struttura di directory esatta come struttura di directory SVN.

Problemi correlati