Subversion: Czy mogę pobrać, zmodyfikować, a następnie uczynić z niej gałąź?

80

Zrobiłem kasę z mojego bagażnika do lokalnego DIR i dokonałem tam wielu lokalnych zmian. Teraz nie chcę przenosić go z powrotem do linii głównej, ale wolałbym utworzyć gałąź z tej lokalnej wersji. Czy to jest możliwe?

Czy mogę po prostu skopiować pień do gałęzi, a potem cd DIRi svn switchdo gałęzi?

AKTUALIZACJA : Dzięki za odpowiedzi, zadziałało! Podsumowując kroki:

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

(zwróć uwagę na kropki)

Szczery
źródło
tak, możesz. Używam tortoiseSVN i możesz to zrobić.
Nick
Znalazłem zbyt wiele konfliktów przy użyciu svn switch, więc zdecydowałem się pobrać nową kopię od new-branch-URLpóźniej svn copy.
fikr4n

Odpowiedzi:

39

Zgodnie z pomocą wiersza poleceń svn copy może kopiować z katalogu do adresu URL repozytorium. Powinieneś więc móc skopiować swoją kopię roboczą do oddziału, np .:

svn copy working_directory url_to_branch
wierob
źródło
52

Książka SVN ( http://svnbook.red-bean.com/en/1.6/svn-book.html#svn.branchmerge.using.create ) nie zaleca tworzenia oddziału z lokalnej kopii roboczej.

Chociaż można również utworzyć gałąź, używając svn copydo powielenia katalogu w kopii roboczej, ta technika nie jest zalecana. W rzeczywistości może to być dość powolne! Kopiowanie katalogu po stronie klienta jest operacją czasu liniowego, ponieważ w rzeczywistości musi powielać każdy plik i podkatalog w tym katalogu kopii roboczej na dysku lokalnym.

Zamiast tego najpierw utwórz gałąź, a następnie użyj svn switchpolecenia, abyś mógł zatwierdzić zmiany. Jeśli twoja kopia robocza jest w znacznym stopniu nieaktualna w stosunku do linii głównej, dodaj „@REV” do źródłowego adresu URL, gdzie „REV” oznacza wersję kopii roboczej zgłoszoną przez svn info.

Kopiowanie katalogu na serwer jest jednak operacją wykonywaną w czasie stałym i tak większość ludzi tworzy gałęzie.

$ 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."
Lucas
źródło
2
Dzięki za tę odpowiedź. Jest to lepsze rozwiązanie, ponieważ zachowuje historię zmian.
evanflash
3
Czy to oznacza, że ​​gdybym miał zmiany w mojej lokalnej kopii roboczej, mógłbym zrobić, svn copy <trunk-URL> <newBranch-URL>aby skopiować łącze trunk do nowej gałęzi na serwerze svn, a następnie użyć svn switchw kopii roboczej, aby przełączyć się na nową gałąź bez utraty jakichkolwiek zmian? A może przełącznik zabiłby moje niezatwierdzone zmodyfikowane pliki?
Kasapo,
3
@Kasapo, tak, zgadza się. a także zanotuj, jeśli jesteś nieaktualny z bagażnikiem; jeśli tak, dodaj „@REV” do źródłowego adresu URL, tak jak zauważyłem, aby po przełączeniu się do gałęzi tylko lokalne zmiany były widoczne jako różnice.
Lucas
Dodam tylko bardzo przydatny link, który bardziej szczegółowo wyjaśnia rozwiązanie Lucasa: svnbook.red-bean.com/en/1.6/svn.branchmerge.switchwc.html (spójrz na okienko informacyjne na dole). To rzeczywiście najczystsze i najwygodniejsze rozwiązanie do tworzenia gałęzi z lokalnych modyfikacji.
Spiros
9

W moim kliencie SVN: TortoiseSVN wystarczy:

  • kliknij prawym przyciskiem myszy górny katalog, który chcę rozgałęzić
  • w "To URL" wybierz katalog gałęzi w swoim repozytorium
  • w ramce „Utwórz kopię w repozytorium z:” wybierz „Kopia robocza”

Gotowe :)

To tak, jak kopiowanie wersji lokalnej do określonego adresu URL repozytorium.

twk
źródło
1

Tak, możesz to zrobić za pomocą wiersza poleceń SVN, a także przez tortoiseSVN .

Musisz określić kopię roboczą SVN jako src i nową gałąź jako miejsce docelowe pliku

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

Komenda.

W TortoiseSVN po prostu wskaż swoją kopię roboczą, wybierz "Gałąź / znacznik" z menu kontekstowego i wybierz "Kopia robocza" w sekcji "Utwórz kopię w repozytorium z:"

Zauważ, że nie jest dobrym pomysłem (ze względu na identyfikowalność) tworzenie tagów w taki sposób, ale w przypadku gałęzi jest to w porządku.

Peter Parker
źródło