2009-08-20 12 views
76

Ho effettuato un checkout dal mio trunk a un DIR locale e ho apportato molte modifiche locali. Ora non voglio riportarlo sul trunk, ma preferirei creare un ramo da questa versione locale. È possibile?Subversion: Posso effettuare il checkout, modificare e quindi renderlo un ramo?

Posso basta copiare il tronco ad un ramo, e poi cd DIR e svn switch al ramo?

UPDATE: Grazie per le risposte, ha funzionato! Per riassumere i passi:

  • cd DIR
  • svn copy . new-branch-URL
  • svn switch new-branch-URL .

(notare i puntini)

+0

Ho trovato troppi conflitti utilizzando 'svn switch', così ho scelto di checkout la nuova copia da' new-branch-URL' dopo 'svn copy'. – BornToCode

+0

si che puoi. Io uso tortoiseSVN e puoi farlo in questo. – Nick

risposta

38

Secondo la sua linea di comando help svn copy può copiare da una directory ad un URL del repository. Così si dovrebbe essere in grado di copiare la vostra copia di lavoro al ramo, ad esempio:

svn copy working_directory url_to_branch 
9

nel mio client SVN: TortoiseSVN è sufficiente:

  • tasto destro del mouse sulla directory principale che voglio ramo
  • in "URL" selezionare la directory ramo nel repository
  • nella cornice "Crea copia nel repository da:" selezionare "copia di lavoro"

done :)

È proprio come copiare la versione locale nell'URL del repository specificato.

1

Sì, è possibile farlo da riga di comando SVN così come TortoiseSVN.

dovete specificare il vostro workingcopy SVN come src e il vostro nuovo ramo come destinazione del comando

svn copy <file/path/to/working/copy> <URL/TO/REPOSITORY/BRANCH> 

.

In TortoiseSVN basta puntare nella vostra copia di lavoro, scegliere "ramo/tag" dal menu contestuale e scegliere "copia di lavoro" nella sezione "Crea copia nel repository da:"

Nota che non è una buona idea (per motivi di tracciabilità) per creare tag in questo modo, ma per i rami è perfettamente a posto.

50

Il libro SVN (http://svnbook.red-bean.com/en/1.6/svn-book.html#svn.branchmerge.using.create) non consiglia la creazione di un ramo dalla copia di lavoro locale.

Mentre è anche possibile creare un ramo utilizzando svn copy per duplicare una directory all'interno della copia di lavoro, questa tecnica non è consigliata. Può essere piuttosto lento, infatti! La copia di una directory sul lato client è un'operazione lineare, nel senso che deve effettivamente duplicare ogni file e sottodirectory all'interno di quella directory di lavoro sul disco locale.

Invece, creare prima il ramo e quindi utilizzare il comando svn switch in modo da poter confermare le modifiche. Se la tua copia di lavoro è significativamente obsoleta con il trunk, aggiungi "@REV" all'URL di origine dove "REV" è la revisione della tua copia di lavoro riportata da svn info.

La copia di una directory sul server, tuttavia, è un'operazione a tempo costante ed è il modo in cui la maggior parte delle persone crea filiali.

$ svn copy http://svn.example.com/repos/calc/trunk \ 
      http://svn.example.com/repos/calc/branches/my-calc-branch \ 
     -m "Creating a private branch of /calc/trunk." 
+2

Grazie per questa risposta. Questa è la soluzione migliore in quanto mantiene la cronologia delle revisioni. – evanflash

+3

Ciò significa che se avessi delle modifiche nella mia copia di lavoro locale, potrei fare 'svn copy ' per copiare il trunk in un nuovo ramo sul server svn, quindi usare 'svn switch' nella mia copia di lavoro passare alla nuova filiale senza perdere alcuna modifica? O l'interruttore ucciderebbe i miei file modificati non salvati? – Kasapo

+3

@Kasapo, sì è vero. e nota anche se non sei aggiornato con il bagagliaio; se è così, aggiungi "@REV" all'URL di origine come ho notato in modo che dopo aver effettuato il passaggio al ramo solo le modifiche locali vengano visualizzate come differenze. – Lucas

Problemi correlati