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)


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

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."

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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.