2012-10-02 7 views
9

Ho iniziato a lavorare su quello che pensavo sarebbe stato un piccolo cambiamento nel bagagliaio, sono andato via per un mese e ora mi rendo conto che questo è davvero un intero side-project (pieno di bug) che ha davvero bisogno del proprio ramo. Inoltre, una volta eliminati questi cambiamenti, voglio reimpostare la mia copia di lavoro su ciò che è attualmente in trunk, in modo da poter aiutare lo sviluppo principale e gli elementi ad alta priorità prima di tornare a questo side project quando c'è tempo.Come si dirama una copia di lavoro modificata con SVN?

Quindi:

  1. vorrei fare un nuovo ramo, in base alla mia copia di lavoro, senza dover controllare nella mia copia di lavoro (è al passo con l'ultima revisione HEAD però)

  2. Una volta che ho biforcato la mia copia di lavoro, vorrei sostanzialmente rimuovere tutte le modifiche che si trovano nel ramo, e basta impostarlo per abbinare la revisione HEAD corrente nel tronco.

Qual è la procedura? Sto usando TortoiseSVN, ma anche le istruzioni da riga di comando sarebbero utili.

+0

Una domanda simile [here] (http://stackoverflow.com/q/1308791/2047122) – Ashley

risposta

3

Così ho cercato due metodi per la ramificazione la mia copia di lavoro senza controllare dentro, non è sicuro che uno sta per finire per essere il metodo migliore:

Metodo 1: Copiare tutta la directory al nuovo ramo

  • Fai clic destro sulla cartella di copia di lavoro e scegli tortoisesvn> Repo Browser
  • In Repo Browser creare una nuova directory chiamata "rami" allo stesso livello come dir "tronco"
  • All'interno dei "rami" , crea una nuova dir con il "n ame "del tuo ramo (per" nome "intendo un'etichetta che identificherà questo ramo, ad esempio: se stai lavorando su un sistema di notifica speciale in questo ramo, chiamalo" notifiche "ecc ...)
  • Ora, ancora in Repo Browser fare clic con il tasto destro e selezionare "Aggiungi cartella" e selezionare la copia di lavoro locale
  • Questo richiederà un po 'di tempo, poiché tutti i file (inclusi i file .svn) vengono copiati. Questo copia anche file e file senza precedenti che hai svn: ignorato, che potrebbe non essere desiderato.

Metodo 2: utilizzo Branch/tag

  • clic destro la cartella di copia di lavoro e scegliere tortoisesvn> Branch/tag ...
  • Si apre il Browser Repo, in modo da creare un nuovo directory "rami" e quindi all'interno di essa, una nuova dir con il "nome" del ramo
  • Si seleziona il pulsante "Copia di lavoro" nella sezione "Crea copia nel repository da". Questo è ciò che impegna il diff delle tue modifiche locali a questo ramo
  • Questo sembra copiare solo i file che sono DIVERSI da ciò che è nella revisione HEAD.
  • Tuttavia, se quindi si utilizza nuovamente il Browser Repo per vedere cosa c'è lì dentro, l'intera revisione HEAD + le modifiche locali sono tutti lì

Sembra che il metodo 2 è sicuramente preferibile.

Poi, per ripulire, è stata una questione di Tortoise SVN> Ripristina ... e "Cancella tutto sotto controllo di versione"

+0

Il metodo 2 ha funzionato benissimo per me - l'interfaccia utente è leggermente diversa nel '17 ma le istruzioni mi hanno aiutato. – Conrad

3

In riga di comando è possibile creare una patch con il comando sovversione "diff", e quindi applicalo al tuo nuovo ramo con il comando "patch" di subversion. (Puoi leggere questi comandi eseguendo 'svn help diff' e 'svn help patch'). Diciamo che hai il tronco e un ramo chiamato new_branch nella stessa directory genitore.

cd trunk 
svn diff > ..\my_stuff.diff 

Ora hai la patch, quindi applicala al ramo appena creato.

cd new_branch 
svn patch ..\my_stuff.diff 

È possibile asciugare eseguire la patch prima con l'aggiunta di bandiera --dry-run al comando patch, per vedere se qualcosa di strano accade prima realmente applicarlo.

svn patch ..\my_stuff.diff --dry-run 
+0

Freddo. Ma sembra che tu stia creando un file diff dal repository di trunk, non dalla copia di lavoro? O sto leggendo male questo? –

+0

No il comando svn diff "mostra le modifiche locali in una copia di lavoro": http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.diff.html così ottengo le mie modifiche locali. – crunchdog

+1

Sono interessato alla tua soluzione. Quello che sembra che stia facendo è la patch di new_branch in modo che diventi esattamente come una copia funzionante. Quindi come si ottiene new_branch in primo luogo? –

1

Nel caso in cui si preferisce continuare a lavorare nella stessa cartella, questo post mostra come.

Fondamentalmente svn copy per creare un ramo svn switch in modo che punti alla nuova diramazione dalla stessa copia di lavoro e svn commit per confermare le modifiche.

Assicurati di diramarti dallo stesso ramo/revisione che hai modificato (svn info da verificare) oppure potresti interrompere molti conflitti dopo lo switch.

+0

Forse potresti riassumere quel post nella tua risposta - altrimenti se quel link dovesse mai morire, la tua risposta diventerà inutile per le future persone interessate alla tua soluzione. –