Come faccio a creare un ramo?


Risposte:


349

La ramificazione in Subversion è facilitata da una funzione di copia molto leggera ed efficiente.

Branching e tagging sono effettivamente gli stessi. Basta copiare un'intera cartella nel repository da qualche altra parte nel repository usando il svn copycomando

Fondamentalmente questo significa che è per convenzione cosa significa copiare una cartella - che si tratti di un backup, tag, ramo o altro. A seconda di come si desidera pensare alle cose (normalmente a seconda dello strumento SCM utilizzato in passato) è necessario impostare una struttura di cartelle all'interno del repository per supportare il proprio stile.

Stili comuni sono di avere un mucchio di cartelle nella parte superiore del vostro repository chiamato tags, branches, trunk, ecc - che permette di copiare le intere trunk(o sottoinsiemi) nei tagse / o branchesle cartelle. Se hai più di un progetto, potresti voler replicare questo tipo di struttura in ciascun progetto:

Può volerci un po 'di tempo per abituarsi al concetto, ma funziona, assicurati solo che tu (e il tuo team) siate chiari sulle convenzioni che userete. È anche una buona idea avere una buona convenzione di denominazione - qualcosa che ti dice perché il ramo / tag è stato creato e se è ancora appropriato - considerare i modi per archiviare i rami che sono obsoleti.


211
"svn copy" ha il vantaggio di conservare la cronologia precedente alla ramificazione. La copia manuale in un'altra directory non lo farà.
WhyNotHugo

5
Si noti inoltre che di solito è una cattiva idea taggare o ramificare le sottodirectory di "trunk". Ciò rende difficile tenere traccia di quale sottodirectory è stata ramificata e la maggior parte degli strumenti verrà confusa da questi rami (ad esempio, cambiare ramo significherà la struttura delle directory delle modifiche al WC, che confonderà gli IDE e gli strumenti di costruzione). Ramo sempre "tronco".
sleske,

1
@Will In realtà svn cputilizza copie economiche, non copia i file effettivi durante la diramazione. Vedi svnbook.red-bean.com/en/1.1/ch04s02.html
Walty Yeung

607

Creare un nuovo ramo usando il svn copycomando come segue:

$ svn copy svn+ssh://host.example.com/repos/project/trunk \
           svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH \
      -m "Creating a branch of project"

24
Uso successivo svn switch svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH .(se si desidera passare al checkout corrente in un nuovo ramo) o svn checkout svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH(se si desidera avere un nuovo ramo in una directory separata) per iniziare a lavorare sul ramo appena creato.
Jakub Narębski,

3
Nota: in alcuni casi è necessario utilizzare l'--parentsopzione consvn copy!
Jakub Narębski,

1
per qualche ragione ho usato questo cmd e non ha funzionato, ma quando ho cambiato svn + ssh in solo https ha funzionato. Ho fatto qualcosa di sbagliato? qual è il significato di svn + ssh? Grazie!
Aviel Gross,

devi prima creare una nuova directory nella tua filiale -> svn mkdir host.example.com/repos/project/branches/NAME_OF_BRANCH -m "crea la directory dei rami per contenere tutti i rami"
Silvio Troia,

Se ometto l' -mopzione, dice come svn: E155010: Path '/home/constantine/someDirectory/svn+ssh:https:/myhost.com/svn/dir1/dir2/trunk/dir3/dir4/dir5' does not exist. Con -mdice svn: E205009: Local, non-commit operations do not take a log message or revision properties. (Ho sostituito gli indirizzi, ma esistono, tranne, ofc, la nuova directory di diramazione e l'intero percorso + url che SVN per qualche motivo ha unito all'errore) .
Hi-Angel,

33

Se il tuo repository è disponibile tramite https, puoi usare questo comando per diramare ...

svn copy https://host.example.com/repos/project/trunk \
       https://host.example.com/repos/project/branches/branch-name \
  -m "Creating a branch of project"

26
svn cp /trunk/ /branch/NEW_Branch

Se sono presenti alcune modifiche locali nel trunk, utilizzare Rsyncper sincronizzare le modifiche

rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch

2
Non è necessario utilizzare rsyncin questo modo. svn cpcopierà anche eventuali modifiche locali.
Kevin Panko,

@KevinPanko Non copia le modifiche non confermate.
Parag Bafna,

4
Lo fa, confermato con svn, versione 1.8.5
Kevin Panko,

Mi sto chiedendo questo. Questa sembra l'opzione più semplice e AFAI ricorda, questo è quello che ho fatto quando lavoravo con SVN 3 anni fa. Ma qual è la differenza tra questo e quelli che lavorano direttamente con gli URL del server?
oligofren,

@KevinPanko Sai se copia anche i file appena creati?
John Hamilton,

16

Supponiamo di voler creare un ramo da un nome trunk (come "TEST") quindi utilizzare:

svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST

14

Normalmente lo copieresti in svn + ssh: //host.example.com/repos/project/branches/mybranch in modo da poter mantenere diversi rami nel repository, ma la tua sintassi è valida.

Ecco alcuni consigli su come impostare il layout del repository .


13

Suggerimento per i nuovi utenti SVN; questo può aiutare un po 'a ottenere rapidamente gli URL corretti.

Esegui svn infoper visualizzare informazioni utili sul ramo di check-out corrente.

L'URL dovrebbe (se si esegue svn nella cartella principale) fornire l'URL da cui è necessario copiare.

Inoltre, per passare al ramo appena creato, utilizzare il svn switchcomando:

svn switch http://my.repo.url/myrepo/branches/newBranchName

3
Puoi anche usare ^ al posto della radice del repository
chim

11

Se hai anche intenzione di unire la tua filiale, ti consiglio vivamente di guardare questo:

Svnmerge.py

Ho sentito che Subversion 1.5 costruisce di più il monitoraggio delle fusioni, non ne ho esperienza. Il mio progetto è su 1.4.xe svnmerge.py è un salvavita!


6
  • Crea una nuova cartella al di fuori del tuo progetto attuale. Puoi dargli qualsiasi nome. (Esempio: hai un checkout per un progetto chiamato "Personalizzazione". E ha molti progetti, come "Progetto1", "Progetto2" .... E vuoi creare un ramo di "Progetto1". Quindi prima apri il " Personalizzazione ", fai clic con il pulsante destro del mouse e crea una nuova cartella e assegnagli un nome," Project1Branch ").
  • Fare clic con il tasto destro su "Myproject1" .... TortoiseSVN -> Branch / Tag.
  • Scegli copia di lavoro.
  • Apri il browser .... A destra del parallelo su "A URL".
  • Seleziona personalizzazione ..... fai clic con il pulsante destro del mouse quindi Aggiungi cartella. e passa attraverso la cartella che hai creato. Qui è "Project1Branch". Ora fai clic sul pulsante OK per aggiungere.
  • Dai un'occhiata a questo nuovo banch.
  • Ancora una volta vai al tuo progetto quale ramo vuoi creare. Fare clic con il tasto destro su TorotoiseSVN -> branch / tag. Quindi selezionare la copia di lavoro. E puoi dare l'URL come nome della tua filiale. come {il tuo indirizzo IP / svn / AAAA / Customization / Project1Branch}. E puoi impostare il nome nell'URL in modo che crei la cartella solo con questo nome. Come {Il tuo indirizzo IP / svn / AAAA / Personalizzazione / Project1Branch / MyProject1Branch}.
  • Premi il pulsante OK. Ora puoi vedere i log in ... la tua copia di lavoro verrà archiviata nel tuo ramo.
  • Ora puoi dare un'occhiata ... e goderti il ​​tuo lavoro. :)

-1

Di seguito sono riportati i passaggi per creare un ramo dal trunk utilizzando TortoiseSVN nel computer Windows. Ciò ovviamente richiede l'installazione del client TortoiseSVN.

  1. Fare clic con il tasto destro del mouse sul trunk aggiornato dal computer Windows locale
  2. Seleziona TortoiseSVN
  3. Fai clic su ramo / Tag
  4. Selezionare il percorso A nel repository SVN. Si noti che l'URL di destinazione viene aggiornato in base al percorso e al nome della filiale forniti
  5. Non creare cartelle all'interno dei rami nel browser del repository
  6. Aggiungi percorso rami. Ad esempio, rami /
  7. Aggiungi un messaggio di registro significativo come riferimento
  8. Fare clic su OK, questo crea una nuova cartella sul sistema locale
  9. Acquista il ramo creato in una nuova cartella
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.