2009-07-03 14 views
51

Subversion: czy można zatwierdzać wersje lokalne bez ich przesuwania, a następnie je przesuwać w późniejszym czasie - czy też brak tej funkcji, dlaczego jest nazywany "scentralizowanym"?svn: local commits

+11

użyj Git. ma tę funkcję – nightingale2k1

Odpowiedz

48

Nie można lokalnie zatwierdzać z Subversion.

Dzieje się tak dlatego, ponieważ jako scentralizowany system kontroli wersji, lokalna kopia robocza nie zawiera wszystkich informacji, jakie serwer posiada na temat ostatnich wersji, wpisów w dzienniku itp., Które miałby, gdyby był to system kontroli wersji rozproszonej. (DVCS).

Kopia robocza dla subversion zawiera kopię wszystkich plików, które zostały wyrejestrowane, aby można było przywrócić zmienione pliki bez kontaktu z serwerem.

Jeśli naprawdę chcesz wykonywać lokalne zatwierdzenia, powinieneś rzucić okiem na SVK, który jest zbudowany na Subversion i zapewnia funkcje podobne do DVCS.

+0

Czy masz doświadczenie z SVK? Używałem go trochę i wydawało mi się, że jest w porządku, ale nie mam zbyt wiele wiary w to, że gładkie svn używa. Mogę sobie wyobrazić, że wszystko, co zostało zbudowane, byłoby równie chwiejne. – jskulski

+2

@jskulski: Nie mam doświadczenia z SVK, ale ich strona "antiFUD" odpowiada na twoje pytanie: http://svk.bestpractical.com/view/SVKAntiFUD – Catskul

+1

Ta odpowiedź jest trochę myląca. Nie dlatego, że SVN jest scentralizowany, że lokalne zatwierdzenia nie są możliwe. Jest to po prostu pominięty szczegół implementacji. Traktowanie lokalnych zatwierdzeń jako kolejki zestawów zmian, które można wsunąć wsadowo do repozytu, jest technicznie wykonalne (svk to pokazuje) - wystarczyłoby zmienić UX do punktu, w którym SVN staje się bardziej "trudny" do użycia (przy użyciu standardowego workflow). SVN wybiera optymalizację pod kątem łatwości użycia, a nie funkcjonalności; ale można go włamać się do Subversion bez niszczenia czegokolwiek. –

1

Dlatego jest nazywany scentralizowanym. Możesz spróbować użyć repozytorium wewnątrz repozytorium. Jeden jest lokalny, a drugi jest odległy. Następnie przekazujesz całe wewnętrzne repozytorium do zdalnego.

4

Można zrobić coś takiego, jeśli łączysz serwer SVN z GIT lub Mercurial Bridge. Ponieważ GIT i Mercurial są w stanie wykonywać lokalne polecenia, możesz ich użyć w ten sposób. Może sprawdź git-svn lub coś podobnego (pamiętam, że był bazar-svn, ale nie jestem pewien).

+3

Wariantem tego jest "git init" w roboczej kopii SVN, spraw, aby lokalne zatwierdzenia były niedostępne. Później zatwierdzasz stan końcowy (lub nawet pośredni) do SVN. Po tym możesz również usunąć katalog .git. Oznacza to, że kopia robocza pozostaje kopią roboczą SVN, a nie git-repo. – fmarc

0

Nie! git jednak może to zrobić i możesz użyć git-svn do zachować synchronizację z oryginalnym repozytorium.

0

Aby uzyskać najlepsze z obu światów, SVK został zbudowany na Subversion, ale utrzymanie stanu lokalnej, dzięki czemu można zrobić lokalnych zobowiązuje ...

1

Jak mówili inni, nie.

Chciałbym zdecydowanie polecam próbować użyć czegoś zdalnie janky z svn.

Nie użyłem wystarczająco dużo SVK, aby polecić przeciwko niemu, wydawało się dość miłe. Jednak sceptycznie podchodzę do tego, że wykorzystuję wszystko, co zostało zbudowane na SVNie dla całego projektu, bez żadnych problemów. Korzystam z SVN na tyle, by wiedzieć, że nawet regularne cykle pracy mogą toastować, jeśli nie jesteś ostrożny.

Używamy SVN w pracy. Korzystam z bzr i bzr-svn, aby wykonywać wszystkie moje interakcje z i działa cudownie.Moja pracy jest coś takiego:

$ bzr branch file:///var/svn/project ~/project

(hack, hack, siekać)

$ bzr commit -m "commit log" (powtórzenie)

kiedy jestem gotowy

$ bzr push

Tak, inst EAD aktualizowania masz $ bzr merge i zobowiązać się zmiany (ewentualnie regały co pracują na), ale lokalne commity są bardzo miła rzecz, a regały jest zbyt (regały jest jak przywrócić z Zapisz)

Myślę, że git również to obsługuje. Słyszałem, że nie jest tak kompletny jak bzr-svn, ale nie mogę tego potwierdzić.

Ale korzystanie z DVCS z repozytorium svn to dobry sposób na rozpoczęcie pracy!

28

Wiele z wyżej stał się nieco przestarzały, a ponieważ kwestia ta pojawia się jako trafienie w wyszukiwarce Google dla „svn lokalny popełnić” oto zmiana:

rozważyć przy użyciu pakietu „git-svn” (wraz z "git-gui", jeśli nie znasz git), aby lokalne zatwierdzenia były możliwe i łatwe, z pełną, zdalną integracją SVN. Przyzwoity przegląd/samouczek/przypadek użycia to here. Właśnie zacząłem używać tego procesu z projektami Sourceforge, więc nie mogę jeszcze zgłaszać żadnych problemów. Upewnij się, że plik Autorów jest prawidłowy!

EDYCJA: Zaktualizowany link. Dzięki, hdl!

+0

+1 - za notowanie nadmiarowości. Myślę, że nawet gdzieś czytałem, że SVN będzie wprowadzać lokalne zatwierdzenia. – Seth

+0

To łącze nie działa. – thirtythreeforty

+1

@thirtythreeforty: Archive.org ma kopię strony: https://web.archive.org/web/20130924234957/http://utsl.gen.nz/talks/git-svn/intro.html – newenglander

1

Po odpowiedzi od BobC, dla mercurial użyłbyś hgsubversion.