Jak utworzyć oddział?

Odpowiedzi:

349

Rozgałęzianie w Subversion jest ułatwione przez bardzo lekkie i wydajne narzędzie do kopiowania.

Rozgałęzianie i tagowanie są w rzeczywistości takie same. Wystarczy skopiować cały folder z repozytorium do innego miejsca w repozytorium za pomocą svn copypolecenia.

Zasadniczo oznacza to, że to zgodnie z konwencją oznacza kopiowanie folderu - niezależnie od tego, czy jest to kopia zapasowa, tag, gałąź czy cokolwiek innego. W zależności od tego, jak chcesz myśleć o rzeczach (zwykle w zależności od tego, jakiego narzędzia SCM używałeś w przeszłości), musisz skonfigurować strukturę folderów w repozytorium, aby obsługiwać twój styl.

Wspólne style mają mieć kilka folderów na górze repozytorium o nazwie tags, branches, trunk, etc. - który pozwala na kopiowanie całych trunk(lub sub-zestawy) do tagsi / lub branchesfolderów. Jeśli masz więcej niż jeden projekt, możesz zreplikować tego rodzaju strukturę w ramach każdego projektu:

Przyzwyczajenie się do tej koncepcji może chwilę potrwać, ale działa - po prostu upewnij się, że ty (i twój zespół) przestrzegacie konwencji, których zamierzacie użyć. Dobrze jest też mieć dobrą konwencję nazewnictwa - coś, co mówi ci, dlaczego gałąź / tag został utworzony i czy nadal jest właściwe - rozważ sposoby archiwizacji nieaktualnych gałęzi.

Ronnie
źródło
211
Zaletą „kopii svn” jest zachowanie historii przed rozgałęzieniem. Ręczne kopiowanie do innego katalogu nie.
WhyNotHugo,
5
Zauważ też, że zwykle złym pomysłem jest oznaczanie lub rozgałęzianie podkatalogów „trunk”. Utrudnia to śledzenie, który podkatalog został rozgałęziony, a większość narzędzi będzie mylona przez te gałęzie (np. Przełączanie gałęzi będzie oznaczało strukturę katalogów zmian WC, co dezorientuje IDE i buduje narzędzia). Po prostu zawsze rozgałęziaj „pień”.
śleske
1
@Will Faktycznie svn cpużywa tanich kopii, nie kopiuje rzeczywistych plików podczas rozgałęziania. Zobacz svnbook.red-bean.com/en/1.1/ch04s02.html
Yeung
607

Utwórz nowy oddział za pomocą svn copypolecenia w następujący sposób:

$ 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"
iskrzy
źródło
24
Następnie użyj svn switch svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH .(jeśli chcesz zmienić bieżące zamówienie na nową gałąź) lub svn checkout svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH(jeśli chcesz mieć nową gałąź w oddzielnym katalogu), aby rozpocząć pracę na nowo utworzonej gałęzi.
Jakub Narębski
3
Uwaga: w niektórych przypadkach trzeba użyć--parentsopcjisvn copy!
Jakub Narębski
1
z jakiegoś powodu użyłem tego cmd i to nie działało, ale kiedy zmieniłem svn + ssh na tylko https, zadziałało. Czy robię coś źle? jakie jest znaczenie svn + ssh? Dzięki!
Aviel Gross
musisz najpierw utworzyć nowy katalog w swoim oddziale -> svn mkdir host.example.com/repos/project/branches/NAME_OF_BRANCH -m „utwórz katalog oddziałów, aby przechowywać wszystkie gałęzie”
Silvio Troia
Jeśli pominę tę -mopcję, pojawi się komunikat „Lubię to” svn: E155010: Path '/home/constantine/someDirectory/svn+ssh:https:/myhost.com/svn/dir1/dir2/trunk/dir3/dir4/dir5' does not exist. Z -mtym mówi svn: E205009: Local, non-commit operations do not take a log message or revision properties. (Zamieniłem adresy, ale one istnieją, oprócz ofc, nowego katalogu gałęzi i całej ścieżki + adresu URL, który SVN z jakiegoś powodu scalił się w błędzie) .
Cześć Angel
33

Jeśli Twoje repozytorium jest dostępne przez https, możesz użyć tego polecenia do rozgałęzienia ...

svn copy https://host.example.com/repos/project/trunk \
       https://host.example.com/repos/project/branches/branch-name \
  -m "Creating a branch of project"
Dave
źródło
26
svn cp /trunk/ /branch/NEW_Branch

Jeśli masz jakieś lokalne zmiany w bagażniku, użyj Rsyncdo synchronizacji zmian

rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch
Parag Bafna
źródło
2
Nie ma wymogu używania rsyncw ten sposób. svn cpskopiuje również wszelkie lokalne zmiany.
Kevin Panko,
@KevinPanko Nie skopiuje niezatwierdzonych zmian.
Parag Bafna
4
Tak, potwierdzone przez svn, wersja 1.8.5
Kevin Panko
Zastanawiam się nad tym. To wydaje się być najłatwiejszą opcją, a AFAI pamiętaj, to właśnie zrobiłem, pracując z SVN 3 lata temu. Ale jaka jest różnica między tym a tymi, które działają bezpośrednio z adresami URL serwera?
oligofren
@KevinPanko Czy wiesz, czy kopiuje również nowo utworzone pliki?
John Hamilton
16

Załóżmy, że chcesz utworzyć gałąź z nazwy pnia (jako „TEST”), a następnie użyj:

svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST
Chamly Idunil
źródło
14

Zwykle skopiowałbyś go do svn + ssh: //host.example.com/repos/project/branches/mybranch, abyś mógł przechowywać kilka oddziałów w repozytorium, ale twoja składnia jest poprawna.

Oto kilka porad dotyczących konfiguracji układu repozytorium .

pix0r
źródło
13

Najlepsza wskazówka dla nowych użytkowników SVN; może to trochę pomóc w szybkim uzyskiwaniu poprawnych adresów URL.

Uruchom, svn infoaby wyświetlić przydatne informacje o bieżącym wyrejestrowanym oddziale.

Adres URL powinien (jeśli uruchomisz svn w folderze głównym) dać adres URL, z którego chcesz skopiować.

Aby również przejść do nowo utworzonego oddziału, użyj svn switchpolecenia:

svn switch http://my.repo.url/myrepo/branches/newBranchName
chim
źródło
3
Możesz także użyć ^ zamiast roota repozytorium
chim
11

Jeśli nawet planujesz połączyć swój oddział, gorąco polecam, abyś spojrzał na to:

Svnmerge.py

Słyszę, że Subversion 1.5 buduje więcej śledzenia scalania, nie mam z tym doświadczenia. Mój projekt jest na 1.4.x, a svnmerge.py to ratowanie życia!

basszero
źródło
6
  • Utwórz nowy folder poza bieżącym projektem. Możesz nadać mu dowolną nazwę. (Przykład: masz zamówienie na projekt o nazwie „Dostosowywanie”. Ma on wiele projektów, takich jak „Projekt1”, „Projekt2” .... I chcesz utworzyć gałąź „Projekt1”. Więc najpierw otwórz „ Dostosowywanie ”, kliknij prawym przyciskiem myszy i utwórz nowy folder i nadaj mu nazwę„ Project1Branch ”).
  • Kliknij prawym przyciskiem myszy „Myproject1” .... TortoiseSVN -> Branch / Tag.
  • Wybierz kopię roboczą.
  • Otwórz przeglądarkę .... Równolegle z „Do URL”.
  • Wybierz dostosowanie ... kliknij prawym przyciskiem myszy, a następnie Dodaj folder. i przejrzyj utworzony folder. Oto „Project1Branch”. Teraz kliknij przycisk OK, aby dodać.
  • Przejdź do kasy tego nowego bancha.
  • Ponownie przejdź do swojego projektu, którą gałąź chcesz utworzyć. Kliknij prawym przyciskiem myszy TorotoiseSVN -> gałąź / tag. Następnie wybierz kopię roboczą. Możesz podać adres URL jako nazwę oddziału. jak {Twój adres IP / svn / AAAA / Customization / Project1Branch}. Możesz ustawić nazwę w adresie URL, aby utworzyć folder tylko z tą nazwą. Jak {Twój adres IP / svn / AAAA / Customization / Project1Branch / MyProject1Branch}.
  • Naciśnij przycisk OK. Teraz możesz zobaczyć logi ... twoja kopia robocza zostanie zapisana w oddziale.
  • Teraz możesz sprawdzić ... i cieszyć się swoją pracą. :)
Sonu Gupta
źródło
-1

Poniżej znajdują się kroki, aby utworzyć gałąź z pnia za pomocą TortoiseSVN w maszynie z systemem Windows. To oczywiście wymaga zainstalowania klienta TortoiseSVN.

  1. Kliknij prawym przyciskiem myszy zaktualizowany bagażnik z lokalnego komputera z systemem Windows
  2. Wybierz TortoiseSVN
  3. Kliknij oddział / Tag
  4. Wybierz ścieżkę Do w repozytorium SVN. Pamiętaj, że docelowy adres URL jest aktualizowany zgodnie z podaną ścieżką i nazwą oddziału
  5. Nie twórz folderów wewnątrz oddziałów w przeglądarce repozytorium
  6. Dodaj ścieżkę oddziałów. Na przykład oddziały /
  7. Dodaj znaczący komunikat w dzienniku w celach informacyjnych
  8. Kliknij OK, spowoduje to utworzenie nowego folderu w systemie lokalnym
  9. Kasa utworzona w nowym folderze
Prashanth
źródło